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

유튜브 영상

스프링부트 - 보안



JWT



JWT - refresh 토큰과 logout





댓글

이 블로그의 인기 게시물

RabbitMQ 클러스터링(with Docker)

VSCode에서의 VIM 단축키와 키보드 구매 가이드