- 장점
- 서버 측 상태 관리 : 세션은 서버 측에서 사용자의 상태를 저장함. 이를 통해 사용자가 누구이지, 어떤 권한을 가지고 있는지 등의 정보를 서버가 직접 관리할 수 있음
- 보안성 : 세션 ID는 브라우저에 저장되며, 실제 사용자 데이터는 서버 측에 저장됨. 이로 인해 사용자 정보가 외부에 노출될 위험이 줄어듦
- 변경 용이성 : 사용자의 권한 변경과 같은 상태 변경이 필요한 경우, 서버 측에서 즉시 세션 데이터를 업데이트 할 수 있음
- 단점
- 스케일링 문제 : 세션은 서버의 메모리를 사용하기 때문에, 대규모 트래픽을 처리하는 애플리케이션에서 서버 리소스에 부담을 줄 수 있음
- 로드 밸런싱 문제 : 세션 정보가 한 서버에 저장되어 있는 경우, 로드 밸런서를 사용하여 여러 서버에 요청을 분산시키는 환경에서 세션 관리가 복잡해 질 수 있음
- 문득 드는 생각
- 세션 정보의 손실을 어떻게 대응할까?
- 세션 저장소 사용
- 세션 정보를 서버의 메모리에 저장하는 대신, Redis, MongoDB와 같은 외부 세션 저장소를 사용하는것.
- 이러한 외부 저장소를 사용하면 서버가 다시 시작되거나 스케일 아웃되어도 세션 정보가 유지됨
- 스티키 세션
- 로드 밸런서를 사용하여 여러 서버로 요청을 분산할 때, 특정 사용자의 모든 요청을 동일한 서버로 전송하는 방식
- 이를 통해 사용자는 항상 같은 서버와 상호작용하므로, 세션 일관성 문제를 해결할 수 잇음
- 데이터베이스 세션
- 세션 정보를 데이터베이스에 저장하는 방법
- 세션 정보를 중앙화된 위치에 저장할 수 있으므로 여러 서버 간에 세션을 공유할 수 있음\
- 세션 저장소 사용
- 세션 정보의 손실을 어떻게 대응할까?
- 장점
- 상태 비저장(stateless) : JWT는 서버 측에 상태 정보를 저장하지 않음. JWT에는 사용자의 인증 정보가 포함되어 있으며, 이 토근을 검증하기만 하면 됨. 서버 리소스 부담 줄어듦
- 확장성 : 상태 비버장 특성으로 인해, 서버의 확장성과 로드 밸런싱이 용이해짐. 어떤 서버에서든 토큰만 유효하다면 인증 처리 가능
- 다양한 플랫폼 및 도메인 간 인증 : 하나의 JWT로 다양한 애플리케이션과 서비스 간에 사용자 인증 정보를 공유할 수 있음