JWT를 이용해 Access Token, Refresh Token을 구현하고 테스트하기 위한 프로젝트입니다!
| 기능 | 설명 |
|---|---|
| 회원가입 |
일반 사용자 회원가입 |
| 이메일 인증 |
일반 사용자 회원가입시 이메일 유효성 검사 |
| 로그인 |
일반 사용자의 Access Token, Refresh Token 발급 |
| 비밀번호 찾기 및 재설정 |
패스워드 분실시 이메일 인증 후 비밀번호 재설정 |
| Access, Refresh Token |
Access Token이 만료되더라도 Refresh Token을 검사후 Access Token 재발급 |
| 내 프로필 조회(권한 확인용) |
Access Token이 만료 후 Refresh Token을 통해 재발급 -> 로그인 유지 확인 |
- Servlet Container 내에서 실행된다.
- 모든 요청에 대해 동작하며, Spring Context 외부의 요청과 응답도 처리할 수 있다.
→ Spring Security가 Spring MVC 밖에서도 작동할 수 있게 하는 핵심적인 이유. - Spring Security는 자체 필터 체인을 통해 인증과 인가 과정을 관리한다.
- 사용자 정의 필터를 자체 필터 체인에 쉽게 추가할 수 있다.
- 필터는 요청이 DispatcherServlet에 도달하기 전에 실행된다.
→ 인증과 같이 모든 요청에 대해 처리해야 하는 로직에 적합하다.
- Spring MVC의 일부로, DispatcherServlet이 컨트롤러를 호출하기 전, 후, 완료 후에 동작한다.
- Spring Context 내부에서만 작동한다.
- 주로 컨트롤러 실행을 가로채는 데 사용된다.
- 요청 사전 처리, 로깅, 트랜잭션 관리 등에 적합하다.
- Spring Bean 접근이 가능하며 구성도 쉽다.
| Filter | Interceptor |
|---|---|
| DispatcherServlet Filter는 Dispatcher Servlet의 밖에 위치함 Web Context에 존재하며 Spring Context와 무관함 |
DispatcherServlet Interceptor는 Dispatcher Servlet안에 위치함 Spring Context에 존재, 모든 Spring Bean에 접근 가능 |
|
DispatcherServlet은 -SpringMVC의 프론트 컨트롤러이다. -HTTP요청을 적절한 컨트롤러에 라우팅 -뷰 리졸버를 통해 렌더링 → Filter 이후 DispatcherServletdl 요청을 받고, 그 다음 인터셉터가 컨트롤러 호출 직전 직후 동작 |
|
| Web context는 -서블릿 컨테이너의 레벨의 context가 요청을 관리하고있다는 것을 나타냄 -서블릿과 필터가 여기에 속함 -DispatcherServlet 바깥에서 요청과 응답을 가로채고 처리함 |
Spring context는 -스프링 컨테이너의 애플리케이션 context가 요청을 관리한고있다는 것을 나타냄 -DispatcherServlet이 Spring Context를 사용하여 관리 → 필터는 Web context에 등록되어 Spring MVC 앞에서 동작하고, 인터셉터는 Spring MVC 안에서DispatcherServlet 이후 컨트롤러 앞뒤로 동작함 |
- Spring MVC의 프론트 컨트롤러
- HTTP 요청을 적절한 컨트롤러에 라우팅
- ViewResolver를 통해 렌더링 처리
요청 흐름: Filter → DispatcherServlet → Interceptor → Controller
- 서블릿 컨테이너 레벨의 Context
- Filter, Servlet 등이 여기에 속함
- DispatcherServlet 바깥에서 요청/응답을 가로챔
- Spring 애플리케이션 컨텍스트
- DispatcherServlet이 Spring Context를 사용하여 컨트롤러/빈을 관리
- Interceptor는 Spring Context 내부에서 동작
결론:
Filter는 Web Context에서 Spring MVC 앞단에서 동작하고,
Interceptor는 Spring MVC 내부에서 Controller 앞뒤로 동작한다.
- Spring Security가 필터 체인을 실행하기 위해 내부적으로 사용하는 구현체
- 여러 Security Filter를 순서대로 실행시키는 가상의 체인
- 실제 클래스:
FilterChainProxy.VirtualFilterChain - 실무에서 JWT 인증은 대부분 필터 기반으로 구현
- Spring Security는 VirtualFilterChain을 통해 필터를 순서대로 실행
- 단순 로깅
- 특정 비즈니스 로직 전/후 처리
- 컨트롤러 진입 전/후 공통 처리
- 인증과 무관한 기능 처리