보안

JWT(Json Web Token)

zinoing

웹 애플리케이션에서 중요한 과제 중 하나는 바로 사용자의 인증(Authentication)인가(Authorization) 관리이다.
전통적으로는 서버 세션(Session)을 사용했지만, 최근에는 JWT(Json Web Token) 기반 인증이 널리 쓰이고 있다.
이번 글에서는 JWT의 개념과 역할, 그리고 세션과의 차이를 정리해보겠다.


1. JWT란 무엇인가?

  • JWT (Json Web Token) 은 JSON 형식으로 정보를 안전하게 표현하는 토큰 규격이다.
  • 서버가 로그인 성공 후 클라이언트에게 발급하며, 이후 요청마다 HTTP 헤더에 담아 전송된다.
  • JWT는 서명(Signature)을 포함하므로, 토큰이 위조되었는지 서버에서 쉽게 검증할 수 있다.

2. JWT의 구조

JWT는 세 부분으로 구성되며, .(점)으로 구분된다.

header.payload.signature
  1. Header : 토큰 타입(JWT)과 서명 알고리즘 정보
  2. Payload : 사용자 정보 및 클레임(Claims) – 예: 사용자 ID, 권한(role), 만료 시간(exp)
  3. Signature : 토큰이 위조되지 않았음을 보장하는 서명

예시 페이로드:

{ "sub": "user123", "role": "admin", "exp": 1730505600 }

3. JWT의 역할

  1. 인증(Authentication)
    • 사용자가 로그인에 성공하면 서버는 JWT를 발급하고, 이후 요청 시 JWT로 사용자를 식별.
  2. 인가(Authorization)
    • JWT의 Payload에 role, scope 등을 담아 접근 권한을 제어.
  3. 정보 교환
    • JSON 형식이므로 시스템 간 데이터 전달 용도로도 활용 가능.

4. 세션(Session)과 JWT의 차이

  1. 세션(Session) 기반 인증
    • 서버가 로그인 정보를 서버 메모리 또는 DB(Session Store) 에 저장.
    • 클라이언트는 세션 ID만 쿠키에 보관하고, 요청 시 전송.
    • 서버는 세션 ID를 키로 삼아 해당 사용자 정보를 조회.
  2. JWT 기반 인증
    • 서버가 사용자 정보를 담아 JWT를 발급.
    • 클라이언트는 JWT를 저장(쿠키, 로컬 스토리지 등).
    • 서버는 별도 저장소 없이 JWT 서명 검증만으로 사용자 인증 가능.

5. 왜 세션 ID 대신 JWT가 많이 쓰일까?

  • 확장성(Scalability)
    • 세션 ID는 서버에 상태를 저장해야 하므로 서버 확장이 번거롭다.
    • JWT는 서버가 상태를 기억할 필요가 없어, 분산 환경·클라우드 환경에서 매우 유리.
  • 마이크로서비스 아키텍처 적합
    • 여러 서비스가 공통 인증 시스템을 사용해야 할 때, 세션 공유보다는 JWT 토큰만 전달하면 모든 서비스에서 검증 가능.
  • Stateless 특성
    • 서버 장애/재시작에도 세션 유지 필요 없음.
    • 로드밸런싱, 서버 오토스케일링 환경에 자연스럽게 어울림.
  • 표준화와 호환성
    • JWT는 RFC 7519 표준 규격.
    • 다양한 언어, 프레임워크, 라이브러리에서 지원 → 도입이 쉽다.

 

'보안' 카테고리의 다른 글

SQL Injection(SQLi)  (0) 2025.10.28
XSS(Cross-Site Scripting)  (0) 2025.10.28
HTTPS와 SSL인증서의 역할  (0) 2025.10.28
CSRF(Cross-Site Request Forgery)  (0) 2025.10.28
쿠키와 세션  (0) 2025.10.28