JWT vs Session

윤주원·2025년 3월 2일

서론

JWT와 Session 방식을 서로 비교하여 장단점을 정리하고
어떤 인증 방식을 사용해야할지 정해보자.


세션(Session) 인증 방식이란?

세션 인증은 사용자가 로그인하면 서버에서 세션을 생성하고, 세션 ID를 클라이언트(브라우저)의 쿠키에 저장하는 방식이다. 이후 클라이언트는 요청할 때 세션 ID를 서버로 보내고, 서버는 해당 세션 정보를 확인하여 인증을 수행한다.

세션 방식의 장점

  1. 보안성이 뛰어남
  • 사용자 정보를 서버에서 관리하므로, JWT처럼 토큰이 탈취될 위험이 적음.
  • 세션이 만료되거나 강제 종료되면, 해당 세션을 즉시 사용할 수 없음.
  1. 권한 변경 및 로그아웃이 즉시 반영됨
  • 서버에서 세션 정보를 관리하기 때문에 로그아웃 시 즉시 반영 가능.
  • JWT처럼 토큰이 남아 있어서 로그아웃이 늦게 적용되는 문제가 없음.
  1. 토큰 크기가 작아 네트워크 부담이 적음
  • 클라이언트는 세션 ID만 쿠키에 저장하기 때문에 네트워크 트래픽이 적음.
  • JWT는 토큰에 많은 정보를 포함하므로, 요청 크기가 커질 수 있음.
  1. 추가적인 보안 기능 제공 가능
  • 서버에서 IP, User-Agent(브라우저 정보) 등으로 추가 보안 검증 가능.
  • JWT는 클라이언트가 직접 토큰을 가지고 있으므로, 이런 보안 검사가 어려울 수 있음.

세션 방식의 단점

  1. 서버 확장이 어려움
  • 서버가 직접 세션을 관리하므로, 여러 서버에서 세션을 공유하려면 Redis 같은 추가적인 세션 저장소가 필요함(세션간의 동기화 필요).
  • 서버 간 세션 공유를 하지 않으면, 사용자가 다른 서버에 접속할 때 다시 로그인해야 하는 문제가 발생할 수 있음.
  1. 서버의 메모리 부담 증가
  • 접속 사용자가 많을 경우, 서버에 세션 데이터가 많아져 메모리 사용량이 증가함.
  • JWT는 서버에서 인증 정보를 저장하지 않기 때문에, 이 문제를 피할 수 있음.
  1. CSRF(Cross-Site Request Forgery) 공격에 취약
  • 쿠키를 기반으로 하기 때문에 CSRF 공격이 발생할 가능성이 있음.
  • 이를 방지하려면 CSRF 토큰을 추가하거나, SameSite 속성을 설정해야 함.

JWT 인증 방식이란?

JWT는 JSON 데이터를 포함하는 토큰을 생성하여, 클라이언트가 인증 정보를 직접 보관하는 방식이다.
서버는 JWT를 저장하지 않고, 클라이언트가 토큰을 요청 헤더에 포함해 인증을 진행한다.

JWT 방식의 장점

  1. 서버가 인증 정보를 저장하지 않아 확장성이 뛰어남
  • 서버가 세션을 저장하지 않으므로, 여러 서버를 운영하는 분산 환경에 적합.
  • 세션처럼 서버 간 공유 문제 없이, JWT만 있으면 인증이 가능함.
  1. 빠른 요청 처리 속도
  • 요청할 때마다 세션을 조회할 필요 없이, 토큰의 서명(Signature)만 검증하면 인증이 완료됨.
  • 서버 부하가 적어지고 성능이 향상됨.
  1. Stateless(무상태)한 인증 방식
  • 서버가 상태를 유지하지 않으므로, 서버의 메모리 사용량이 줄어들고, 서버 확정에 용이해짐.

JWT 방식의 단점

  1. 토큰 탈취 시 보안 위험 증가
  • JWT는 클라이언트가 직접 관리하므로, 토큰이 탈취되면 재사용될 위험이 있음.
  • 해결책으로는 Access Token을 짧게 설정하고, Refresh Token을 사용해 재발급하는 방식이 필요함.
  1. 권한 변경/로그아웃이 즉시 반영되지 않음
  • JWT는 세션과 달리 서버에서 즉시 만료할 수 없음.
  • 사용자가 로그아웃해도, 토큰이 만료될 때까지는 여전히 유효함.
  • 이를 해결하려면 블랙리스트(Blacklist) 기능을 구현하거나, Refresh Token을 관리해야 함.
  1. 토큰 크기가 커서 네트워크 비용 증가
  • JWT는 사용자 정보, 서명(Signature) 등을 포함하기 때문에 크기가 큼.
  • 요청할 때마다 토큰을 보내야 하므로, 네트워크 트래픽이 증가할 수 있음.
  1. 토큰 무효화가 어렵다
  • JWT는 기본적으로 서버에서 정보를 저장하지 않으므로, 특정 토큰을 강제로 만료시키는 것이 어려움.
  • 이를 해결하려면 블랙리스트 저장소(DB, Redis)를 따로 운영해야 함.

결론 - 어떤 인증 방식을 선택해야 할까

세션(Session) 추천

  • 보안이 중요한 시스템, 관리자 페이지
  • 로그인/로그아웃 시 즉시 반영이 필요한 경우
  • 단일 서버 기반의 웹 애플리케이션

JWT(Json Web Token) 추천

  • REST API, Microservices, 모바일 앱
  • 여러 서버를 운영하는 확장성이 필요한 시스템

느낀점

앞으로 진행해볼 erp 프로젝트에서는 session 방식을 사용해볼 예정이다.
session 방식을 선택한 이유는 사용자 상태를 서버 측에서 관리해서 보안성을 높이고, 세션 만료나 무효화가 용이하기 때문에 민감한 데이터를 처리하는데 있어 적합한 선택이라고 생각했다.
이처럼 프로젝트에서 기술을 선택할때는 무작정 사용하기보다 내 프로젝트의 특성에 맞는 기술인지를 판단해보고 사용하는것이 좋을것 같다.

profile
백엔드 개발자 윤주원 입니다.

0개의 댓글