내일배움캠프 TIL 11일차 - Session과 JWT

정광훈(단기심화_9기)·2026년 9월 14일

TIL (Today I Learned)

목록 보기
120/132

[인증/인가] Session vs JWT 핵심 차이 완벽 비교 (Stateful과 Stateless)

로그인 인증 상태를 유지하는 대표적인 두 가지 방식인 Session과 JWT(JSON Web Token)의 동작 과정과 특징을 한눈에 비교 정리한 포스트입니다.


1. Session (세션) 방식

사용자의 로그인 인증 정보를 서버 메모리(저장 공간)에 직접 보관하는 전통적인 방식입니다.

📌 동작 흐름

  1. 세션 생성 및 쿠키 발급 (Server ➔ Client)

    • 사용자가 로그인에 성공합니다.
    • 서버가 고유한 세션 키(JSESSIONID)를 생성합니다.
    • 세션 저장소에 유저 정보를 등록합니다.
    • 응답 헤더 Set-Cookie에 키를 담아 클라이언트에 전달합니다.
    Set-Cookie: JSESSIONID=abc123
  2. 요청 시 쿠키 자동 동봉 (Client ➔ Server)

    • 브라우저가 전달받은 쿠키를 저장합니다.
    • 이후 모든 HTTP 요청의 Cookie 헤더에 JSESSIONID를 자동으로 포함해 전송합니다.
    Cookie: JSESSIONID=abc123
  3. 유저 식별 (Server)

    • 서버가 요청 헤더의 JSESSIONID를 확인합니다.
    • 세션 저장소(스프링 내부 메모리)에서 일치하는 키를 대조해 유저 정보를 찾고 인증을 완료합니다.

💡 특징: 서버가 세션 상태를 메모리에 보관하므로 Stateful(상태 유지)한 특성을 갖습니다.


2. JWT (JSON Web Token) 방식

인증에 필요한 정보들을 JSON 형태로 암호학적 서명과 함께 압축해 전달하는 토큰 규격입니다.

📌 토큰 3단 구조

  • Header (헤더): 서명 알고리즘(HS256 등) 및 토큰 타입 정보
  • Payload (페이로드): 회원 ID, 역할 등 실제 데이터 단위(클레임, Claim)
  • Signature (서명): (Header + Payload)와 비밀키로 생성한 위·변조 방지 검증값

📌 페이로드의 주요 클레임(Claim)

클레임 키설명
sub (Subject)토큰의 주체 식별자 (주로 회원 ID / 고유 식별값)
iat (Issued At)토큰 발급 시각 (UNIX Timestamp)
exp (Expiration)토큰 유효기간 만료 시각
role사용자의 권한 등급 (예: USER, ADMIN)

3. Session vs JWT 핵심 비교

비교 항목SessionJWT
저장 위치서버 메모리 / 세션 저장소클라이언트 (로컬 스토리지, 쿠키 등)
식별 데이터 형태의미 없는 고유 키 문자열 (JSESSIONID)유저 정보가 직렬화되어 담긴 자체 완결적 토큰
서버 특성Stateful (서버가 세션 상태를 기억함)Stateless (서버가 상태를 보관하지 않음)
서버 확장성서버 증설 시 세션 클러스터링/동기화 필요서명 검증만 수행하므로 다중 서버 확장에 매우 유리

💡 핵심 요약:
Session Key는 그 자체로 아무 의미 없는 난수 문자열이지만,
JWT는 토큰 자체에 모든 로그인 정보가 포함되어 있습니다.
따라서 서버가 세션을 보관할 필요 없이 서명 검증만으로 즉시 유저 식별이 가능합니다.
Stateless한 특성을 갖습니다.

📌Signature 생성 방법

Signature = {암호화알고리즘}(Base64Url(Header) + "." + Base64Url(Payload), SecretKey)
  • Base64URL은 일반 Base64의 URL에 문제될 수 있는 특수문자 +, /, = 를 처리합니다.

https://emn178.github.io/online-tools/base64_encode.html


📌 JWT 디코딩 확인 팁

  • jwt.io 공식 사이트의 디버거를 이용하면 암호화된 토큰 문자열이 어떤 Header와 Payload(클레임) 정보를 포함하고 있는지 즉시 파싱해 확인할 수 있습니다.
  • Decode로 누구나 정보를 확인할 수 있기 때문에 민감한 데이터가 들어가면 안 됩니다.
    계좌번호, 휴대폰 번호 같은 개인 정보는 없도록 유의해야 합니다.
profile
내배캠 Unity_9기 / 게임 서버 단기 심화_9기

0개의 댓글