Session 대신 JWT를 사용하는 이유
Session 대신 JWT를 사용하는 이유
- 실 서버는 하나의 인스턴트로만 동작하지 않는다. 서버의 고가용성(high availabliity, HA)을 확보하기 위해 두 개 이상의 병렬서버로 운영하게 된다.
- 서버가 병렬로 운영되는 상황에서 세션을 사용하면 각 서버간의 세션을 동기화하는 문제가 발생한다. 이를 해결하기 위해 공유 데이터베이스를 이용한 세션공유 기법들을 사용하기도 한다.
- 서버가 많아지면 세션동기는 더 어렵다.
- JWT를 사용하면 세션사용으로 인한 서버 자체에 부담도 줄이면서 공유 세션에 대한 관리가 한층 수월하다.
스프링 시큐리티
- SecurityConfig.java
- session을 사용하지 않도록 설정
- jwtAuthFilter 추가
- httpBasic 제거
- JwtAuthenticationFilter.java
- config.filter 패키지에 파일 추가
- jwt dependency 추가 (3개). gradle refresh하는 거 까먹지 말기
- config.service 패키지에 [JwtService.java](http://JwtService.java) 추가
- jwtService와 UserDetailService final field 추가. @RequiredArgsConstructor 까먹지 말기
- config.service.JwtService
- 소스 참조해서 파일 작성
- controller, service 수정
- User 를 리턴하면 pwd가 그대로 노출되므로 AuthResponse와 AuthRequest로 교체
Github
https://github.com/ohhoonim/factory.git
댓글
댓글 쓰기