🔐 Spring Security & JWT 인증 흐름 완전 정복 - 로그인 인증부터 토큰 발급, 필터 구조
2025. 6. 24. 21:47ㆍFramework/Spring
✅ 1. Spring Security란?
Spring 기반 애플리케이션의 인증 (Authentication)과 인가(Authorization)를 담당하는 보안 프레임워크
🔐 기본 역할
- 인증(Authentication) : 사용자가 누구인지 확인
- 인가(Authorization) : 사용자가 특정 리소스에 접근 가능한지 확인
2. 인증 방식 비교
| 방식 | 설명 | 특징 |
| 세션 기반 인증 | 로그인 시 서버가 세션 생성, 클라이언트에 세션 ID 전달 | 서버 메모리에 상태 저장 |
| JWT 기반 인증 | 로그인 시 토큰 생성, 클라이언트가 토큰을 저장 후 매 요청에 전송 | 서버는 상태 저장 X (무상태 stateless) |
- 최근엔 JWT 기반 인증 방식이 보편화 (특히 REST API)
🔑 3. JWT란?
JSON Web Token
인증 정보와 클레임을 JSON 형태로 인코딩한 자기 자신을 증명하는 토큰
구조
Header.Payload.Signature
- Header : 알고리즘 정보 (예 : HS256)
- Payload : 사용자 정보 (클레임, 예 : sub, exp, roles)
- Signature : 비밀키로 서명 (변조 방지)
4. Spring Security 인증 흐름 (전체 구조)
[요청] → SecurityFilterChain →
→ UsernamePasswordAuthenticationFilter (or JwtAuthenticationFilter)
→ AuthenticationManager
→ UserDetailsService.loadUserByUsername()
→ User 객체 반환 → 인증 완료
5. JWT 기반 인증 흐름 요약
- 사용자 /login 요청 (ID/PW)
- 인증 성공 시 JWT 발급
- 클라이언트는 JWT를 Authorization : Bearer {token} 헤더에 담아 요청
- 서버는 매 요청마다 JWT를 검증하고 사용자 인증 처리
6. JWT 로그인 & 인증 필터 구현 흐름
✅1) 로그인 필터 (JwtAuthenticationFilter)
- UsernamePasswordAuthenticationFilter를 상속
- ID/PW를 검증하고, 성공 시 JWT 생성 후 응답 헤더 or 바디에 추가
Authentication auth = authenticationManager.authenticate(
new UsernamePasswordAuthenticationToken(username, password));
String jwt = jwtTokenProvider.createToken(auth.getName(), auth.getAuthorities());
response.addHeader("Authorization", "Bearer " + jwt);
✅2) JWT 인증 필터 (JwtAUthorizationFilter)
- 요청 헤더의 Authorization 값에서 JWT 추출
- JWT 검증 -> 유효 시 SecurityContext에 인증 정보 등록
String token = resolveToken(request);
if (tokenProvider.validateToken(token)) {
Authentication auth = tokenProvider.getAuthentication(token);
SecurityContextHolder.getContext().setAuthentication(auth);
}
7. 주요 컴포넌트 정리
| 컴포넌트 | 역할 |
| JwtTokenProvider | 토큰 생성, 검증, 파싱 담당 |
| UserDetailService | 사용자 조회 및 인증 정보 생성 |
| AuthenticationManager | 인증 위임 처리 |
| SecurityFilterChain | 필터 등록 및 보안 규칙 설정 |
8. 실무 적용 전략
✅ 보안 강화 팁
- 토큰에 exp, iat, sub, role 등의 클레임 명확히 포함
- 만료 시간 (exp) 반드시 설정
- Refresh Token 전략 도입하여 재발급 허용
- 민감 정보 (비밀번호 등)는 절대 포함 금지
✅ CORS 처리
- 프론트와 분리된 SPA 환경에서는 반드시 CORS 정책 적용
✅ 마무리 요약
| 항목 | 정리 포인트 |
| Spring Security | 인증/인가를 책임지는 보안 프레임워크 |
| JWT | 무상태 인증 방식, 토큰 기반 |
| 인증 흐름 | 로그인 -> JWT 발급 -> 요청마다 JWT 검증 후 인증 처리 |
| 실무 주의점 | 만료/재발급/권한설정 명확히, CORS, HTTPS 필수 적용 |
🔜 다음 포스팅에서는 Spring Boot 자동 설정 원리에 대해서 다뤄 보려고 한다. @EnableAutoConfiguration 내부에서는 무슨일 이 벌어질까..?
'Framework > Spring' 카테고리의 다른 글
| Spring MVC 요청 처리 흐름 완전 정복 - DispatcherServlet부터 Controller까지 (0) | 2025.07.02 |
|---|---|
| Spring Boot 자동 설정 원리 완전 정복 - @EnableAutoConfiguration 내부에서 벌어지는 일 (0) | 2025.06.25 |
| ⚠️Spring 예외 처리 완전 정복 - @ControllerAdvice, @ExceptionHandler, 그리고 실무 예외 전략 (0) | 2025.06.18 |
| 🔄 Spring의 @Transactional 완전 정복 - 개념, 원리, 동작 방식, 트러블 슈팅까지 (0) | 2025.06.11 |
| Spring AOP 완전 정복 - 핵심 로직과 횡단 관심사의 완전 분리 (0) | 2025.06.05 |