Session과 JWT 너네 둘이 궁금하다.
Session과 JWT를 배우며, 둘의 차이점과 어떤 방식이 더 좋을까? 라는 생각으로 접근을 했다.
우선 결론부터 말하자면 둘 다 장단점이 있어서 뭐가 더 좋다 라고 말하기 힘든 것이다.
Session
- 정의
- 서버에서 일정시간 동안 클라이언트의 상태를 유지하기 위해 사용된다.
- 서버는 클라이언트에게 세션 ID를 제공하고, 이 ID를 통해 사용자를 식별한다.
- 저장위치
- 서버에 저장 된다. 클라이언트는 보통 세션 ID를 쿠키에 저장해서 서버와 통신할 때 사용한다.
JWT
- 정의
- JWT(Jason Web Token)
- JSON 포맷을 이용하여 사용자에 대한 속성을 저장하는 Claim 기반의 Web Token 이다.
- 즉 토큰의 한 종류이다.
- 저장위치
- 클라이언트(쿠키,로컬 스토리지, 세션 스토리지 등)에 저장된다. 서버는 이 토큰을 검증하여 사용자를 인증한다.
Session과 JWT의 주요 차이점
- 저장위치
- 세션은 서버에 저장된다.
- JWT는 클라이언트에 저장된다.
- 상태관리
- 세션은 상태 저장(Stateful) 방식을 사용한다.
- JWT는 상태 비저장(Stateless) 방식을 사용한다.
JWT의 쓰는 이유를 말해보라고 하면 이렇게 대답한다.
서버가 여러대일 때 각 Session 마다 다른 Client 정보를 가지고 있다.
Session1: Client1, Client2
Session2: Client3
Session3: null
만약 Client1이 Session2에 API 요청을 하게 된다면 문제가 발생할 것이다.
그래서 JWT를 쓴다.
라고 말하면 아직 JWT만 공부해서 세션을 잘 모르는 것일 수도 있다.
Session을 담는 Storage를 만들고 각 서버가 Storage에서 세션을 받아오면 된다.
JWT는 이런 방식을 사용한다
로그인 정보를 Server에 저장하지 않고 Client의 정보를 JWT로 암호화하여 클라이언트측에서 저장한다.
서버에 저장.. 클라이언트에 저장...
뭔가 차이점이 보이기 시작한다. Secret Key... Session Storage
인증 만료에 대한 차이점...이 보인다.
Session과 JWT의 인증 만료
우선 둘 다 만료 시간을 설정할 수 있다.
근데 서버와 클라이언트에 저장하는 여기서 차이가 생긴다.
Session
세션은 특정 사용자에 대한 인증을 만료 시키고 싶을 때 세션 저장소에서 해당 사용자의 세션을 지우면 된다.
JWT
JWT는 토큰 만료 시간 전에 인증을 만료하게 할 수 없다.
Secret Key를 바꾸면 인증이 만료되지 않나? 라고 생각하면 위험하다
Secret Key를 변경하는 것은 모든 토큰을 무효화 하는 극단적인 방법이다.
실제로 이런 방법을 쓴다..? 오우... 하지 마라...
대신 JWT 블랙리스트 라는 방법이 있다.
JWT 블랙리스트?
JWT 블랙 리스트를 사용해서 토큰이 들어올 때 서버에서 JWT 블랙리스트에 해당 토큰이 있는지 검사하면 된다.
근데 이 방법엔 단점이 있다
블랙리스트가 많아질 수록 서버의 부하가 심해진다.
사용자가 많아지고 블랙리스트가 늘어날 수록 더 그렇다
이걸 해결할 대표적인 방법이 있다는데..
로드 밸런서에 캐시를 두거나
중간에 인메모리 캐시 서버를 두는 것이라고 한다
위 둘은 아직 잘 모르기에 패스
방법이 여러가지 있는데 상황에 맞게 써야한다.
'TIL' 카테고리의 다른 글
TIL 2023-11-16 RestTemplate 짧은 설명 (1) | 2023.11.16 |
---|---|
TIL 2023-11-15 JWT 검증 과정에서 일어나는 문제 해결 과정 (1) | 2023.11.15 |
TIL 2023-11-10 HttpServlet 및 쿠키 처리 (0) | 2023.11.10 |
TIL 2023-11-09 nullable = false 설정 했는데도 빈 값이 들어갈 때 (0) | 2023.11.09 |
TIL 2023-11-08 영속성 컨텍스트, Jpa의 트랜잭션 (0) | 2023.11.08 |