네트워크/기본

[네트워크] JWT vs 세션

댕주 2025. 3. 16. 00:02
한 줄 정리
JWT -> 토큰 기반 인증 (서버가 상태를 저장하지 않음, RESTful API에 적합, 확장성 높음)
세션 -> 서버에서 관리하는 인증 방식 (보안성이 더 높고, 일반 웹사이트에 적합)

JWT (JSON Web Token)

✔️ JWT는 인증을 위한 토큰

✔️ 서버에서 발급한 후 클라이언트가 저장 & 사용하는 방식

✔️ 로그인 성공 시 서버가 JWT를 생성해서 클라이언트에게 주고, 이후 클라이언트는 JWT를 포함해서 요청을 보냄

✔️ 서버는 JWT만 확인하고 요청하기 때문에, 별도의 세션 저장소가 필요 없음

 

장점

  • 확장성 (Scalability) -> 서버에서 사용자가 상태를 저장할 필요가 없어서 수평 확장이 쉬움
  • RESTful API와 잘 맞음 -> 서버가 Stateless(상태가 저장하지 않음)한 구조로 유지 가능
  • 만료 시간을 설정할 수 있어 자동 로그아웃 가능

단점

  • 보안 위험 -> 토큰이 탈취되면 누구나 사용 가능
  • 토큰의 크기가 큼 -> 세션 ID보다 데이터가 많아서 네트쿼으 트래픽 증가 가능
  • 수정 불가 -> 발급한 JWT는 수정할 수 없고, 새로운 토큰을 발급해야 함

JWT의 구조

header payload signature

 

1️⃣ Header

  • 2️⃣ Payload 어떤 알고리즘을 사용할지 정보 포함 (HMAC, RSA)
  • 3️⃣ Signature 사용자 정보 (userId, 권한, ...) 와 만료 시간 (exp) 등의 데이터를 포함
  • 토큰이 위조되지 않았음을 증명하는 암호화된 서명
  JWT (토큰 인증) 세션 (Session 인증)
저장 위치 클라이언트 (브라우저, 앱) 서버 (세션 저장소 필요)
서버 부담 서버에서 상태 저장 안함 (Stateless) 서버에서 세션 저장해야 함 (메모리 사용)
보안 토큰이 탈취되면 누구나 사용 가능 세션 ID만 탈취되면 서버에서 무효화 가능
유효기간 만료시간(exp) 지정 가능 보통 브라우저 종료 시 만료
확장성 높음 (멀티 서버에서 관리 쉬움) 어려움
사용 예시 OAuth2 인증, 모바일 앱 로그인 일반적인 웹사이트 로그인

 

JWT vs 세션, 언제 써야 할까?

✔️ JWT

  • REST API 기반 인증 (서버에서 상태 저장 안함)
  • OAuth2 인증 (Google, Facebook 로그인)
  • 마이크로서비스 구조에서 인증 필요
  • 모바일 앱과 백엔드가 인증을 주고받을 경우

✔️ 세션

  • 보안이 중요한 서비스
  • 사용자가 많지 않은 웹사이트
  • JWT 없이도 인증 관리가 쉬운 경우