JWT 개념과 구조

송진우·2025년 6월 19일

개념 정리

목록 보기
3/4
post-thumbnail

웹 개발에서 인증은 빠질 수 없는 핵심 요소입니다.
그중에서도 최근 가장 많이 사용되는 방식이 바로 JWT입니다.

JWT의 개념부터 구조, 동작 원리, 세션 방식과의 차이까지 정리해보려고 합니다.


1. JWT란?

JWT(Json Web Token) 는 서버가 로그인에 성공한 사용자에게 발급하는 서명된 문자열 토큰

  • JSON 형식의 데이터를 Base64 URL로 인코딩
  • 서버는 사용자 상태를 저장하지 않고 클라이언트가 토큰을 보냄
  • 주로 HTTP Header로 전송

❗ 중요! JWT는 Stateless 하다


2. JWT를 사용하는 이유

기존 세션 기반 인증은 서버가 메모리에 세션을 저장하고 클라이언트가 세션 ID 를 쿠키로 보내는 방식

❗문제점

  1. 서버 메모리 사용량 증가
  2. 서버가 여러 대일 경우 세션 공유 설정 필요

JWT가 해결하는 부분

장점설명
Stateless서버가 사용자의 상태(세션)를 기억하지 않아도 됨
확장성서버가 여러 대일 때도 중앙 저장소 없이 인증 가능
유연성토큰 안에 사용자 정보를 직접 담을 수 있음
효율적 인증로그인 이후 별도 저장소 조회 없이 인증 처리 가능

3. JWT의 구조

JWT는 다음과 같이 세 부분으로 구성

<HEADER>.<PAYLOAD>.<SIGNATURE>

예시:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
.
eyJ1c2VySWQiOiIxMjMiLCJyb2xlIjoiVVNFUiJ9
.
U7MXhzfHqPcjIzR8LP6SgH3W1bRtD4s6l8FVF9t9QZo
구성 요소설명
Header토큰의 타입과 서명 알고리즘 정보
Payload사용자 정보, 토큰 만료 시간 등 주요 데이터
Signature서버 비밀키로 생성한 서명. 위조 방지 목적

4. JWT의 동작 원리

JWT의 작동 흐름

  1. 클라이언트가 로그인 요청을 보냄
  2. 서버는 사용자 인증에 성공하면 JWT를 생성하여 클라이언트에게 응답
  3. 클라이언트는 발급받은 JWT를 저장
    (EX: localStorage, sessionStorage, HttpOnly Cookie 등)
  4. 클라이언트는 이후 요청마다 JWT를 HTTP Header의 Authorization 필드에 담아 전송
    Authorization: Bearer <JWT>
  5. 서버는 JWT의 서명(Signature)만료 시간(exp) 을 검증하여
    사용자 인증 여부를 판단

JWT는 Stateless 방식이므로 서버는 세션을 따로 저장하지 않고 토큰 자체로 인증


5. Access Token vs Refresh Token

JWT 인증에서는 보통 두 종류의 토큰을 사용

항목Access TokenRefresh Token
목적API 요청 인증Access Token 재발급
만료 시간짧음 (5~30분)김 (1일~2주)
저장 위치Header / CookieHttpOnly Cookie 권장
보안 위험탈취 시 즉시 악용 가능탈취 시 재발급 차단 로직 필요
사용 시점모든 API 요청에 사용Access Token 만료 시 사용

6. 세션(Session)이란?

세션은 서버가 클라이언트의 로그인 상태 정보를 메모리 또는 저장소에 저장하는 방식.
클라이언트는 이 정보를 구분하기 위한 세션 ID를 쿠키에 저장.

세션 특징

  • 서버가 상태를 기억하는 방식 (Stateful)
  • 서버 재시작 시 세션 초기화가 발생
  • 서버 간 세션 공유가 필요할 경우 Redis나 Sticky Session 설정이 필요

세션 동작 흐름

  1. 사용자가 로그인하면 서버가 세션 저장소에 인증 정보를 저장
  2. 서버는 세션 ID를 쿠키로 클라이언트에게 전달
  3. 클라이언트는 이후 요청마다 쿠키를 통해 인증을 유지

7. JWT vs 세션 비교

항목세션 방식JWT 방식
상태 관리서버가 세션 저장서버는 상태 저장 X (Stateless)
확장성세션 공유 설정 필요토큰만 있으면 어디서나 인증
저장 위치서버 메모리 / Redis클라이언트(localStorage, Cookie 등)
보안세션 ID 탈취 시 인증 우회 가능JWT 탈취 시 위조 가능성 있음
로그아웃 처리서버에서 세션 삭제로 즉시 반영토큰 무효화 어려움
인증 속도세션 저장소 조회 필요토큰 디코딩만으로 인증 가능 (빠름)
만료 처리서버에서 직접 관리토큰 자체에 exp로 설정 가능

0개의 댓글