[SpringSecurity] JWT를 선택한 이유 & JWT 인증 플로우

2025. 5. 8. 18:44·Teck Stack/SpringSecurity

 

 

 

개요

 

웹 애플리케이션 토이 프로젝트 진행 중,
사용자 인증 방식으로 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에서 어떻게 처리되는지 정리해 보았다

 

로그인 flow

  1. 클라이언트 측 로그인 요청
  2. AuthenticationFilter에서 인증 요청을 가로채고, Authentication 객체를 만든 뒤 AuthenticationManager에게 인증을 위임한다.
  3. AuthenticationManager를 통해 회원 정보를 검증한다.
  4. UserRepository에 저장된 회원 엔티티를 요청한다.
  5. 회원 정보를 UserDetailsService에서 UserDetails에 담는다.
  6. UserDetails에 담은 회원 정보를 비교한다.
  7. 인증에 성공하면 successfulAuthentication 메서드가 실행되고, 여기서 JWT토큰을 발행한다. 
  8. JWT 토큰을 클라이언트로 응답한다.

 

 

 

 

참고

개발자 유미 유튜브 - 스프링 시큐리티 JWT 1:실습 목표 및 간단한 동작 원리

dev-jjun -  Spring Security+JWT 토큰 인증 플로우

스프링 시큐리티 공식 문서

반응형

'Teck Stack > SpringSecurity' 카테고리의 다른 글

[SpringSecurity] 시큐리티 로그인 요청 경로 변경 - JWT, formLogin  (1) 2025.06.14
'Teck Stack/SpringSecurity' 카테고리의 다른 글
  • [SpringSecurity] 시큐리티 로그인 요청 경로 변경 - JWT, formLogin
taetae99
taetae99
우직하게 개발하기
    반응형
  • taetae99
    코드 대장간
    taetae99
  • 전체
    오늘
    어제
    • 분류 전체보기
      • Teck Stack
        • Java
        • Spring
        • DB
        • Redis
        • SpringSecurity
        • Docker
        • HTML
        • AWS
      • 우아한테크코스
      • CS & Architecture
        • DDD
        • CS
        • 디자인 패턴
      • 트러블 슈팅
      • 알고리즘
        • 프로그래머스
        • 백준
      • 프로젝트
        • Board 프로젝트
      • 기타
      • 대회 및 후기
  • 인기 글

  • hELLO· Designed By정상우.v4.10.3
taetae99
[SpringSecurity] JWT를 선택한 이유 & JWT 인증 플로우
상단으로

티스토리툴바