[Spring] Servlet, Spring Web MVC

박연주·2023년 4월 28일
0

Spring

목록 보기
23/24

시작하기에 앞서 기본 웹 동작 구조와 CGI에 대한 이해도가 필요한 것 같다.
Reference의 <servlet에서 Spring Web MVC 프레임워크까지의 변화 과정> 참고!

Servlet

  • 처음 웹서버는 클라이언트 요청에 대해 정적으로만 응답가능

  • 웹 서버에 프로그램을 붙여 동적인 페이지 생성
    -> 서블릿도 동적인 페이지를 만들기 위해 웹서버에 붙이는 프로그램 중 하나

  • Servlet은 동적 데이터 제공을 위해 CGI를 기반으로 제작된 프로그램

  • CGI를 사용하면서 프로세스를 통해 처리하던 것을 스레드를 통해 처리하여 서버에서 많은 리소스를 소모하는 문제를 해결

사용했을 때의 장점

  • http형태의 요청을 직접 파싱 vs http servlet request의 메소드를 호출하는 것
  • http 요청 정보를 쉽게 사용 가능, 처리 결과를 쉽게 응답으로 변환 가능

동작 방식

  • 멀티스레드로 동작
public class MyServlet extends HttpServlet {
	
    public void init(ServletConfig config) throws ServletException {
    	super.init();
    }
    
    public void destory() {
    	super.destory();
    }
    
    protected void service(HttpServletRequest request, HttpServletResponse response) {
    	super.service(request, response);
    }
}

Front Controller

서블릿을 하나씩 연결할 수도 있지만 그러기엔 번거롭고 복잡

  • Front Controller를 통해 클라이언트의 요청을 받는 최 앞단에 컨트롤러를 하나 생성하고, 각 요청별로 처리하는 로직을 찾아 전달 할 수 있도록 함
  • 하나의 Servlet을 통해 요청을 수행할 수 있게 되었으며, 중복 요청들을 Front Controller 한 곳에서 사용하기 때문에 중복 로직을 제거한다는 이점이 있음

-> 이러한 과정을 바탕으로 만들어진 프레임워크가 바로 우리가 흔히 사용하는 Spring Web MVC 이다.

Spring Web MVC

  • Spring MVC Framework는 MVC 패턴을 따르면서 Spring 만의 독자적인 Class를 통해 처리

  • Spring Web MVC에서는 Front Controller의 역할을 Dispatch Servlet이 담당

  • DispatcherServletServlet WebApplicationContext를 만든다. 이것은 Root WebApplicationContext를 부모로 가지고 있음

  • Handler Mapping, Handler Adapter, View부분들은 Dispatcher Servlet이 스프링 컨테이너로부터 주입을 받아서 사용하고 동작
    (컨트롤러나 핸들러를 호출하기 전에 Handler Adapter라는 기능을 통해 다양한 핸들러를 호출할 수 있는 기능을 추가하여 응용하기 쉬운 형태로 변경됨)

스프링으로 웹 요청을 처리한다 ->
스프링 mvc에서 제공하는 디스패처서블릿과 웹 요청 처리 관련 구현체들을 사용할 수 있다,
스프링 컨테이너, 즉 스프링 Ioc를 사용해서 개발 할 수 있다는 이야기이다!

Dispatcher Servlet

  • 클라이언트 요청시 제일 상단에서 서버로 들어오는 모든 요청을 처리하는 Front Controller
  • 기존에는 모든 Servlet에 대해 URL매핑을 활용하기 위해 web.xml에 모두 등록해야했지만, dispatcher Servlet이 해당 어플리케이션으로 들어오는 모든 요청을 핸들링해주어 작업의 효율 높임
    (@SpringBootApplication으로 대체 가능)
  • Controller로 향하는 모든 웹 요청의 진입점으로써 웹 요청을 처리하고 결과 데이터를 클라이언트에게 응답







Reference

servlet에서 Spring Web MVC 프레임워크까지의 변화 과정 - https://velog.io/@hellojihyoung
servlet이란? - https://velog.io/@falling_star3
serlvet, dispatcherServlet - https://riimy.tistory.com/87
[테코톡] 코키의 Servlet - https://www.youtube.com/watch?v=calGCwG_B4Y
코기의 servlet를 정리한 블로그 - https://jj-yi.tistory.com/36
Spring Web MVC 프레임워크와 MVC 패턴 - https://aridom.tistory.com/61

profile
하루에 한 개념씩

0개의 댓글