본문 바로가기
개발새발/시스템디자인

[시스템디자인] 세션과 JWT의 차이

by yonikim 2025. 1. 14.
728x90

 

 

세션 기반 인증 

세션 기반 인증은 서버 측에서 사용자의 세션 정보를 저장하고, 클라이언트에게는 해당 세션을 식별할 수 있는 고유한 세션 ID를 제공하는 방식이다. 

 

세션 기반 인증의 작동 방식 

  1. 사용자가 로그인하면 프론트엔드가 인증 정보를 백엔드 서버로 전송한다. 
  2. 백엔드는 비밀 키를 사용해 세션을 생성하고 세션 데이터를 데이터베이스나 세션 저장소에 저장한다. 
  3. 서버는 고유한 세션 ID가 포함된 쿠키를 사용자의 브라우저로 전송한다. 
  4. 이후의 요청에서 브라우저는 헤더에 세션 ID를 포함시켜 전송한다.
  5. 서버는 세션 ID를 검증하고 접근을 허용한다. 

 

세션 기반 인증의 장점

  • 세션 관리가 용이하다: 세션 저장소에서 간단히 세션을 제거하여 로그아웃 처리가 가능하다.
  • 중앙 집중식 세션 관리로 사용자 활동 추적과 제어가 편리하다.

세션 기반 인증의 단점

  • 확장성 문제: 사용자가 증가하면 세션 저장소가 병목 현상을 일으킬 수 있다.
  • 서버 의존성: 세션 상태 관리를 위해 항상 서버가 필요하다

 

JWT 기반 인증 

JWT(JSON Web Token) 인증은 세션 기반 인증과는 다른 접근 방식을 취한다. 사용자의 정보를 토큰 자체에 암호화하여 담아 전달하는 방식이다. 

 

JWT의 작동 방식

  1. 사용자가 로그인하면 백엔드 서버가 인증을 수행한다.
  2. 서버는 개인 키로 서명된 JWT를 생성한다. 별도의 세션 저장소는 필요하지 않다.
  3. JWT는 클라이언트의 브라우저로 전송된다. (주로 쿠키를 통해)
  4. 이후 모든 요청에서 브라우저에 헤더에 JWT를 포함하여 전송한다. 
  5. 서버는 JWT의 유효성을 검증하고 토큰에서 사용자 정보를 추출한다.

 

JWT의 장점

  • 무상태(Stateless) 방식: 별도의 세션 저장소가 필요 없기 때문에 수평적 확장이 용이하다.
  • 높은 이식성: 백엔드 세션 저장소 공유 없이도 여러 서비스와 도메인에서 사용할 수 있다. 

JWT의 단점

  • 토큰 무효화의 어려움: 발급된 토큰을 만료 전에 강제로 무효화하기가 복잡하다. 
  • 데이터 갱신의 제한: 토큰에 담긴 정보는 만료되기 전까지 업데이트할 수 없다.
  • 페이로드 크기: JWT는 포함된 정보량에 따라 크기가 커질 수 있어 네트워크 부하가 증가할 수 있다.

세션 vs JWT: 어떤 것을 선택해야 할까?

특성 세션 JWT
보안 서버 관리로 안전하지만 확장성 낮음 클라이언트에 저장, 유출 시 위험 있음
부하 위치 서버에 세션 정보가 저장되어 있기 때문에, 사용자가 많아질 경우 서버의 부하 증가 가능 토큰 값이 세션 ID보다 크기 때문에, 네트워크 부하 증가 가능
확장성 서버 간 동기화 필요 상태가 없어서 확장에 유리
로그아웃/만료 처리 서버에서 강제로 제어 가능 복잡한 관리 로직 필요
사용 사례 전통적인 웹 애플리케이션 API 중심, SPA, 모바일 앱

 

세션을 사용해야 하는 경우 

  • 실시간 사용자 상태 관리와 즉각적인 세션 무효화가 중요한 경우
  • 내부 사용자 관리가 중요하고 보안이 우선인 경우

JWT를 사용해야 하는 경우

  • 서비스의 확장성과 시스템 간 연동이 중요한 경우
  • 인증 처리의 서버 의존도를 최소화하고 싶은 경우 

 

 

[References] 

https://maily.so/devpill/posts/vpzl3mnmzk9

728x90