쿠키

  • 브라우저가 값을 저장하고 자동으로 보내는 방식 토큰
  • 사용자를 증명하는 문자열

핵심

JWT

  • 매 요청마다 토큰을 검증해서 Authentication을 다시 만든다.
  • 로그인 요청은 “토큰을 발급받기 위한 요청”이고,
  • 로그인 이후에는 “이미 발급받은 토큰으로 접근 요청”이다.

세션

  • 매 요청마다 Session ID로 서버 세션을 찾아 SecurityContext를 복원한다.

구분JWT 방식세션 방식
로그인 성공 후JWT 발급서버 세션에 인증 정보 저장
클라이언트가 들고 있는 것access tokensession id cookie
이후 요청에서 보내는 것Authorization: Bearer access-tokenCookie: JSESSIONID=...
서버가 하는 일JWT 검증 후 Authentication 재구성세션에서 SecurityContext 복원
상태 저장 위치주로 클라이언트 토큰서버 HttpSession

흐름

세션

[로그인 요청]
username/password 제출
        ↓
검증 성공
        ↓
서버가 SecurityContext를 HttpSession에 저장
        ↓
클라이언트에게 Session ID 쿠키 발급
예: Set-Cookie: JSESSIONID=...
[로그인 이후 보호 API 요청]
브라우저가 Session ID 쿠키 자동 전송
예: Cookie: JSESSIONID=...
        ↓
서버가 Session ID로 HttpSession 조회
        ↓
세션에 저장된 SecurityContext 복원
        ↓
Authentication을 SecurityContextHolder에 올림
        ↓
AuthorizationFilter 권한 판단
        ↓
Controller 도착

JWT

[로그인 요청]
username/password 제출
        ↓
검증 성공
        ↓
JWT 발급
[로그인 이후 API 요청]
Authorization: Bearer access-token 제출
        ↓
JWT 검증
        ↓
Authentication 재구성
        ↓
권한 판단
        ↓
Controller 도착