서블릿이란?
Servlet: 자바를 사용하여 웹페이지를 동적으로 생성하는 서버 측 프로그램 혹은 그 사양.
자바를 사용하여 웹을 만들기 위해 필요한 기술이다. 클라이언트가 요청을 하면 그에 대한 응답을 줘야하는데, 이러한 역할을 하는 자바 프로그램이다. 서블릿은 자바로 구현 된 CGI라고 흔히 말하기도 한다.
CGI(Common Gateway Interface(CGI): 서버와 애플리케이션 간에 데이터를 주고 받는 방식
과거 서버에서는 정적인 자료(HTML)만 주고 받을 수 있었다. 클라이언트가 자료를 요청하면 서버는 미리 만들어진 자료를 저장하고 있다가 반환했다. 하지만 인터넷 사용자가 많아지면서 사용자는 정적인 자료가 아닌 자신에게 맞는 자료를 요구하기 시작해 만들어진 것이 서블릿. 사용자 요구에 맞춰 동적으로 반응하는 페이지를 만들기 위해 서블릿이 만들어진 것이다.
서블릿의 특징
- 클라이언트의 요청에 대해 동적으로 작동하는 웹 어플리케이션 컴포넌트
- HTML을 사용하여 요청에 응답
- Java Thread를 이용하여 동작
- MVC 패턴에서 Controller로 이용됨
- HTTP 프로토콜 서비스를 지원하는 javax.servlet.http.HttpServlet 클래스를 상속받음
- UDP보다 처리 속도가 느림
- HTML 변경 시 Servlet을 재컴파일해야 하는 단점이 있음
일반적으로 웹 서버는 정적인 페이지만 제공한다. 그렇기 때문에 동적인 페이지를 제공하기 위해서 웹서버는 다른 곳에 도움을 요청해야 한다. 여기서 웹 서버가 동적인 페이지를 제공할 수 있도록 도와주는 어플리케이션이 서블릿이다.
서블릿의 동작방식
1. 사용자가 URL을 입력하면 HTTP Request가 Servlet Container로 전송된다.
2. 요청을 전송받은 Servlet Container는 HttpServletRequest, HttpServletResponse 객체를 생성한다.
3. web.xml을 기반으로 사용자가 요청한 URL이 어느 서블릿에 대한 요청인지 찾는다.
4. 해당 서블릿에서 service 메소드를 호출 후, 클라이언트의 Get, Post 여부에 따라 doGet(), doPost()를 호출한다.
5. doGet(), doPost() 메소드는 동적 페이지를 생성한 후, HttpServletResponse 객체에 응답을 보낸다.
6. 응답이 끝나면 HttpServletRequest, HttpServletResponse 두 객체를 소멸시킨다.
서블릿의 생명주기
1. 클라이언트 요청이 들어오면 컨테이너는 서블릿이 메모리에 있는지 확인한다. 없을 경우, init()을 호출하여 메모리에 적재한다. init()은 처음 한번만 실행되기 때문에 서블릿의 스레드에서 공통적으로 사용해야하는 것이 있다면 오버라이딩 하여 구현하면 된다.
2. 클라이언트 요청에 따라서 service() 메소드를 통해 요청에 대한 응답이 doGet(), doPost()로 분기하는데 이때, HttpServletRequest, HttpServletResponse에 의해 request, response객체가 제공된다.
3. 컨테이너가 서블릿에 종료 요청을 하면 destroy() 메서드가 호출된다. 종료시 처리해야하는 작업은 destroy() 메서드를 오버라이딩하여 구현하면 된다.
package javax.servlet;
...
public interface Servlet {
// 초기화
void init(ServletConfig config) throws ServletException;
ServletConfig getServletConfig();
void service(ServletRequest request, ServletResponse response) throws ServletException, IOException;
String getServletInfo();
// 소멸
void destroy();
}
서블릿 컨테이너란?
Servlet Container(서블릿 컨테이너): 스스로 동작하지 않는 서블릿을 관리해주는 컨테이너. 서블릿 컨테이너는 클라이언트의 요청을 받고 응답할 수 있도록 웹 서버와 소켓으로 통신한다. 톰캣이 서블릿 컨테이너의 대표적인 예이다.
톰캣처럼 서블릿을 지원하는 WAS를 서블릿 컨테이너라 한다. 서블릿 객체를 생성, 초기화, 호출, 종료하는 생명주기를 관리하며 객체를 싱글톤으로 관리해준다. 동시 요청을 위한 멀티 쓰레드처리를 지원해준다.
'Spring > 개념' 카테고리의 다른 글
[Spring] Annotation (0) | 2023.06.18 |
---|---|
[Web] HTTP 웹 기본 (0) | 2023.06.04 |
[Spring] 스프링 PSA (0) | 2023.05.11 |
[Spring] 스프링 AOP (0) | 2023.05.11 |
[Spring Security] 스프링 시큐리티의 동작 구조 (0) | 2023.05.11 |