728x90
웹 앱 개발에서 서블릿 컨테이너 사용
웹 브라우저는 HTTP라는 프로토콜을 사용하여 네트워크를 통해 서버와 통신한다.
서블릿은 의미 있는 비즈니스 로직 외 모든 걸 지원
서블릿: 서블릿 컨테이너와 직접 상호작용하는 자바 객체
위 사진에서 초록색 부분만 의미 있는 비즈니스 로직이다.
나머지는 HTTP메시지를 처리하 위해 수행해야하는 반복적인 작업이다.
HTTP를 이해하고 HTTP 요청과 응답을 자바 앱으로 변환하는 역할을 하는 것이 서블릿 컨테이너, 이며 자바 앱이 HTTP 메시지를 변환하는 역할을 한다.
서블릿 컨테이너를 사용하면 자바 앱은 통신 계츨을 구현할 필요가 없다. 가장 널리 알려진 구현체 중 하나는 톰캣(Tomcat)이다.
실제 앱에서 사용되는 솔루션은 다양하다. 제티(Jetty), 제이보스(Jboss), 파야라(Payara) 등이 있다.
서블릿
서블릿 라이프사이클
- 컨테이너가 Servlet에 대한 요청을 수신할 때, Servlet 클래스는 Class Loader를 통해 로드된다.
- Java Servlet 컨테이너는 Servlet의 생성자 호출
- 모든 서블릿의 생성자는 인수를 받아서는 안된다.
- 컨테이너는 서블릿 클래스를 인스턴스화하고 사용할 준비가 된다.
- `javax.servlet.Servlet` 인터페이스에 있는 init 메서드는 웹 컨테이너에 의해 호출
- `service()` 위의 세 단계가 완료되면 이 메서드가 호출된다. 그 후로 이 Servlet인스턴스가 요청을 총족하는데 필요할 때마다 서비스 메서드가 호출된다. 이 `service() 메서드를 구현하는것을 선택사항
- 마지막으로 컨테이너는 이 인스턴스화된 클래스를 제거하기 위해 destroy 메서드를 호출. 이 시점에서 서블릿은 더 이상 필요하지 않으므로 메모리나 스레드 등을 정리
서블릿 인터페이스
public interface Servlet {
public void init(ServletConfig config) throws ServletException;
public void service(ServletRequest req, ServletResponse res)throws ServletException, IOException;
public void destroy();
public String getServletInfo();
public ServletConfig getServletConfig();
}
- ServleteConfig: 톰캣이 요청에 대한 서블릿을 생성할 때 ServletConfig도 같이 생성
- 요청에 대한 서블릿 메소드 init()과 함께 로드된다.
ServleteConfing
public interface ServletConfig {
String getServletName();
ServletContext getServletContext();
String getInitParameter(String var1);
Enumeration<String> getInitParameterNames();
}
서블릿 컨테이너, 톰캣
서블릿 컨테이너 동작 방식
HTTP 요청 -> 서블릿 객체의 메서드 호출 -> 요청, 응답을 매개변수로 제공
- 서블릿 객체를 싱글톤으로 관리
- 클라이언트가 요청을 보낼때 톰캣은 클라이언트가 요청한 경로와 연관된 서블릿 메서드를 호출한다. 즉 서블릿에 포함되는 request, response객체는 요청마다 생성된다.
- 동일한 요청이더라고 request, response객체는 새로 생성하지만 서블릿 객체 인스턴스는 재사용(싱글톤)
- 서블릿 컨테이너 종료시 함께 종료
- 동시 요청을 위한 멀티 쓰레드 처리 지원
728x90
'Spring > Spring MVC' 카테고리의 다른 글
[Spring MVC] HandlerAdapter 가 필요한 이유 - 유연한 컨트롤러 (0) | 2024.10.08 |
---|---|
[웹 애플리케이션 이해] 동시 요청 - 멀티 쓰레드 (2) | 2024.10.07 |
[Spring Boot] WAS를 사용하면 WS는 필요없다? (0) | 2024.10.06 |
HTTP 응답 - HTTP API, 메시지 바디에 직접 입력 (1) | 2023.10.05 |
HTTP 응답 - 정적 리소스, 뷰 템플릿 (0) | 2023.10.05 |