View
Servlet, Servlet Container, Spring Container
rura6502 2021. 12. 10. 10:14Servlet
Servlet(서블릿)
이란 자바 클래스 종류 중 하나로 요청-응답 프로그래밍 모델을 제공하는 서버(일반적인 경우 web)의 기능을 구현, 확장하기 위한 클래스이다. javax.servlet
, javax.servlet.http
패키지에 서블릿 구현을 위한 인터페이스와 클래스들이 있다. 모든 서블릿 구현체들은 서블릿 라이프사이클을 정의한 Servlet
인터페이스를 구현해야 하며 일반적인 서비스를 구현할 경우 GenericServlet
를 사용/상속해서 구현할 수 있다. HttpServlet
의 경우 HTTP 서비스를 핸들링하기 위한 doGet
, doPost
메소드를 제공하고 있다.
Servlet.java
총 5개 실제 서블릿 코드를 보면 총 5개의 미구현 메소드가 있다. 이 메소드들은 서블릿의 라이프 사이클에 따라 호출되는 메소드 들이다.
Serlvet class is loaded
: 요청이 발생했을 때 서블릿 클래스가 서블릿 컨테이너에 의해 로딩된다.Servlet instance is created\
: 서블릿 컨테이너는 서블릿 클래스를 읽어서 인스턴스를 생성하는데 이 인스턴스는 서블릿 라이프사이클에서 고유하다.init method is invoked
: 서블릿 컨테이너가 서블릿의init()
메소드를 호출한다.service method is invoked
: 요청을 처리하기 위한service()
메소드를 호출한다.destroy method is invoked
: 서블릿 인스턴스가 삭제되기 전에deploy()
메소드를 호출한다. 이 메소드를 통해서 스트림을 닫거나 스레드를 정리할 수 있다.
Servlet Container, Servlet Context
앞서 설명했다시피 서블릿은 요청-응답 모델에서 서버가 응답하기 위해 하나의 서블릿이 어떻게 동작해야할지에 대한 스펙이며 개발자는 애플리케이션 서비스를 위해 서블릿 구현체를 구현해야 한다. 이 서블릿 구현체를 구동시켜주는 것이 Servlet Container(서블릿 컨테이너)
이다. 서블릿 컨테이너는 일반적으로 HTTP를 처리할 수 있는 웹 서버 형태로 HTTP 요청이 들어오면 해당 요청을 처리할 수 있는 적절한 서블릿을 찾아 앞서 설명했던 라이프사이클에 따라 서비스를 제공하는 역할을 한다.
가장 대중적으로 잘 알려진 웹 서블릿 컨테이너, 웹 컨테이너로는 tomcat이 있다. 톰캣은 web server를 가지고 있으면서 HTTP 요청이 들어오면 서블릿 컨테이너로 요청을 넘기고 서블릿 컨테이너는 적절한 서블릿을 읽어서 구동, 즉 라이프사이클을 한번 돌리는 작업을 한다. 이 때 요청을 처리하기 위한 플로우를 위해 요청 당 하나의 스레드를 할당한다. 요청에 대한 작업이 끝나면 서블릿 컨테이너는 서블릿이 반환하는 결과를 적절한 모양으로 적절한 위치에 반환하는 역할을 하게 되는데 톰캣같은 웹 컨테이너의 경우 http 요청에 대한 결과 값 반환이 그 역할이다.
Servlet Context
서블릿 컨테이너는 서블릿들이 공통적으로 참조할 수 있는 오브젝트를 하나 생성하는데, 이것이 바로 Servlet Context(서블릿 컨텍스트)
이다. 개발자가 구현한 서블릿들을 모은 하나의 프로젝트(etc. war
)를 웹 서블릿 컨테이너인 톰캣에 배포하면 톰캣은 web.xml
파일을 참고하여 서블릿 컨텍스트를 생성하고 이는 웹 애플리케이션(배포한 프로젝트로 생성되는 하나의 인스턴스) 당 하나가 생성된다. 서블릿 컨텍스트는 다양한 데이터를 저장할 수 있는데, 예를들어 톰캣에서 JSP 페이지를 내려줄 때 모든 페이지(서블릿)에서 공통적으로 사용되는 HTML 타이틀, footer의 기업정보 등 서블릿들이 공통적으로 접근해서 참조할 수 있는 정보들을 저장할 수 있다.
Reference
- Oracle: The Java EE Tutorial - What Is a Servlet?
- javaTpoint: Life Cycle of a Servlet
- DZone: What is a Servlet Container
- tomcat document: javax.servlet.SerlvetContext interface
- 개발 일기장: [JSP] ServletContext(Application)
- StackOverflow: How servlet container finds WebApplicationInitializer implementations
'Framework & Library & Tool > Spring&SpringBoot' 카테고리의 다른 글
Spring Security - Authentication Architecture (0) | 2021.12.21 |
---|---|
Spring Security - Architecture (0) | 2021.12.21 |
Spring Integration - 기본 개념 (0) | 2021.12.07 |
spring boot 코드 맛보기 (0) | 2017.01.24 |
spring boot란 무엇인가 (0) | 2017.01.24 |