-
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를 전달하는데 자바 객체를 전달하면서 종속성을 제거한다.
- 각 servlet의 service부분에 중복되는 로직이 존재
- front controller의 역할
- 클라이언트와 서버를 연결하고 각 요청에 맞는 컨트롤러를 매핑하여 정보를 보관해 요청이 들어오면 controller를 호출한다.
- 전달할 결과를 생성하고 결과를 사용자에게 반환한다.
spring web MVC
- servlet 구조와 다른게 없지만, front controller가 dispatcher-servlet으로 변경
- dispatcher-servlet : 웹 요청에 필요한 것을 알아서 주입해준다.
- servlet webapplicationcontext : 웹 요청을 관리하는 객체들을 관리한다.
- root webapplicationcontext : 웹 환경에 독립적인 기능을 하는 것들이 관리된다.
- dispatcher-servlet : 웹 요청에 필요한 것을 알아서 주입해준다.

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

spring MVC - Client로부터 요청이 들어오면 DispatcherServlet이 호출된다.
- DispatcherServlet은 받은 요청을 HandlerMapping에게 던져준다. 요청받은 URL을 분석하여 HandlerMapping 적합한 Controller를 선택하여 반환한다.
- DispatcherServlet는 다음으로 HandlerAdapter를 호출한다. HandlerApdater는 해당하는 Controller 중 요청한 URL에 맞는 적합한 Method를 찾아준다.
- HandlerMapping은 DispatcherServlet로부터 전달된 URL을 바탕으로 HandlerAdapter 객체를 포함하는 HandlerExecutionChain 객체를 생성
- 객체 생성 후, DispatcherServlet이 HandlerExecutionChain 객체로부터 HandlerAdapter 객체를 가져와서 해당 메소드를 실행하게 된다.
- Controller는 Business Logic을 처리하고, 해당하는 결과를 View에 전달할 객체를 Model에 저장한다.
- Service(서비스)는 요청에 필요한 작업을 수행하고, 요청에 대해 DB에 접근해야한다면 DAO에 요청하여 처리를 위임한다.
- Controller는 View name을 DispatcherServlet에게 리턴한다.
- DispatcherServlet은 ViewResolver를 호출하여 Controller가 리턴한 View name을 기반으로 적합한 View를 찾아준다.
- DispatcherServlet은 View 객체에 처리결과를 넘겨 최종 결과를 보여주도록 요청한다.
- 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'Spring Framework' 카테고리의 다른 글
Spring bean 정리(2)_Bean 생성과 singleton (0) 2023.08.13 Spring bean 정리(1)_bean 등록 (0) 2023.08.13 spring 의존성 주입(DI) (0) 2023.08.11 spring 제어의 역전 (Ioc) (0) 2023.08.11 json 파라미터 xss필터 처리 (request, response) (0) 2023.08.11