1. Session이란?
유저의 정보를 데이터베이스에 저장하고 상태를 유지하는 도구
Session의 특징
- session은 특수한 ID 값으로 구성되어있다.
- Session은 서버에서 생성되며 클라이언트에서 쿠키를 퉁해 저장된다.
- 클라이언트에서 요청을 보낼 때 Session ID를 같이 보내면 현재 요청을 보내는 사용자가 누구인지 서버에서 알 수 있다(요청마다 매번 아이디와 비밀번호를 물어볼 필요 없음)→ JWT토큰도 마찬가지
- Session ID는 데이터베이스에 저장되기때문에 요청이 있을때마다 매번 데이터베이스를 확이해야한다
- 서버에서 데이터가 저장되기때문에 클라이언트에 사용자 정보가 노출될 위험이 없다.→session ID는 아무런 의미 없는 string이기 때문!
- 데이터 베이스에 Session을 저장해야하기때문에 Horizontal Scaling이 어렵다→ 리소스적인 단점!!
2. JWT Token이란?
유저의 정보를 Base64로 인코딩된 String값에 저장하는 도구
JWT Token의 특징
- JWT Token은 Header, Payload, Signature로 구성되어있으며 Base64로 인코딩되어 있다
- JWT Token은 서버에서 생성되며 클라이언트에서 저장된다.
- 클라이언트에서 요청을 보낼 때 JWT Token ID를 같이 보내면 현재 요청을 보내는 사용자가 누구인지 서버에서 알 수 있다(요청마다 매번 아이디와 비밀번호를 물어볼 필요 없음)
- JWT Token은 데이터베이스에 저장되지 않고, SIgnature 값을 이용해서 검증할 수 있다. 그래서 검증할때마다 데이터베이스르 매번 들어다볼 필요가 없다
- 정보가 모두 토큰에 담겨있고 클라이언트에서 토큰을 저장하기 때문에 정보 유출의 위험이 있다
- 데이터베이스가 필요없기때문에 Horizontal Scaling이 쉽다.
3. Session vs JWT Token 비교
비교요소 | Session | JWT Token |
유저의 정보를 어디에서 저장하고 있는가? | 서버 | 클라이언트 |
클라이언트에서 서버로 보내는 정보는? | 쿠키 | 토큰 |
유저 정보를 가져올때 데이터베이스를 확인해야하는가? | O | 토큰의 payload에 들어있는 정보만 필요한 경우 확인 불필요 |
클라이언트에서 인증 정보를 읽을 수 있는가? | 불가능 | 가능 |
Horizontal Scaling이 쉬운가? | 어려움 | 쉬움 |
Session과 JWT Token 선택 시 고려사항
- 보안 측면에서의 고려사항
- 세션 기반 인증의 경우, 세션 하이재킹 공격에 대한 취약점이 있으며, 이에 대한 보호 조치(예: HTTPS 사용, 쿠키 속성에 Secure 및 HttpOnly 플래그 설정 등)에 대해 설명할 수 있습니다.
- JWT의 경우, 토큰이 탈취되면 인증 정보가 노출될 위험이 있으며, 이를 방지하기 위한 방법(예: 토큰 만료 시간 짧게 설정, 보안 통신 채널 사용 등)에 대해 설명할 수 있습니다.
- 성능 및 확장성 관련 고려사항
- 세션은 서버 메모리를 사용하기 때문에 대규모 분산 시스템에서 세션 관리가 복잡하고 비용이 많이 들 수 있습니다. 세션 스토리지를 위한 중앙 데이터베이스나 캐시 서버(예: Redis, Memcached) 사용이 필요할 수 있습니다.
- JWT는 상태를 클라이언트에 저장하여 서버의 부하를 줄이고, 스케일 아웃이 용이하지만, 토큰이 클라이언트에 의해 조작될 가능성을 배제할 수 없으므로, 서명을 통한 검증 절차가 중요합니다.
- 만료 및 인증 관리
- 세션의 경우, 서버에서 세션 만료를 직접 관리할 수 있으며, 사용자가 로그아웃하면 서버에서 세션을 즉시 파기할 수 있습니다.
- JWT는 만료 시간이 내장되어 있지만, 일단 발급된 후에는 서버 측에서 무효화시키기 어렵습니다. 이에 대한 해결책으로는 블랙리스팅 접근 방식이나 토큰의 짧은 수명을 설정하는 방법 등이 있습니다.
- 유연성 및 활용 사례
- 세션은 전통적인 웹 애플리케이션에 적합하며, 서버가 사용자 상태를 관리해야 하는 경우 유리할 수 있습니다.
- JWT는 RESTful API, 싱글 페이지 애플리케이션(SPA), 모바일 애플리케이션 등에서의 인증에 적합하며, 다양한 플랫폼 및 도메인 간 인증에 유리합니다.
- 실제 사용 사례 및 베스트 프랙티스
- 각 기술을 선택할 때 고려해야 할 사례와 베스트 프랙티스를 제공하여, 독자들이 각자의 요구 사항과 환경에 맞는 결정을 내릴 수 있도록 도와줍니다.
'네트워크' 카테고리의 다른 글
RefreshToken & AccessToken (0) | 2024.02.19 |
---|---|
[네트워크] HTTPS와 TLS(SSL) (2) | 2024.01.25 |
[네트워크] HTTP 심화-(2)HTTP/2 vs HTTP/3 (3) | 2024.01.25 |
[네트워크] HTTP 심화-(1)HTTP/1.0 vs HTTP/1.1, keep-alive, HOL (2) | 2024.01.25 |
[네트워크] HTTP기본 (1)HTTP헤더 (2) | 2024.01.25 |