728x90
반응형
오늘은 JWT 토큰 발행하는 부분과 Auth를 통해 회원가입 로그인하는 부분까지
개발을 진행하였습니다.
아직 이 부분은 헷깔리는 부분이 많고, security, 필터 등 개념이 안잡혀서
정리가 필요합니다.
오늘 가장 중요한 부분은 security + JWT 인증 하는 부분입니다.
1. 🏗️ 핵심 개념: "누가 무엇을 하는가?"
Security는 각자의 역할이 명확한 **'분업 시스템'**입니다.
- @PostConstruct: 빈(Bean)이 생성된 후 딱 한 번만 실행되는 초기화 메서드. (주로 JWT 비밀키 설정 등에 사용)
- UserDetail: 시큐리티가 이해하는 '표준 신분증 양식'.
- UserDetailService: DB에서 유저를 찾아 신분증(UserDetail)을 발급해주는 '도서관 사서'.
- AuthenticationFilter: 로그인 요청을 낚아채서 검사를 시작하는 '현관 문지기'.
- SecurityConfig: 이 모든 요원들을 배치하고 성문의 규칙(URL 권한)을 정하는 '설계도'.
login하는 부분은 PostMapping을 쓰지 않고,
UsernamePasswordAuthenticationFilter를 상속받아 필터를 만들어서
경로를 설정하여 사용하였습니다
public class JwtAuthenticationFilter extends UsernamePasswordAuthenticationFilter {
private final JwtTokenProvider jwtTokenProvider;
public JwtAuthenticationFilter(JwtTokenProvider jwtTokenProvider){
this.jwtTokenProvider = jwtTokenProvider;
setFilterProcessesUrl("/api/v1/auth/login");
}
로그인 인증 전체 흐름입니다.
# 🚀 Spring Security + JWT 인증 시스템 구축 플랜
오늘 하루 동안 겪으신 시행착오와 Spring Security의 핵심 동작 원리를 정리한 가이드입니다.
## 1. 🔄 로그인 인증 전체 흐름 (Authentication Flow)
사용자가 로그인을 시도했을 때 (`POST /api/v1/auth/login`), 서버 내부에서는 다음 순서로 일이 벌어집니다.
1. **JwtAuthenticationFilter (문지기)**
* 사용자가 보낸 ID/PW를 가로챕니다.
* 이 정보를 가지고 `UsernamePasswordAuthenticationToken`이라는 '임시 신분증'을 만듭니다.
* 이 신분증을 **AuthenticationManager**에게 넘기며 "이 사람 맞는지 확인해줘!"라고 요청합니다.
2. **AuthenticationManager (인증 책임자)**
* 직접 확인하지 않고, 등록된 **UserDetailsService**에게 "이 아이디 가진 사람 정보 좀 가져와봐"라고 시킵니다.
3. **UserDetailsService (정보 조회원)**
* DB(`UserRepository`)에서 해당 사용자를 찾습니다.
* 찾은 정보를 Spring Security가 이해할 수 있는 **UserDetails** 객체로 포장해서 반환합니다.
4. **비밀번호 검증 (Manager의 역할)**
* DB에서 가져온 암호화된 비밀번호와 사용자가 입력한 비밀번호를 비교합니다. (`PasswordEncoder` 사용)
* 일치하면 '인증된 신분증'을 필터에게 돌려줍니다.
5. **성공 처리 (Filter의 마무리)**
* 인증이 성공하면 `successfulAuthentication` 메서드가 실행됩니다.
* 여기서 **JwtTokenProvider**를 이용해 JWT 토큰을 만들고 사용자에게 응답합니다.
---
## 2. 🧩 핵심 컴포넌트 요약
| 컴포넌트 | 역할 | 비유 |
| :--- | :--- | :--- |
| **JwtAuthenticationFilter** | 로그인 요청 가로채기 & 결과 응답 | **입구 검문소** |
| **AuthenticationManager** | 인증의 전체 과정 총괄 | **검문소 소장** |
| **UserDetailsService** | DB에서 사용자 정보 찾아오기 | **도서관 사서 (장부 확인)** |
| **UserDetails** | Spring Security용 사용자 정보 객체 | **회원 명부 양식** |
| **JwtTokenProvider** | 토큰 생성 및 검증 | **인감 도장 / 열쇠 제작소** |
반응형
'Study' 카테고리의 다른 글
| [내일배움캠프 TIL] 14일차 - 1. JPA 쿼리 메서드 주의할 점. (0) | 2026.04.22 |
|---|---|
| [내일배움캠프 TIL] 13일차 - security context, Authentication, @Secured (0) | 2026.04.22 |
| [내일배움캠프 TIL] 11일차 - Controller 단에서 로직 분리 실습 2 (0) | 2026.04.20 |
| [내일배움캠프 TIL] 10일차 - uuid, erd표기법, Transaction (1) | 2026.04.17 |
| [내일배움캠프 TIL] 9일차 - Controller 단에서 로직 분리 실습 1 (0) | 2026.04.16 |