Spring이 Tomcat으로부터 HTTP Request를 받을 수 있는 이유와 과정

Kevin·2024년 2월 29일
1

Spring

목록 보기
14/27
post-thumbnail

서론

외장 Tomcat 서버와 Spring을 통해서 개발을 하던 중 Client(브라우져)에서 보낸 Http Request가 어떻게 Spring Controller의 메서드에서 HttpRequest 라는 인자로 받을 수 있는지에 대해서 궁금증이 생겨서 공부를 하였다.

이번에 공부를 하면서, Spring에만 매몰되는게 아니라 전체의 흐름을 파악하는게 굉장히 중요하겠다는 생각을 하게되었다.


본문

여러분이 url창에 naver을 검색했다고 예를 들어보자.

이 때 아래와 같은 Process를 거친 후 Client의 요청이 Spring Controller 메서드의 HttpRequest 인자로 도착한다.

  1. 클라이언트가 브라우저에서 URL을 요청 (8080포트) - ex) www.naver.com/event/list
  2. 톰캣의 Thread Pool에서 해당 요청을 받아서 Connector를 통해 HTTP버전에 맞는 요청을 연결해준다.
  3. Engine에서 URL에 해당하는 Host로 접근 - ex) www.naver.com
  4. 호스트의 각 Context(Spring Project) 로 접근 - ex) /event
  5. Context 내부에는 각각의 서블릿이 들어있으며 url에 맞는 서블릿에 접근한다. - ex) /list

위 순서에 대해서 조금 더 자세히 그림으로 나타낸 것인데, 이를 말로 풀어보자.

먼저 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를 받을 수 있었던 것이다.

profile
Hello, World! \n

0개의 댓글