CS

[security] JWT와 Session의 차이

KJihun 2025. 4. 23. 09:40
728x90

JWT (JSON Web Token)

JWT는 JSON 포맷 형식으로 사용자 인증 정보를 담고 있는 토큰 기반 인증 방식이다.

클라이언트 측에서 인증 정보를 유지하고, 요청 시 헤더 또는 쿠키에 포함시켜 서버에 전송한다.

구조

  1. Header: 토큰의 타입(JWT ...)과 서명 알고리즘(암호화 알고리즘)
  2. Payload: 사용자 정보
  3. Signature
    1. 헤더와 페이로드를 결합한 값을 서명 알고리즘을 통해 암호화하여 구현
    2. 생성된 Signature를  JWT에서 받은 Signature와 비교하여 토큰의 변조 여부를 확인

장점

  • 무상태성(Stateless): 서버가 사용자 상태를 유지할 필요가 없어 확장성에 유리하다
  • 분산 처리에 적합: 서버에 상태 정보를 저장하지 않기 때문에 여러 서버를 사용하여도 서버 간 세션 공유가 필요없다

단점

  • 보안성: JWT는 발급된 후 만료 시간까지 유효하므로 탈취될 경우, 악용될 수 있다

사용 예시

  • SPA (Single Page Application)
  • MSA
  • 분산 시스템

 

Session

Session은 서버 측에서 사용자 상태 정보를 저장하고, 클라이언트에게 세션 ID를 반환하는 인증 방식이다

이후 클라이언트는 요청 시 쿠키에 세션 ID를 포함시켜 서버에 전달한다.

구조

  1. Session ID: 서버가 클라이언트에게 고유한 세션 ID를 생성하여 전달
  2. 세션 저장소: 세션 ID와 사용자 상태 정보를 저장하는 DB

장점

  • 보안성: 정보가 서버에 저장되므로 탈취 위험이 줄어들며, 서버 측에서 세션을 무효화할 수 있어 보안 관리가 용이하다
  • 관리: 서버에서 세션 만료 시간이나 무효화 등 유연하게 설정할 수 있다

단점

  • 상태 저장성 (Stateful): 서버가 사용자 상태를 관리하므로, 서버 자원 소모가 크며 사용자가 많을수록 부하가 증가한다
  • 확장성: 여러 서버 간 세션 정보를 공유해야 할 경우 복잡한 세션 동기화가 필요하다

 

 

 

JWT와 Session의 차이점

항목 JWT Session
상태 관리 클라이언트에서 상태 정보 유지 (Stateless) 서버에서 상태 정보 유지 (Stateful)
저장 위치 클라이언트 측 (localStorage, sessionStorage, 쿠키) 서버 측에서 세션 정보를 저장
확장성 서버 자원 사용이 적어 확장성에 유리 서버 메모리나 DB를 사용, 확장성 불리
무효화 방법 만료 시간 전에는 명시적으로 무효화 불가 서버에서 언제든 세션 종료 가능
보안성 토큰 탈취 시 위험 (HTTPS, 토큰 만료 설정 필요) 세션 ID 자체는 보안에 강함
인증 방식 HTTP 헤더에 JWT를 포함하여 전달 세션 ID를 쿠키에 저장하여 서버에 전달
사용 예 SPA, 마이크로서비스 구조, 분산 시스템 전통적인 서버 기반 웹 애플리케이션

결론

  • JWT는 서버 자원 사용을 줄이고, 분산 시스템마이크로서비스 환경에 적합한 인증 방식
  • Session은 보안성과 세션 관리에 뛰어나지만, 서버 측에서 상태를 관리하므로 자원 관리가 어려운 방식