MVC Servlet에 대한 전체적인 개념

황세호·2021년 9월 20일
0

Spring

목록 보기
2/3

Servlet

  • 자바 엔터프라이즈 에디션은 웹 애플리케이션 개발용 스택과 API 제공
  • 그 중에 가장 중요한 클래스중 하나가 HttpServlet!
  • 하나의 프로세스에서 요청 당 쓰레드를 생성해 사용

GCI

  • Servlet 등장 이전에 사용하던 기술인 GCI(Common Gateway Interface)는 요청 당 프로세스를 생성해 사용

장점

  • 빠르다.
  • 플랫폼 독립적
  • 보안
  • 이식성

서블릿 엔진 또는 서블릿 컨테이너 (톰캣, 제티, 언더토, …)

  • 세션을 관리해준다.
  • 네트워크 서비스
  • MIME 기반 메시지 인코딩/디코딩
  • 서블릿 생명주기 관리

서블릿 생명주기

  • 서블릿 컨테이너가 서블릿 인스턴스의 init() 메서드를 호출하여 초기화한다.
    * 최초 요청을 받았을 때 한번 초기화 하고나면 그 다음 요청부터는 이 과정을 생략

  • 서블릿이 초기화된 다음부터 클라이언트의 요청을 처리할 수 있다. 각 요청은 별도의 쓰레드로 처리하고 이때 서블릿 인스턴스의 service() 메서드를 호출한다.
    이 안에서 HTTP 요청을 받고 클라이언트로 보낼 HTTP 응답을 만든다.
    service()는 보통 HTTP Method에 따라 doGet(), doPost() 등으로 처리를 위임한다.

  • 서블릿 컨테이너 판단에 따라 해당 서블릿을 메모리에서 내려야 할 시점에 destroy()를 호출한다.

Servlet Listener

  • 웹 애플리케이션에서 발생하는 주요 이벤트를 감지하고 각 이벤트에 특정 작업이 필요한 경우에 사용할 수 있다.
    서블릿 컨텍스트 수준의 이벤트
    컨텍스트 라이프사이클 이벤트
    컨텍스트 애트리뷰트 변경 이벤트

  • 세션 수준의 이벤트
    세션 라이프사이클 이벤트
    세션 애트리뷰트 변경 이벤트

Servlet Filter

  • 들어온 요청을 서블릿으로 보내고, 또는 서블릿이 작성한 응답을 클라이언트로 보내기 전에 특별한 처리가 필요한 경우에 사용할 수 있다.
  • 체인 형태의 구조 (Filter A -> Filter B -> Filter C와 같이 순차적으로 일어남)

Servlet Context

  • 톰캣이 실행되면서 생성된다.

  • 서블릿 컨텍스트란 하나의 서블릿이 서블릿 컨테이너와 통신하기 위해서 사용되어지는 메서드들을 가지고 있는 클래스가 바로 ServletContext다.

  • 하나의 web application 내에 하나의 컨텍스트가 존재한다. Web application 내에 있는 모든 서블릿들을 관리하며 정보 공유를 할 수 있게 도와주는 역할을 담당하는 녀석이 바로 ServletContext다.

  • 필터와 리스너 또한 등록하여 통신 간에 활용할 수 있다.

Servlet Context 얻는 방법

  • ServletConfig의 getServletContext()를 사용하여 얻는다.

  • Servlet은 HttpServlet을 상속한다. 그리고 HttpServlet은 ServletConfig를 구현하고 있기 때문에 getServletContext() 메서드를 바로 이용할 수 있다.

  • Servlet extends (HttpServlet implements ServletConfig)

생명주기

  • Servlet Context -> Filter -> Servlet

ContextLoaderListener

  • ServletListener의 구현체
  • WebApplicationContext를 만들어 준다.
  • WebApplicationContext를 서블릿 컨텍스트 라이프사이클에 따라 등록하고 소멸시켜 준다.
  • 서블릿에서 IoC 컨테이너를 ServletContext를 통해 꺼내 사용할 수 있다. -> IoC 컨테이너 활용 방법

DispatcherServlet

Spring MVC의 핵심

  • ContextLoaderListener가 만든 Root WebApplicationContext

  • DispatcherServlet은 RootWebApplicationContext를 상속받는 WebApplicationContext를 새로 만든다.

  • 굳이 이러한 일련의 상속 과정을 거치는 이유는
    여러 다른 서블릿들이 공유 자원을 사용할 가능성이 있기 때문이다.
    DispatcherServlet에서 만든 WebApplicationContext는 Scope가 DispatcherServlet에 한정된다. 둘은 Scope가 다르기에 이러한 과정을 거치는 것이다.

  • Front Contoller의 역할을 한다.

Front Controller

  • 중복 제어를 회피하고, 중앙 집중식 액세스 지점을 원하는 경우에 적합한 Java EE 디자인 패턴
  • URL Pattern이 다른 Front Controller를 생성할 경우 분기하는 것 또한 가능하다.
profile
Developer

0개의 댓글