Spring에서 인증/인가를 처리하기 위해서는 일반적으로 Session과 JWT중 하나를 선택해 사용한다.
둘중 어떤 방식을 선택하려면 Stateful / Stateless에 대해서 짚고 넘어갈 필요가 있다.
Stateful 방식은 서버에서 클라이언트의 상태를 저장하고 관리한다.
Stateless는 서버에서 클라이언트의 상태를 관리하지 않는다.
Session의 경우는 Stateful이다.
기본적으로 Session id를 client에 서빙하고, 해당 Session id에 대한 정보는 서버에 저장되며,
서버에서 관리된다.
JWT는 Stateless다.
JWT의 토큰 안에 인가에 필요한 정보가 담겨있으며, 따라서 서버에서 인가에 필요한 정보를 저장하지 않아도 된다.
Session과 JWT 중 무엇을 쓰느냐는 자유다.
하지만 각각의 장단점은 알고 쓰는 편이 좋다.
1. Session
Session은 무엇보다 필자의 개인적인 경험이지만, 사용하기 간편하다.
다른 환경에서는 몰라도, Spring에서는 매우 쓰기 손쉽게 되어있다.
JWT랑은 다르게, 서버 측에서 인가 정보를 관리할 수 있다.
하지만, Session은 기본적으로 서버의 내부에 저장된다.
이는 Scale-out 시 서버 간의 세션 정보 공유가 없기 때문에 문제가 발생한다.
만약 Scale-out 환경에서 Session을 사용하기 위해서는 별도의 Redis 등을 이용해 세션 정보를
중앙 통제 관리할 필요성이 생긴다.
2. JWT
JWT는 Stateless하므로, Scale-out 환경에서도 유연하게 대처가 가능하다.
다만, 토큰을 처리하는 과정에서 세션 방식보다 더 많은 리소스가 사용된다.
또한 한번 발행된 토큰은 서버에서 손을 쓸 수 없다.
'개발새발 > Spring' 카테고리의 다른 글
[Spring] Server response normalization (0) | 2024.10.27 |
---|---|
[Spring] Bean과 DI, IoC (0) | 2024.08.24 |
[Spring] AWS Secrets manager & RDS & Docker (2) | 2024.07.25 |