반응형
Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
Tags
- 이클립스
- Visual Studio Code
- javascript
- Eclipse
- 정규식
- junit
- java테스트
- CSS
- html
- 문자열
- HashMap
- 자바문법
- 테스트자동화
- input
- 자바스크립트
- 인텔리제이
- 자바
- ArrayList
- 배열
- Array
- vscode
- string
- json
- Java
- junit5
- math
- IntelliJ
- list
- 단위테스트
- js
Archives
- Today
- Total
어제 오늘 내일
[Spring Security] 10편 - 한눈에 보는 JWT 동작 원리 (Sequence Diagram & 총정리) 본문
IT/SpringBoot
[Spring Security] 10편 - 한눈에 보는 JWT 동작 원리 (Sequence Diagram & 총정리)
hi.anna 2026. 2. 21. 00:20드디어 Spring Security + JWT 시리즈의 마지막입니다! 👏
지금까지 우리는 설정(Config), 필터(Filter), 토큰 발급기(Provider), 로그인 로직(Service)을 각각 조각조각 구현했습니다.
오늘은 이 조각들이 실제로 합쳐져서 어떻게 동작하는지,
---
1. 로그인 할 때(토큰 발급)
2. API를 호출할 때(토큰 사용)
---
두 가지 흐름으로 나누어 시퀀스 다이어그램으로 정리해 보겠습니다.
1. 전체 흐름도 (Sequence Diagram)

2. 다이어그램 상세 분석
위 그림을 Flow 1 (로그인)과 Flow 2 (API 요청)로 나누어 자세히 뜯어보겠습니다.
📌 [Flow 1] 로그인 & 토큰 발급 (여권 만들기)
사용자가 처음 들어와서 ID/PW를 입력하고 "출입증(JWT)"을 받아가는 과정입니다.
- 로그인 요청: 클라이언트가 ID/PW를 담아
MemberController에 보냅니다. - 인증 시도 (
authenticate):MemberService는 스프링 시큐리티(AuthenticationManager)에게 "이 사람 진짜 회원 맞아?"라고 물어봅니다. - DB 조회 (
loadUserByUsername): 시큐리티는 우리가 3편에서 구현한CustomUserDetailsService를 시켜서 DB에 있는 비밀번호와 사용자가 입력한 비밀번호를 대조합니다. - 토큰 생성 (
createToken): 비밀번호가 일치하면 인증 성공!JwtTokenProvider가 비밀키로 서명된 JWT 토큰을 찍어냅니다. - 응답: 생성된 토큰이 클라이언트에게 전달됩니다. 클라이언트는 이 토큰을 잘 보관해야 합니다.
📌 [Flow 2] 토큰을 이용한 API 요청 (여권 보여주기)
이제 사용자가 로그인한 상태로, 게시글을 쓰거나 마이페이지를 조회하는 상황입니다.
- API 요청: 클라이언트는 HTTP 헤더(
Authorization)에Bearer 토큰을 담아서 보냅니다. - 검문 검색 (
JwtAuthenticationFilter): 요청이 컨트롤러에 닿기 전에 필터가 먼저 가로챕니다.
- "잠깐! 여권(토큰) 확인하겠습니다."
- 유효성 검사 (
validateToken): 필터는JwtTokenProvider에게 토큰을 보여주고, 위조됐거나 만료되지 않았는지 확인합니다. - 임시 로그인 (
SecurityContext): 토큰이 정상이면, 토큰 안에 있는 정보(ID, 권한)를 꺼내서 스프링 시큐리티의 저장소(SecurityContext)에 넣어줍니다.
- 이 과정이 끝나야 스프링은 "아, 이 요청은 로그인한 사람이 보낸 거구나"라고 인식합니다.
- 통과: 이제 비로소
Controller로 요청이 넘어가고, 원하는 데이터를 받아볼 수 있습니다.
3. 우리가 만든 핵심 컴포넌트 (Component) 요약
이 프로젝트를 지탱하는 4가지 핵심 클래스를 다시 한번 기억해 주세요.
| 클래스 이름 | 역할 | 비유 |
| JwtTokenProvider | 토큰 생성, 검증, 정보 추출 담당 | 조폐공사 + 위변조 감별기 |
| JwtAuthenticationFilter | 모든 요청을 가로채 토큰 유무 확인 | 공항 보안 검색대 |
| SecurityConfig | 세션 미사용(Stateless), 필터 등록 등 설정 | 공항 운영 수칙 (매뉴얼) |
| MemberService | 실제 로그인(DB 검증) 수행 | 출입국 심사관 |
4. 최종 프로젝트 구조 (Directory Structure)
마지막으로 파일 위치를 점검해보세요. 이 구조가 머릿속에 그려진다면 성공입니다!
src/main/java/com/example/board
│
├── config
│ └── SecurityConfig.java // [설정] 세션 끄기, 필터 배치, 권한 설정
│
├── controller
│ └── MemberController.java // [API] 로그인, 회원가입 요청 받기
│
├── domain
│ ├── entity
│ │ └── Member.java // [DB] 회원 테이블
│ └── repository
│ └── MemberRepository.java
│
├── dto
│ ├── MemberJoinDto.java
│ ├── MemberLoginDto.java
│ └── JwtToken.java // [DTO] 토큰 응답 객체
│
├── jwt
│ ├── JwtAuthenticationFilter.java // [필터] 요청 가로채기
│ └── JwtTokenProvider.java // [핵심] 토큰 생성 및 검증 기계
│
└── service
├── MemberService.java // [로직] 로그인 수행
└── CustomUserDetailsService.java // [로직] DB 유저 조회
🎉 정리
이제 여러분은:
- DB에 비밀번호를 암호화해서 저장할 줄 알고,
- Stateless(무상태) 서버가 무엇인지 이해했으며,
- 서버가 발행한 토큰만 있으면 어디서든 인증이 되는 REST API 서버를 구축할 수 있게 되었습니다.
반응형
'IT > SpringBoot' 카테고리의 다른 글
| [Spring Security] 9편 - JWT 로그인 API 구현 & Postman 테스트 (0) | 2026.02.20 |
|---|---|
| [Spring Security] 8편 - SecurityConfig 대수술 (FormLogin 삭제 & JWT 필터 적용) (0) | 2026.02.20 |
| [Spring Security] 7편 - JWT 로그인을 위한 준비 & TokenProvider 만들기 (0) | 2026.02.19 |
| [Spring Security] 6편 - 세션(Session) vs 토큰(JWT), 도대체 뭐가 다를까? (0) | 2026.02.19 |
| [Spring Security] 5편 - 회원가입 & 비밀번호 암호화 (BCrypt) (0) | 2026.02.18 |
Comments
