ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • spring MVC & servlet 정리
    Spring Framework 2023. 8. 13. 14:31

    servlet

    • 동적 데이터를 처리하기 위해 CGI기반 프로그램
    • CGI의 단점을 보안하여 process가 아닌 thread 사용과 싱글톤 패턴을 사용해 하나의 구현체를 재사용하며 서버에서 많은 리소스 소모를 해결한다.
    • http 요청에 대해 간편하게 사용하도록 API를 제공해준다. (http servlet 상속)
    • init, destory, service를 통해 servlet의 생성주기를 servlet container가 관리한다.
      • 요청 들어온 url에 맞는 servlet이 없으면 컨테이너에서 생성
      • 사용하지 않는 servlet이 있다면 컨테이너에 보관
      • 요청 들어온 url이 컨테이너에 있으면 꺼내서 재사용한다.
      • init() : 클라이언트로부터 최초로 서블릿 요청이 있을 때 실행
      • service() : 클라이언트로부터 요청이 있을 때마다 실행
      • destroy() : 서블릿 객체가 메모리에서 삭제될 때 실행

    servlet 셍성주기

     

    •  문제점
      • 각 servlet의 service부분에 중복되는 로직이 존재
        • 해결방법 : front controller pattern을 사용해 앞에서 공통된 로직을 처리해주고 각 서블릿으로 요청을 전달한다.
      • servlet에 종속적인 구조를 가진다.
        • 해결방법 : front controller에서 controller로 parameter를 전달하는데 자바 객체를 전달하면서 종속성을 제거한다.
    • front controller의 역할
      • 클라이언트와 서버를 연결하고 각 요청에 맞는 컨트롤러를 매핑하여 정보를 보관해 요청이 들어오면 controller를 호출한다.
      • 전달할 결과를 생성하고 결과를 사용자에게 반환한다.

     

     

    spring web MVC

    • servlet 구조와 다른게 없지만, front controller가 dispatcher-servlet으로 변경
      • dispatcher-servlet : 웹 요청에 필요한 것을 알아서 주입해준다.
        • servlet webapplicationcontext : 웹 요청을 관리하는 객체들을 관리한다.
        • root webapplicationcontext : 웹 환경에 독립적인 기능을 하는 것들이 관리된다.

    • HandlerAdapter를 사용해 다양한 종류의 Handler(controller)를 호출하기 전에 확장성 있는 개발이 가능하다.
    • Controller : 요청을 처리하고 결과를 반환(HandlerAdapter가 ModelAndView 객체로 반환)
    • HandlerMapping : 요청을 직접 처리할 controller를 탐색한다.
    • HandlerAdapter : 매핑된 controller의 실행을 요청한다.
    • View Resolver : View Name을 확인하고 jsp파일을 탐색한다.
    • View : 처리 결과를 반영한 화면을 생성한다.

    spring MVC

    1. Client로부터 요청이 들어오면 DispatcherServlet이 호출된다.
    2. DispatcherServlet은 받은 요청을 HandlerMapping에게 던져준다. 요청받은 URL을 분석하여 HandlerMapping 적합한 Controller를 선택하여 반환한다.
    3. DispatcherServlet는 다음으로 HandlerAdapter를 호출한다. HandlerApdater는 해당하는 Controller 중 요청한 URL에 맞는 적합한 Method를 찾아준다.
      • HandlerMapping은 DispatcherServlet로부터 전달된 URL을 바탕으로 HandlerAdapter 객체를 포함하는 HandlerExecutionChain 객체를 생성
      • 객체 생성 후, DispatcherServlet이 HandlerExecutionChain 객체로부터 HandlerAdapter 객체를 가져와서 해당 메소드를 실행하게 된다.
    4. Controller는 Business Logic을 처리하고, 해당하는 결과를 View에 전달할 객체를 Model에 저장한다.
      • Service(서비스)는 요청에 필요한 작업을 수행하고, 요청에 대해 DB에 접근해야한다면 DAO에 요청하여 처리를 위임한다.
    5. Controller는 View name을 DispatcherServlet에게 리턴한다.
    6. DispatcherServlet은 ViewResolver를 호출하여 Controller가 리턴한 View name을 기반으로 적합한 View를 찾아준다.
    7. DispatcherServlet은 View 객체에 처리결과를 넘겨 최종 결과를 보여주도록 요청한다.
    8. View 객체는 해당하는 View를 호출하며, View는 Model 객체에서 화면 표시에 필요한 객체를 가져와 화면 표시를 처리하고 Client에게 넘겨준다.

     

     

    출처)

    https://starkying.tistory.com/entry/Spring-MVC-%EB%8F%99%EC%9E%91%EC%9B%90%EB%A6%AC-%EA%B5%AC%EC%84%B1%EC%9A%94%EC%86%8C
    https://kgvovc.tistory.com/26
    https://kdhyo98.tistory.com/82

Designed by Tistory.