[JAVA, SPRING] SERVLET과 SPRING의 연결

Servlet, Spring, SpringMVC, DispatcherServlet

Posted by iheese on May 17, 2022 · 2 mins read

Servlet

  • 기존의 존재하던 웹 서버(Web Server)는 정적 페이지만 처리하였다.
  • 동적인 페이지를 처리하기 위해 나온 것이 Java의 Servlet이다.

servlet

  • 위 그림에서 Web Contatiner가 Servlet Container와 같다.
  • 클라이언트 측(브라우저)에서 들어온 요청이 정적 페이지이면 바로 웹 서버에서 처리하여 빠르게 응답할 수 있다.
  • 클라이언트 측에서 들어온 요청이 동적 페이지면 웹 서버는 forwarding 하여 Servlet Container에 넘기고 어떤 로직을 처리하고 웹 서버를 통해 응답한다.
  • 참고!! : Servlet의 작성방법, 생명주기, Request, Response에 관하여


Spring은 Servlet과 어떤 연관이 있을까?

  • Servlet은 Servlet Container에 의해 생성, 메소드 호출, 소멸까지 자동으로 처리된다.
  • 각 동적 페이지 요청에 따라 Servlet이 각각 생성되어야 하며 개별 Servlet 로직 외에도 공통 로직을 포함하게 되므로 반복적인 일이 일어나게 된다.
  • 또한 Servlet Container는 메소드 호출하면서 쓰레드를 할당하게 되는데 이 자체 과정이 반복되게 되면 서버에 큰 부담이 된다.
  • 이를 개선하기 위해 Spring MVC에서는 DispatcherServlet을 사용하게 된다.


Spring MVC, DispatcherServlet

  • Spring MVC는 Front controller 패턴을 이용하여 구성되어 있다.
  • Front controller는 클라이언트로부터 모든 요청을 받는 전면 컨트롤러이다.
  • Spring MVC에서는 Front controller를 DispatcherServlet로 사용한다.
    • Spring MVC : Spring이 제공하는 웹 모듈이며, M,V,C 로 나누어 제공한다.
      • M : Model, 데이터
      • V : View, 실제로 만들어지는 페이지
      • C : Controller, 요청에 따른 응답을 만드는 로직

servlet

  • 각 순서에 맞는 부연 설명
    1. 클라이언트로부터 HTTP 요청이 들어온다.
    2. Handler Mappping의 방식을 통해 요청에 맞는 컨트롤러가 리턴된다.
    3. Handler Adapter는 요청에 맞는 컨트롤러가 처리 로직을 수행한다.
    4. 그 후 처리 결과를 Model&View 형태로 변환하여 DispatcherServlet으로 보낸다.
    5. DispatcherServlet은 리턴받은 값을 View Resolver를 통해 view 객체를 찾아주거나 생성한다.
    6. 그리고 view 객체에 model(로직 결과 data)를 포함시켜 응답하게 된다.


Servlet에서 Spring MVC로

  • 설정만 잘 해주면 Spring MVC에서 제공하는 DispatcherServlet과 웹 요청, 응답 객체를 Servlet Container에 의해 쉽게 관리하고 처리할 수 있게 된다.
  • 또한 Spring Container를 통해 Java 객체 관리가 쉬워질 수 있게 된다.

  • 이는 결국 Controller 로직(요청처리 로직)에 개발자가 집중할 수 있는 환경을 만들게 된다.


Reference: