[JWT] JWT login 흐름

nasohi·2026년 4월 11일

JWT

목록 보기
3/5

JWT로 로그인을 하는 흐름

JWT 기반 인증은 기존 세션 방식과 동작 방식이 완전히 다르다.
기존 로그인 방식은 서버가 로그인 상태를 직접 관리한다.

로그인 -> 세션 저장 -> 서버가 로그인 상태 기억

반면 JWT 방식은 서버가 상태를 저장하지 않는다.

로그인 -> JWT 발급 -> 클라이언트가 저장 -> 요청마다 JWT 전송

-> 즉, 서버가 로그인 상태를 저장하지 않는 Stateless 구조이다.

로그인 과정

1.	클라이언트 → /login 요청 (username, password)
2.	LoginFilter 실행
3.	AuthenticationManager를 통해 인증 진행
4.	인증 성공 시 JWT 생성
5.	클라이언트가 JWT 저장

이후 요청 과정

1.	클라이언트 → 요청 + JWT (Authorization 헤더)
2.	JwtFilter 실행
3.	JWT 검증 (위조 여부 + 만료 여부)
4.	사용자 정보 추출
5.	SecurityContext에 Authentication 저장
6.	컨트롤러에서 로그인된 사용자로 인식

SecurityContext에 인증 정보가 있으면 Spring Security는 로그인된 상태로 판단한다.

JwtUtil (JWT 생성 & 검증)

JwtUtil : JWT를 생성, 검증 , 파싱하는 클래스
-> JWT 관련 기능을 모아둔 도구 클래스 (Util)

왜 필요한가?

JWT 인증에서는 매번 다음과 같은 작업이 필요하다.

- 로그인 시 토큰 생성
- 요청 시 토큰 검증
- 필요시 토큰에서 사용자 정보 추출

이걸 여기저기 흩어놓으면 코드가 지저분해지므로 JwtUtil 하나에 모아서 관리한다.

주요 역할

  • 토큰 생성
    • username + role -> JWT 생성
  • 토큰 검증
    • 서명 검증 (위조 방지)
    • 만료 여부 확인
  • 토큰 파싱
    • JWT -> username, role 추출

LoginFilter (로그인 담당)

LoginFilter : 로그인 요청을 처리하는 필터
Spring Security의 기본 로그인 필터를 확장한 것이다.

1.	username, password 추출
2.	AuthenticationManager에 전달
3.	내부적으로 UserDetailsService 호출
4.	비밀번호 비교 (PasswordEncoder)
5.	인증 성공 → JWT 생성
6.	인증 실패 → 401 반환

-> LoiginFilter는 로그인 + JWT 발급을 담당한다.

JwtFilter (요청 인증 담당)

JwtFilter : JWT를 검증해서 로그인 상태를 만들어주는 필터

1.	Authorization 헤더에서 JWT 추출
2.	토큰 검증 (만료, 위조 확인)
3.	username, role 추출
4.	Authentication 객체 생성
5.	SecurityContext에 저장

SecurityContext에 Authentication을 넣으면
→ Spring Security는 로그인된 사용자로 판단한다

SecurityConfig (전체 설정)

SecurityConfig : Spring Security의 전체 동작을 설정하는 클래스

  • URL 권한 설정

주요 역할

- URL 접근 권한 설정
- 필터 등록
- 세션 정책 설정

필터 흐름
요청 → JwtFilter → (로그인 시) LoginFilter → 컨트롤러

0개의 댓글