서블릿(Servlet)은 자바 언어로 작성된 웹 애플리케이션 컴포넌트로, 클라이언트의 HTTP 요청을 받아 처리하고, 그 결과를 HTTP 응답으로 반환하는 서버 측 자바 클래스입니다.
즉, 서블릿은 자바 웹 애플리케이션에서 클라이언트 요청을 받아 처리하는 중심 역할을 하는 프로그램입니다.
HTML 폼 처리, 로그인 요청, 데이터베이스 연동, 동적인 HTML 또는 JSON 생성 같은 웹 기능의 핵심 로직을 담당합니다.
클라이언트(웹 브라우저)가 HTTP 요청을 보냄
웹 서버(WAS)가 요청을 수신하고, 적절한 서블릿과 매핑된 경로인지 확인
WAS는 클라이언트 요청마다 별도의 스레드를 생성하거나 스레드 풀에서 할당하여 요청을 병렬 처리
할당된 스레드 내에서 다음 작업을 수행
HttpServletRequest, HttpServletResponse 객체 생성init() 호출service(request, response) 호출서블릿의 service() 메서드 실행
doGet() 또는 doPost() 호출서블릿에서 요청 처리 후, 응답 결과를 HttpServletResponse에 작성
서블릿 컨테이너가 응답을 HTTP 응답 형식으로 변환하여 클라이언트에 전송
서블릿의 생명주기는 서블릿 컨테이너(예: Tomcat)가 관리하며, 크게 다음과 같은 단계로 구성됩니다.
init() 메서드 1회 호출, DB 연결 등 초기 설정service() 호출 doGet(), doPost() 등 분기destroy() 호출, 리소스 정리| 메서드 | 호출 시점 | 호출 횟수 | 용도 |
|---|---|---|---|
init() | 서블릿이 처음 로딩될 때 | 최초 1회 | 초기 설정(DB 연결, 설정 파일 로드 등) |
service() | 클라이언트 요청마다 | 매 요청마다 (요청 수만큼) | HTTP 메서드 분기/처리 |
doGet() / doPost() | 요청 방식에 따라 | 매 요청마다 (요청 수만큼) | 실제 요청 처리 (폼 입력, 데이터 응답 등) |
destroy() | 서버 종료 시 또는 서블릿 언로드 시 | 종료 시 1회 | 자원 정리, 로그 남기기 등 정리/마무리 작업 |
service()가 실행됩니다.WAS는 요청마다 스레드를 생성하거나 풀에서 할당하고, 그 스레드가 서블릿 인스턴스의 service() 메서드를 호출하여 로직을 실행합니다.
service()를 실행합니다.서블릿 컨테이너(Servlet Container)는 서블릿을 실행하고 관리하는 환경입니다.
대표적으로 Tomcat, Jetty, WebSphere, WebLogic, GlassFish 등이 있습니다.
Tomcat은 대표적인 서블릿 컨테이너이자, 서블릿 API(HttpServlet)를 구현한 WAS입니다.
[1] 클라이언트 (웹 브라우저)
↓
사용자가 URL 입력 또는 폼 제출
↓
[2] 웹 서버 / WAS (예: Tomcat)
↓
클라이언트의 HTTP 요청 수신
↓
요청마다 별도의 스레드 생성 또는 스레드 풀에서 할당
[3] 서블릿 컨테이너 (WAS 내부 구성 요소)
↓
- 요청 URL에 해당하는 서블릿 매핑 확인
- 서블릿 클래스가 로딩되지 않았다면 로딩 및 인스턴스 생성
- 서블릿의 init() 메서드를 한 번만 호출
- request, response 객체 생성
- service() 메서드 호출 (스레드 내에서 실행)
[4] 서블릿 클래스
↓
- service() 내부에서 요청 방식에 따라 doGet() 또는 doPost() 호출
- 요청 파라미터 처리 (request.getParameter 등)
- 비즈니스 로직 수행 (DB 연동, 계산 등)
- 응답 데이터 생성 (HTML, JSON 등)
- response 객체에 결과 작성 (response.getWriter().print(...) 등)
[5] WAS
↓
response 객체에 작성된 내용을 HTTP 응답으로 변환하여 클라이언트에게 전송
[6] 클라이언트 (웹 브라우저)
↓
서버로부터 HTML, JSON 등의 응답을 받아 화면에 렌더링
service() 및 doGet(), doPost() 메서드를 실행하며, 요청이 끝나면 응답을 반환하고 소멸하거나 풀로 복귀됩니다.@WebServlet("/example")
public class ExampleServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String message = request.getParameter("message");
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
out.println("Hello " + message);
}
}
/example 경로로 들어온 GET 요청에서 message 파라미터를 받아 응답에 메시지를 출력합니다.| 항목 | 설명 |
|---|---|
| 서블릿 | HTTP 요청을 처리하고 응답을 생성하는 서버 측 자바 클래스 |
| Servlet API | 자바 EE(Servlet 표준 인터페이스), WAS가 이를 구현하여 실행 |
| WAS (톰캣 등) | 서블릿을 실행하고 관리하는 웹 애플리케이션 서버 |
| 서블릿 컨테이너 | 서블릿의 생명주기를 관리하고 요청/응답 처리를 위임하는 컴포넌트 |
| 실행 흐름 | 요청 수신 → request/response 생성 → 서블릿 실행 → 응답 반환 |
서블릿은 Java 웹 프로그래밍의 기초이며, 다음과 같은 기술의 기반이 됩니다.
doGet(), doPost() 등을 활용한 API 엔드포인트 개발