
(코드관련 이후 추가 예정)
단순히 Jwt토큰을 발행해서 사용하려고 했었다. 무려 모든 API를 처리하는 Controller에서 수동으로 JWT토큰을 Parsing하며...하지만 전지전능한 지피티님께서 다음 한마디를 툭 던졌다.
GPT : "필터는 단순 유효성 검사 + 사용자 정보 파싱 + 인증 객체 등록까지 책임져요.
Controller는 검증 끝난 요청만 받아서 처리합니다."
어라? 필터라는 개념이 앞단에서 검증을 끝낸다는 말인가? 그럼 검증 따로 서비스 처리 따로인가?
라는 의문에서 시작해서, 스프링 시큐리티를 간략히 공부해보기로 하였다.
스프링 시큐리티라고 함은 스프링 기반의 인증과 인가를 처리해주는 보안 프레임워크이다. 상세히 알아보자.
대략적으로 아래와 같이 이해하면 될 것같다.

Spring Security 특징
1. 인증(Authentication) & 인가(Authorization) 처리 지원
- 인증 : 사용자 신원 확인 (로그인)
- 인가 : 권한 확인 (접근 제어)
- 스프링 시큐리티가 제공하는 필터 체인을 통해 자동 처리 가능
예시)
로그인 → JWT 발급 → 요청마다 JWT 인증 → ROLE 확인 후 접근 허용/거부
2. 필터 기반 구조 (Filter Chain)
- 스프링 시큐리티는 여러 개의 필터를 체인으로 연결해 보안 처리를 함
- 요청(Request)이 들어올 때, 필터들이 순서대로 실행되며 보안 로직 처리
- 커스텀 필터 추가 및 위치 조정 가능
예시
[HTTP 요청 들어옴]
↓
Spring Security Filter Chain 진입
↓
JwtAuthenticationFilter 에서 토큰 검증
↓
SecurityContextHolder 에 인증 정보 저장
↓
Controller 도달
↓
권한 체크 (인가)
3. 세션 관리 (Session Management)
- 기본적으로 세션 기반 인증 지원
4. 다양한 인증 방식 제공
- Form Login (기본 로그인 폼)
- HTTP Basic Auth
- JWT 기반 인증 (커스텀 구현)
- OAuth2 / 소셜 로그인
- API Key 인증 방식 등 확장 가능
Spring Security 아키텍쳐

단계별 설명
1단계: Http Request
사용자가 로그인 요청 (아이디, 비밀번호)을 서버로 전송.
2단계: AuthenticationFilterUsernamePasswordAuthenticationFilter
가 동작해서 요청 정보를 UsernamePasswordAuthenticationToken
객체로 변환.
→ Username + Password를 가지고 있는 인증 토큰 생성.
3단계: AuthenticationManager (ProviderManager) 호출AuthenticationFilter
는 AuthenticationManager
에게 인증 처리 요청.
4단계: AuthenticationProvider 선택AuthenticationManager
는 등록된 여러 AuthenticationProvider
중 적절한 Provider를 선택해서 인증 처리 위임.
5단계: UserDetailsService 호출
선택된 AuthenticationProvider
가 UserDetailsService
를 호출해서 아이디에 해당하는 User 정보 조회 시도.
6단계: UserDetails 반환UserDetailsService
가 DB 등에서 조회한 User 정보를 UserDetails
형태로 반환.
(UserDetails는 User 객체가 구현하는 인터페이스)
7단계: User 정보 검증AuthenticationProvider
가 전달받은 UserDetails 정보를 바탕으로 비밀번호 일치 여부 등 검증 수행.
8단계: 인증 성공 후 Authentication 객체 반환AuthenticationProvider
가 검증 성공하면 인증된 Authentication
객체를 생성해서 AuthenticationManager
에게 반환.
9단계: AuthenticationFilter로 Authentication 객체 반환AuthenticationManager
가 인증에 성공한 Authentication
객체를 AuthenticationFilter
로 전달.
10단계: SecurityContextHolder에 저장AuthenticationFilter
가 최종적으로 SecurityContextHolder
에 Authentication
객체를 저장.
→ 이후 요청부터는 인증된 사용자 정보가 유지됨 (세션 or JWT 기반).
만약, JWT토큰 방식의 로그인에서 재 로그인 시, 3~8단계는 패스한다(왜냐하면 토큰 내부에 유저 정보가 저장되어 있기 때문).
#security #Spring
'Backend > Spring' 카테고리의 다른 글
[Spring] HTTP 통신구조 기초 이해 (0) | 2025.03.14 |
---|---|
[Spring] Websocket을 활용한 STOMP (0) | 2025.03.11 |
[Spring]oAuth2를 이용한 카카오 로그인 (0) | 2025.03.10 |
테스트 커버리지(구문, 조건, 결정) (1) | 2024.10.04 |
JWT를 활용한 서버 토큰 (1) | 2024.08.26 |

(코드관련 이후 추가 예정)
단순히 Jwt토큰을 발행해서 사용하려고 했었다. 무려 모든 API를 처리하는 Controller에서 수동으로 JWT토큰을 Parsing하며...하지만 전지전능한 지피티님께서 다음 한마디를 툭 던졌다.
GPT : "필터는 단순 유효성 검사 + 사용자 정보 파싱 + 인증 객체 등록까지 책임져요.
Controller는 검증 끝난 요청만 받아서 처리합니다."
어라? 필터라는 개념이 앞단에서 검증을 끝낸다는 말인가? 그럼 검증 따로 서비스 처리 따로인가?
라는 의문에서 시작해서, 스프링 시큐리티를 간략히 공부해보기로 하였다.
스프링 시큐리티라고 함은 스프링 기반의 인증과 인가를 처리해주는 보안 프레임워크이다. 상세히 알아보자.
대략적으로 아래와 같이 이해하면 될 것같다.

Spring Security 특징
1. 인증(Authentication) & 인가(Authorization) 처리 지원
- 인증 : 사용자 신원 확인 (로그인)
- 인가 : 권한 확인 (접근 제어)
- 스프링 시큐리티가 제공하는 필터 체인을 통해 자동 처리 가능
예시)
로그인 → JWT 발급 → 요청마다 JWT 인증 → ROLE 확인 후 접근 허용/거부
2. 필터 기반 구조 (Filter Chain)
- 스프링 시큐리티는 여러 개의 필터를 체인으로 연결해 보안 처리를 함
- 요청(Request)이 들어올 때, 필터들이 순서대로 실행되며 보안 로직 처리
- 커스텀 필터 추가 및 위치 조정 가능
예시
[HTTP 요청 들어옴]
↓
Spring Security Filter Chain 진입
↓
JwtAuthenticationFilter 에서 토큰 검증
↓
SecurityContextHolder 에 인증 정보 저장
↓
Controller 도달
↓
권한 체크 (인가)
3. 세션 관리 (Session Management)
- 기본적으로 세션 기반 인증 지원
4. 다양한 인증 방식 제공
- Form Login (기본 로그인 폼)
- HTTP Basic Auth
- JWT 기반 인증 (커스텀 구현)
- OAuth2 / 소셜 로그인
- API Key 인증 방식 등 확장 가능
Spring Security 아키텍쳐

단계별 설명
1단계: Http Request
사용자가 로그인 요청 (아이디, 비밀번호)을 서버로 전송.
2단계: AuthenticationFilterUsernamePasswordAuthenticationFilter
가 동작해서 요청 정보를 UsernamePasswordAuthenticationToken
객체로 변환.
→ Username + Password를 가지고 있는 인증 토큰 생성.
3단계: AuthenticationManager (ProviderManager) 호출AuthenticationFilter
는 AuthenticationManager
에게 인증 처리 요청.
4단계: AuthenticationProvider 선택AuthenticationManager
는 등록된 여러 AuthenticationProvider
중 적절한 Provider를 선택해서 인증 처리 위임.
5단계: UserDetailsService 호출
선택된 AuthenticationProvider
가 UserDetailsService
를 호출해서 아이디에 해당하는 User 정보 조회 시도.
6단계: UserDetails 반환UserDetailsService
가 DB 등에서 조회한 User 정보를 UserDetails
형태로 반환.
(UserDetails는 User 객체가 구현하는 인터페이스)
7단계: User 정보 검증AuthenticationProvider
가 전달받은 UserDetails 정보를 바탕으로 비밀번호 일치 여부 등 검증 수행.
8단계: 인증 성공 후 Authentication 객체 반환AuthenticationProvider
가 검증 성공하면 인증된 Authentication
객체를 생성해서 AuthenticationManager
에게 반환.
9단계: AuthenticationFilter로 Authentication 객체 반환AuthenticationManager
가 인증에 성공한 Authentication
객체를 AuthenticationFilter
로 전달.
10단계: SecurityContextHolder에 저장AuthenticationFilter
가 최종적으로 SecurityContextHolder
에 Authentication
객체를 저장.
→ 이후 요청부터는 인증된 사용자 정보가 유지됨 (세션 or JWT 기반).
만약, JWT토큰 방식의 로그인에서 재 로그인 시, 3~8단계는 패스한다(왜냐하면 토큰 내부에 유저 정보가 저장되어 있기 때문).
#security #Spring
'Backend > Spring' 카테고리의 다른 글
[Spring] HTTP 통신구조 기초 이해 (0) | 2025.03.14 |
---|---|
[Spring] Websocket을 활용한 STOMP (0) | 2025.03.11 |
[Spring]oAuth2를 이용한 카카오 로그인 (0) | 2025.03.10 |
테스트 커버리지(구문, 조건, 결정) (1) | 2024.10.04 |
JWT를 활용한 서버 토큰 (1) | 2024.08.26 |