
외장 Tomcat 서버와 Spring을 통해서 개발을 하던 중 Client(브라우져)에서 보낸 Http Request가 어떻게 Spring Controller의 메서드에서 HttpRequest 라는 인자로 받을 수 있는지에 대해서 궁금증이 생겨서 공부를 하였다.
이번에 공부를 하면서, Spring에만 매몰되는게 아니라 전체의 흐름을 파악하는게 굉장히 중요하겠다는 생각을 하게되었다.
여러분이 url창에 naver을 검색했다고 예를 들어보자.
이 때 아래와 같은 Process를 거친 후 Client의 요청이 Spring Controller 메서드의 HttpRequest 인자로 도착한다.

위 순서에 대해서 조금 더 자세히 그림으로 나타낸 것인데, 이를 말로 풀어보자.
먼저 Tomcat(Servlet Context)이 클라이언트에게 HTTP 요청이 온 것을 받아서, 자바 객체인 Request로 변환을 해준다.
그 후 DispatcherSerlvlet에서 HandlerMapping을 통해서 해당 url의 컨트롤러의 메서드를 찾아서 HttpRequest로 매핑을 해준다.
이러한 플로우가 가능 한 이유는 HandlerMapping 은 URL과 컨트롤러의 메서드를 매핑한 테이블을 가지고 있고, DispatcherSerlvlet 은 Url Request가 오면 이러한 HandlerMapping을 통해 호출해야하는 Controller의 메서드를 찾기 때문이다.
요약을 하자면 Browser가 HTTP Request를 Tomcat에게 하게 되면 Tomcat은 이를 Java 객체로 변환을 한다. 그 후에 DisPatcherServlet이 HandlerMapping을 이용해 적절한 Controller 메서드와 매핑을 시켜주기 때문에, Spring이 Tomcat으로부터 HTTP Request를 받을 수 있었던 것이다.