본문 바로가기

전체 게시물

(200)
[Spring-Security] Swagger에서 GET을 제외한 모든 HTTP 메서드에서 발생하는 CORS 문제 해결하기 1. 사건의 발달도메인을 구매하기 전에는 AWS EC2의 IP를 사용하여 Swagger를 배포하였다. Swagger를 통해 서버로 요청을 보내게 되면, Swagger 주소와 서버 주소가 동일하기 때문에 CORS 문제를 고민할 필요가 없었다. 이젠 도메인을 구매하고 SSL 인증서를 발급받아 도메인 주소로 Swagger를 접속하도록 하였다. 그런데 GET 요청을 제외한 나머지 HTTP 메서드에 대해서 전부다 403 Invalid CORS request 오류가 발생하였다. 도메인에 맞춰서 Cors와 Swagger 설정을 했음에도 해결되지 않았다. 하루 내내 붙잡고 있어도 해결되지 않아, 게임으로 잠시 도피하고…. 다음날 처음부터 차근차근 해보니 해결책을 찾았다. 동일한 개발 환경에서 이 오류가 발생하는 사람이..
JVM(Java Virtual Machine) 구조 자바의 특징 Write once, run anywhere. (한 번 작성하면 어디서든 실행된다.) 1. JVM: Java Virtual Machine JVM이란 Java 프로그램을 실행하는 가상 환경이다. 자바 가상 머신을 사용하여 자바 바이트 코드를 실행할 수 있다. JVM은 운영체제 위에서 작동하면서, 자바 컴파일러에 의해 생성된 바이트 코드를 운영체제가 이해할 수 있는 기계어로 바꿔 실행한다. 덕분에 자바 프로그램은 특정 운영체제에 종속되지 않고, 다양한 운영체제에서 동일하게 사용할 수 있다. ex) 소스 코드가 담긴 Person.java 파일이 자바 컴파일러에 의해 컴파일되면 Person.class 파일이 생성된다. 이 .class 파일에는 바이트코드가 포함되어 있고, JVM이 바이트코드를 기계어..
쿠키(Cookie)와 세션(Session) 방식의 개념과 차이점 1. 쿠키(Cookie)와 세션(Session) 개념이 등장한 이유HTTP 프로토콜은 비상태성(stateless)를 가지고 있다. 이게 무슨 말이냐면, 동일한 클라이언트가 서버로 요청을 보냈을 때, 서버는 이전의 요청들을 기억하지 않는다는 것이다. 예를 들면, 메인 페이지와 로그인 페이지가 존재할 때, 로그인을 완료하고 메인 페이지로 이동하였을 때, 서버는 로그인을 했는지 알 수 없다는 것이다.사용자가 로그인을 했는지 여부를 알 수 없으므로 모든 요청마다 로그인을 해야할 것이다. 따라서 사용자의 상태를 유지하기 위해서 쿠키(Cookie)와 세션(Session)이 도입되었다. 2. 쿠키(Cookie)2-1. 쿠키(Cookie)란?쿠키란 클라이언트의 브라우저에 사용자의 상태 정보를 저장하는 데이터 파일이다...
토큰(Token) 방식과 세션(Session) 방식 1. 인증(Authentication)과 인가(Authorization)인증(Authentication)은 사용자가 서비스에 등록되어 있는지 검증하기 위해 사용된다. 예를 들어, 사용자가 입력한 정보가 서비스에 등록되어 있다면 인증된 사용자라고 할 수 있다.인가(Authorization) 는 인증이 완료된 사용자가 서버에서 보호하고 있는 자원에 접근할 수 있는지 권한을 확인하는 과정이다. 먼저 인증이 되어야만, 인가 여부를 확인할 수 있다. 예를 들어, 게시판에 글을 작성하는 것은 로그인 된(인증된) 사용자(USER, ADMIN)라면 누구나 할 수 있지만, 관리자 페이지에 접근하는 것은 관리자 권한(ADMIN)이 있는 사람만 가능할 것이다. 인증(Authentication), 인가(Authorizatio..
[Spring-Security] JWT 검증 시에 발생하는 예외는 ExceptionHandler에서 처리할 수 없다. 1. 내가 기대했던 결과사용자가 Authorization 헤더에 Bearer 타입의 Access Token을 담아서 서버로 요청한다.서버에서 Access Token을 받아서 만료된 토큰인지 검증한다.만료된 토큰이라면 ExpiredJwtException 예외를 발생시킨다.@ExceptionHandler를 사용하여 예외를 핸들링한다.JWT 토큰을 검증하는 FilterdoInternal()에서 사용자의 요청을 가로챈다.HttpServletRequest에서 1-1에서 담은 Access Token을 가져온다.try문에서 parseToken()를 호출한다.validateToken()를 통해 토큰을 검증한다.이때, 토큰이 만료되었는지 확인한다.토큰이 만료되었다면 ExpiredException 예외가 발생한다.try-..
[Spring] Code Deploy 사용 시에 환경변수가 적용되지 않는 문제 1. 프로젝트 환경Java 17SpringBoot 3.3.2Code Deploy기반 CI/CD 2. Code Deploy는 .bashrc 파일을 사용하지 못한다.CI/CD 파이프라인 구축을 위해 Code Deploy를 사용하였고, 빌드된 파일을 AWS EC2에서 실행하기 위해 .bashrc 파일에 환경변수 값을 등록하였다. EC2의 .bashrc에 환경변수를 등록하였으므로 빌드된 파일을 실행시켰을 때, 문제가 없을 것이라 생각했습니다. Github으로 코드를 push 하면 사진과 같이 문제없이 EC2로 jar 파일이 배포됩니다. AWS EC2의 .bashrc에 prod 환경에서 필요한 환경 변수 값을 저장하였고, 스프링 애플리케이션 실행 시에 사용하기를 기대하였습니다.  그러나… 스프링 애플리케이션 실행..
[Java] LockSupport와 ReentrantLock 1. LockSupport1-1. LockSupport란?synchronized의 경우 임계 영역에 접근하지 못하고 대기 중인 스레드는 BLOCKED 상태가 된다. BLOCKED 상태는 다른 스레드에 의해 interrupt 될 수 없기 때문에 lock을 얻지 못하면 영원히 대기 상태로 유지한다.LockSupport는 무한 대기를 해결하기 위해서 대기 중인 스레드의 상태를 BLOCKED가 아닌 WAITING 이 되게 한다. WAITING 상태는 다른 스레드가 interrupt를 통해 깨우거나, 스스로가 시간을 정하여 깨어날 수 있다.1-2. LockSupport의 대표적인 기능park() : 현재 스레드를 WAITING 상태로 바꾼다.parkNanos(nanos) : 나노초 동안 현재 스레드를 TIMED_..
전공자의 정보처리기사 실기 1주일만에 합격하기 (94점 / 100점) 저는 컴퓨터공학 4학년 학부생이며 2024년도 2차 정기 기사 시험을 쳤습니다.   일주일 동안 어떻게 공부를 했는지 공유해보겠습니다.1. 공부 기간을 너무 길게 잡지 말자.저는 실기가 아닌 필기를 공부할 때 3주를 학습하였습니다. 당시에는 뭐가 그렇게 불안했는지 정보처리기사에서 요구하는 모든 내용을 완벽하게 이해해야겠다는 압박감이 있었습니다. 그래서 긴 시간을 잡고 공부를 하였는데, 막상 하다 보니 "아직 시간이 많이 남았으니 내일부터 하자", "이 내용은 나중에 하자" 이런 식으로 미루는 제 자신을 보았습니다. 이러한 경험을 바탕으로 실기를 칠 때는 준비 기간을 확 줄여서 한 번에 집중해서 끝내자 했던 것 같습니다. 물론 컴퓨터공학 지식이 부족한 경우 좀 더 기간을 잡으시는 게 좋을 것 같습니다...