Programming/SpringSecurity

[Security] JWT 기반 인증 vs 세션 기반 인증

OriginMaster 2025. 2. 26. 20:34
반응형

JWT 기반 인증과 세션 기반 인증은 각각 다른 방식으로 사용자의 인증 정보를 관리합니다. 아래 표를 통해 주요 차이점을 정리하고, 각각의 장단점을 설명하겠습니다.


🔹 JWT 기반 인증 vs. 세션 기반 인증 비교표

비교 항목 JWT 기반 인증 세션 기반 인증

인증 방식 토큰 (JWT) 기반 인증 서버 세션 저장 방식
저장 위치 클라이언트 (로컬 스토리지, 쿠키, 메모리) 서버 메모리 또는 DB
상태(State) Stateless (무상태) Stateful (유상태)
서버 부담 낮음 (세션 저장 필요 없음) 높음 (서버에 세션 저장 필요)
보안 방식 서명된 토큰 검증 (HS256, RS256 등) 세션 ID 검증 (세션 쿠키)
토큰 크기 비교적 큼 (Base64 인코딩된 JSON) 작음 (세션 ID만 저장)
확장성 (Scalability) 높음 (서버 간 공유 필요 없음) 낮음 (서버 간 세션 공유 필요)
사용자 로그아웃 클라이언트에서 토큰 삭제 필요 서버에서 세션 삭제 가능
인증 유지 방식 토큰이 만료되기 전까지 유효 서버가 세션을 유지하는 동안 유효
만료 후 갱신 방식 리프레시 토큰 필요 세션 연장 가능
보안 취약점 탈취 시 토큰이 변조될 위험 세션 하이재킹 위험

🔹 세션 기반 인증 (Stateful Authentication)

동작 방식

  1. 사용자가 로그인하면 세션 ID를 생성하고, 서버에 저장.
  2. 클라이언트는 세션 ID를 쿠키에 저장하고, 이후 요청마다 포함하여 보냄.
  3. 서버는 받은 세션 ID를 저장된 값과 비교하여 사용자를 인증.

🔹 장점

✔ 서버에서 세션을 직접 관리할 수 있어 보안적으로 우수함.
✔ 세션 만료/로그아웃을 즉시 반영 가능.
CSRF 보호 기능을 기본적으로 제공함.

🔻 단점

서버 메모리를 소비하기 때문에 많은 사용자가 접속하면 부담 증가.
서버 확장(Scaling)이 어려움 → 여러 서버가 세션을 공유해야 함.
클라이언트가 쿠키를 차단하면 인증 불가능.


🔹 JWT 기반 인증 (Stateless Authentication)

동작 방식

  1. 사용자가 로그인하면 JWT 토큰을 생성하여 클라이언트에 반환.
  2. 클라이언트는 JWT를 **헤더(Authorization: Bearer <토큰>)**에 포함하여 요청을 보냄.
  3. 서버는 토큰을 검증하여 사용자 인증.

🔹 장점

✔ 서버에 인증 상태를 저장하지 않아 스케일링(확장성)이 뛰어남.
로드밸런싱 환경에서도 문제없이 사용 가능 (각 서버가 인증 정보를 공유할 필요 없음).
✔ 서명이 포함되어 있어 변조 방지 기능이 있음.

🔻 단점

토큰이 탈취되면 만료 전까지 막을 방법이 없음.
❌ 로그아웃 시 서버에서 강제 만료 불가능 (리프레시 토큰을 써야 함).
JWT 토큰 크기가 커서 네트워크 부하가 증가할 수 있음.


🔹 JWT vs. 세션, 어떤 걸 선택해야 할까?

JWT를 선택하는 경우

  • REST API 서버 (Stateless 방식)
  • 확장성이 필요한 대규모 서비스
  • 마이크로서비스 아키텍처 (MSA)

세션 기반 인증을 선택하는 경우

  • 일반적인 웹 애플리케이션 (Spring Security + Form Login)
  • 보안이 중요한 내부 시스템 (은행, 기업 내부 시스템)
  • CSRF 보호가 필요한 경우

🚀 결론

  • API 서버(특히 모바일 앱, MSA 환경)는 JWT 기반 인증이 유리함.
  • 일반적인 웹 애플리케이션(브라우저 중심)은 세션 기반 인증이 더 적합함.

🔥 즉, 선택은 프로젝트의 특성에 따라 달라집니다! 🔥

반응형