웹 애플리케이션에서 사용자의 로그인 상태를 유지하는 두 가지 핵심 방식인 세션(Session) 기반 인증과 JWT(JSON Web Token) 기반 인증의 가장 큰 차이는 '사용자의 로그인 상태 정보(State)를 서버와 클라이언트 중 어디에 저장하느냐'입니다.
1. 세션(Session) 기반 인증: 서버가 기억하는 방식 (Stateful)
- 원리: 사용자가 로그인하면 서버의 메모리나 데이터베이스에 사용자의 인증 정보를 저장하고, 클라이언트(브라우저)에게는 이를 식별할 수 있는 영수증 번호표 같은 '세션 ID(Session ID)'만 쿠키(Cookie)를 통해 발급합니다.

- 동작 방식: 클라이언트가 API 요청을 보낼 때마다 쿠키에 담긴 세션 ID를 전달하면, 서버는 자신의 저장소(Session DB)를 뒤져 해당 ID가 유효한지, 누구의 것인지 확인한 후 요청을 처리합니다.

- 비유: 클럽 입장 시 신분증을 확인하고 방문자 명부(서버 DB)에 이름을 적은 뒤, 이름표(세션 ID)를 달아주는 것과 같습니다. 서버(클럽 직원)는 항상 명부를 가지고 일일이 대조해야 합니다.

2. JWT 기반 인증: 클라이언트가 증명하는 방식 (Stateless)
- 원리: 사용자가 로그인하면 서버는 사용자의 식별 정보와 권한 등을 담아 암호학적으로 서명된 '토큰(JWT)'을 클라이언트에게 발급합니다. 가장 중요한 점은 서버가 발급 후 이 토큰의 상태를 따로 저장하지 않는다는 것입니다.
- 동작 방식: 클라이언트가 요청을 보낼 때마다 HTTP 헤더에 JWT를 담아 보내면, 서버는 데이터베이스를 매번 조회할 필요 없이 자신이 가진 '비밀키(Secret Key)'로 토큰의 위변조 여부(서명)만 검증하고 요청을 처리합니다.

- 비유: 관공서에서 위조 방지 홀로그램(서명)이 찍힌 주민등록등본(JWT)을 발급해 주는 것과 같습니다. 한 번 발급해주면, 이후 제출받는 기관은 매번 관공서 DB를 뒤지지 않고 홀로그램만 보고 진위를 판별합니다.

3. 세션 vs JWT 핵심 차이점 비교
복잡한 시스템 아키텍처를 설계할 때 반드시 고려해야 하는 두 방식의 트레이드오프(Trade-off)는 다음과 같습니다.
| 구분 | 세션(Session) 기반 인증 | JWT 기반 인증 |
| 상태 저장 위치 | 서버 (메모리, Redis, DB 등) | 클라이언트 (로컬 스토리지, 쿠키 등) |
| 서버 확장성 (Scalability) |
낮음. (서버를 늘릴 경우 세션 클러스터링 등 저장소를 공유하는 추가 인프라 구축 필요) | 매우 높음. (서버간 세션 공유 불필요, 독립적인 마이크로서비스(MSA) 환경에 최적화) |
| 보안 및 제어력 | 높음. (서버가 상태를 중앙 통제하므로 해킹 의심 시 즉시 특정 사용자의 세션 만료 및 강제 로그아웃 처리 가능) | 낮음. (한 번 발급된 토큰은 유효기간 만료 전까지 서버가 강제 무효화(Revoke)하기 까다로움) |
| 트래픽 및 성능 부하 | 요청마다 서버가 DB나 인메모리를 조회하는 I/O 부하 발생 | 데이터베이스 조회 없이 CPU 연산(서명 암호화 검증)만으로 처리 가능 |
| 데이터 전송량 (Payload) |
작음. (짧은 무작위 문자열인 세션 ID만 전송) | 상대적으로 큼. (사용자 정보 등 Claim이 포함되어 네트워크 대역폭을 더 차지함) |
두 방식은 어느 하나가 절대적으로 우월한 것이 아니라, 개발하려는 시스템의 아키텍처(Monolithic vs MSA)와 보안 요구사항에 따라 적절히 선택되어야 합니다.
'보안' 카테고리의 다른 글
| [보안점검도구]TCP Wrapper(TCP 래퍼) (0) | 2026.02.22 |
|---|---|
| 분산 신원 증명(DID, Decentralized Identity) (0) | 2026.02.22 |
| JWT(JSON Web Token) (0) | 2026.02.22 |
| OAuth(Open Authorization) (0) | 2026.02.22 |
| IPSec (0) | 2025.09.20 |