반응형
순서
- 클라이언트가 요청을 보냄
- DispatcherServlet에 요청이 도착
- HandlerMapping을 사용하여 적절한 핸들러(컨트롤러)를 찾음
- HandlerInterceptor 인터페이스의 preHandle 메소드 를 호출해서 선처리
- HandlerAdapter를 사용하여 핸들러 실행 준비
- HandlerMethodArgumentResolver를 사용하여 컨트롤러 메소드의 파라미터를 해석
- 파라미터 전처리가 필요한 경우, 관련 메소드가 호출됨
- 실제 컨트롤러 메소드 실행
- 컨트롤러가 반환된 후 뷰 이름에 따라 뷰가 렌더링
- DispatcherServlet이 HandlerInterceptor 인터페이스의 postHandle 메소드를 호출해서 후처리
- 응답 종료 (클라이언트에게 전송) 후 afterCompletion 메소드 호출
용어정리
- 서블릿: 서버 측에서 실행되는 자바 프로그램. HTTP 요청과 응답을 처리
- 컨트롤러 메소드: @Controller 어노테이션이 달려있는 클래스
- Spring AOP: 여러 컴포넌트나 서비스에 걸쳐서 적용되는 기능을 분리하여 관리
상세
1. 클라이언트가 요청을 보냄 | |
2. DispatcherServlet에 요청이 도착 | - DispatcherServlet은 중앙 서블릿. 들어오는 모든 요청을 처리 |
3. HandlerMapping을 사용하여 적절한 핸들러(컨트롤러)를 찾음 | DispatcherServlet이 HandlerMapping을 통해 어떤 컨트롤러가 요청을 처리할지 결정 |
⭐ ⭐ 4. HandlerInterceptor 인터페이스의 preHandle 메소드 호출(선처리) |
핸들러가 실행되기 전에 preHandle 메소드가 호출됨 ( preHandle 메소드: 컨트롤러 메소드가 실행되기 전에 호출되어 요청을 선처리해주는 역할 -> 보통 로그인 전, 회원가입 전, 모든 서비스의 세션체크 등등...) ------------------ +preHandle 의 파라미터 정보 HttpServletRequest: 웹 요청 HttpServletResponse: 웹 응답 Handler: 요청을 처리할 컨트롤러의 메소드 ------------------ |
5. HandlerAdapter를 사용하여 핸들러 실행 준비 | DispatcherServlet은 HandlerAdapter를 사용하여 컨트롤러 메소드 실행 준비 |
6. HandlerMethodArgumentResolver를 사용하여 컨트롤러 메소드의 파라미터를 해석 | ElArgumentResolverProcess.resolverProcess() 같은 메소드가 파라미터를 해석 |
7. 파라미터 전처리가 필요한 경우, 관련 메소드가 호출됨 | DefaultJsonArgumentResolverAdapter.convert()와 같은 메소드가 호출될 수 있음 |
⭐ ⭐ 8. 실제 컨트롤러 메소드 실행 |
AOP가 적용된 경우, AOP 프록시가 생성되고 MethodInterceptor.invoke 메소드가 호출. ⭐proceed() 메소드가 실제 컨트롤러 메소드를 실행 ------------------ AOP 적용 ------------------ MethodInterceptor 상속 (org.aopalliance.intercept) ElControllerInterceptor.invoke() |
9. 컨트롤러가 반환된 후 뷰 이름에 따라 뷰가 렌더링 | 컨트롤러가 반환한 모델과 뷰 이름을 기반으로 ViewResolver가 적절한 뷰를 선택하고 렌더링 |
10. DispatcherServlet이 HandlerInterceptor 인터페이스의 postHandle 메소드 호출(후처리) | 핸들러가 실행된 후 postHandle 메소드가 호출 |
11. 응답 종료 (클라이언트에게 전송) 후 afterCompletion 메소드 호출 | 요청 처리가 완료된 후 afterCompletion 메소드가 호출 |
반응형
댓글