개요
웹 애플리케이션 토이 프로젝트 진행 중,
사용자 인증 방식으로 JWT와 세션 중 어떤 방식을 적용할지 고민하게 되었다.
두 방식을 간단히 비교해 보고, JWT를 선택한 이유와 동작 원리에 대해 작성해보고자 한다.
세션과 JWT의 특징을 알아보자
✅ 세션(Session)
- 클라이언트로 부터 들어오는 일련의 요청을 하나의 상태로 보고 그 상태를 일정하게 유지시키는 기술이다.
- 세션은 서버측에서 세션을 관리하고, 클라이언트는 세션 ID (JSESSIONID)를 통해 인증을 처리한다.
- 서버에서 세션을 관리하기 때문에 요청이 많아지면 서버에 부하가 심해진다.
✅ JWT (Json Web Token)
- JSON 포맷을 이용하여 사용자에 대한 최소한의 속성을 저장하는 Claim 기반 토큰이다.
- JWT는 서버가 발급하고, 클라이언트의 로컬 저장소에 저장한다.
- 세션과는 다르게 서버에 상태를 저장하지 않으므로 (STATELESS) 모든 요청에서 사용자를 인증해야 한다.
- 서버는 인증 상태를 저장하지 않기 때문에 서버의 부하를 줄일 수 있다.
Session이 아닌 JWT 방식을 선택
프로젝트의 주제는 티켓팅이다.
티켓팅 서비스는 사용자의 요청이 짧은 시간에 집중되기 때문에 서버에 큰 부하가 발생할 수 있다.
세션 방식은 서버 리소스를 과도하게 소모할 수 있어,
동시 요청이 많은 티켓팅 서비스에서는 JWT 방식을 사용하는 것이 더 적합하다고 판단했다.
추가적으로 프로젝트에서는 일반 로그인 + OAuth2 인증 방식을 적용했다.
OAuth2 인증에서도 JWT를 사용할 수 있다고 판단하여 선택하게 되었다.
JWT Login Flow (JWT 로그인 플로우)
JWT 기반 로그인이 Spring Security에서 어떻게 처리되는지 정리해 보았다

- 클라이언트 측 로그인 요청
- AuthenticationFilter에서 인증 요청을 가로채고, Authentication 객체를 만든 뒤 AuthenticationManager에게 인증을 위임한다.
- AuthenticationManager를 통해 회원 정보를 검증한다.
- UserRepository에 저장된 회원 엔티티를 요청한다.
- 회원 정보를 UserDetailsService에서 UserDetails에 담는다.
- UserDetails에 담은 회원 정보를 비교한다.
- 인증에 성공하면 successfulAuthentication 메서드가 실행되고, 여기서 JWT토큰을 발행한다.
- JWT 토큰을 클라이언트로 응답한다.
참고
개발자 유미 유튜브 - 스프링 시큐리티 JWT 1:실습 목표 및 간단한 동작 원리
반응형
'Teck Stack > SpringSecurity' 카테고리의 다른 글
| [SpringSecurity] 시큐리티 로그인 요청 경로 변경 - JWT, formLogin (1) | 2025.06.14 |
|---|