웹 애플리케이션에서 중요한 과제 중 하나는 바로 사용자의 인증(Authentication) 과 인가(Authorization) 관리이다.
전통적으로는 서버 세션(Session)을 사용했지만, 최근에는 JWT(Json Web Token) 기반 인증이 널리 쓰이고 있다.
이번 글에서는 JWT의 개념과 역할, 그리고 세션과의 차이를 정리해보겠다.
1. JWT란 무엇인가?
- JWT (Json Web Token) 은 JSON 형식으로 정보를 안전하게 표현하는 토큰 규격이다.
- 서버가 로그인 성공 후 클라이언트에게 발급하며, 이후 요청마다 HTTP 헤더에 담아 전송된다.
- JWT는 서명(Signature)을 포함하므로, 토큰이 위조되었는지 서버에서 쉽게 검증할 수 있다.
2. JWT의 구조
JWT는 세 부분으로 구성되며, .(점)으로 구분된다.
header.payload.signature
- Header : 토큰 타입(JWT)과 서명 알고리즘 정보
- Payload : 사용자 정보 및 클레임(Claims) – 예: 사용자 ID, 권한(role), 만료 시간(exp)
- Signature : 토큰이 위조되지 않았음을 보장하는 서명
예시 페이로드:
{ "sub": "user123", "role": "admin", "exp": 1730505600 }
3. JWT의 역할
- 인증(Authentication)
- 사용자가 로그인에 성공하면 서버는 JWT를 발급하고, 이후 요청 시 JWT로 사용자를 식별.
- 인가(Authorization)
- JWT의 Payload에 role, scope 등을 담아 접근 권한을 제어.
- 정보 교환
- JSON 형식이므로 시스템 간 데이터 전달 용도로도 활용 가능.
4. 세션(Session)과 JWT의 차이
- 세션(Session) 기반 인증
- 서버가 로그인 정보를 서버 메모리 또는 DB(Session Store) 에 저장.
- 클라이언트는 세션 ID만 쿠키에 보관하고, 요청 시 전송.
- 서버는 세션 ID를 키로 삼아 해당 사용자 정보를 조회.
- 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 |