본문 바로가기
컴퓨터/Spring

Spring MVC 의 요청-응답 순서 정리 | DispatcherServlet 과 컨트롤러 메소드의 선/후처리

by 버니케이 2024. 12. 20.
반응형

 

순서

  1. 클라이언트가 요청을 보냄
  2. DispatcherServlet에 요청이 도착
  3. HandlerMapping을 사용하여 적절한 핸들러(컨트롤러)를 찾음
  4. HandlerInterceptor 인터페이스의 preHandle 메소드 를 호출해서 선처리
  5. HandlerAdapter를 사용하여 핸들러 실행 준비
  6. HandlerMethodArgumentResolver를 사용하여 컨트롤러 메소드의 파라미터를 해석
  7. 파라미터 전처리가 필요한 경우, 관련 메소드가 호출됨
  8. 실제 컨트롤러 메소드 실행
  9. 컨트롤러가 반환된 후 뷰 이름에 따라 뷰가 렌더링
  10. DispatcherServlet이 HandlerInterceptor 인터페이스의 postHandle 메소드를 호출해서 후처리
  11. 응답 종료 (클라이언트에게 전송) 후 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 메소드가 호출

 

 

반응형

댓글