[web] 서블릿(Servlet)이란?

artp·2025년 5월 13일
0

web

목록 보기
2/9
post-thumbnail

서블릿(Servlet)은 자바 언어로 작성된 웹 애플리케이션 컴포넌트로, 클라이언트의 HTTP 요청을 받아 처리하고, 그 결과를 HTTP 응답으로 반환하는 서버 측 자바 클래스입니다.

즉, 서블릿은 자바 웹 애플리케이션에서 클라이언트 요청을 받아 처리하는 중심 역할을 하는 프로그램입니다.
HTML 폼 처리, 로그인 요청, 데이터베이스 연동, 동적인 HTML 또는 JSON 생성 같은 웹 기능의 핵심 로직을 담당합니다.

서블릿 활용 예시

  • HTML 폼에서 입력된 데이터 처리 (로그인, 회원가입 등)
  • JDBC를 통한 DB 통신 (SQL 실행, 결과 처리)
  • 동적 웹 페이지 응답 생성 (HTML, JSON 등)
  • 외부 서버와 통신 (REST API 호출 등)

서블릿 동작 흐름

  1. 클라이언트(웹 브라우저)가 HTTP 요청을 보냄

  2. 웹 서버(WAS)가 요청을 수신하고, 적절한 서블릿과 매핑된 경로인지 확인

  3. WAS는 클라이언트 요청마다 별도의 스레드를 생성하거나 스레드 풀에서 할당하여 요청을 병렬 처리

  4. 할당된 스레드 내에서 다음 작업을 수행

    • HttpServletRequest, HttpServletResponse 객체 생성
    • 요청 URL에 해당하는 서블릿을 매핑 정보로 확인
    • 서블릿 인스턴스가 없다면: 클래스 로딩 → 인스턴스 생성 → init() 호출
    • 준비가 끝나면 service(request, response) 호출
  5. 서블릿의 service() 메서드 실행

    • 요청 방식(GET, POST 등)에 따라 doGet() 또는 doPost() 호출
  6. 서블릿에서 요청 처리 후, 응답 결과를 HttpServletResponse에 작성

  7. 서블릿 컨테이너가 응답을 HTTP 응답 형식으로 변환하여 클라이언트에 전송

서블릿의 생명주기(Life Cycle)

서블릿의 생명주기는 서블릿 컨테이너(예: Tomcat)가 관리하며, 크게 다음과 같은 단계로 구성됩니다.

  1. 클래스 로딩(Loading)
    • 웹 애플리케이션 시작 시, web.xml 또는 애노테이션을 참고해 서블릿 클래스를 로딩
  2. 인스턴스 생성(Instantiation)
    • 서블릿 객체를 단 한 번만 생성(싱글톤)
  3. 초기화(Initialization)
    • 서블릿 컨테이너가 init() 메서드 1회 호출, DB 연결 등 초기 설정
  4. 요청 처리(Service)
    • 클라이언트 요청마다 service() 호출
    • 내부적으로 HTTP 메서드에 따라 doGet(), doPost() 등 분기
  5. 소멸(Destruction)
    • 서블릿 컨테이너가 웹 애플리케이션 종료 또는 서블릿 갱신 시 destroy() 호출, 리소스 정리

생명주기 메서드 요약

메서드호출 시점호출 횟수용도
init()서블릿이 처음 로딩될 때최초 1회초기 설정(DB 연결, 설정 파일 로드 등)
service()클라이언트 요청마다매 요청마다 (요청 수만큼)HTTP 메서드 분기/처리
doGet() / doPost()요청 방식에 따라매 요청마다 (요청 수만큼)실제 요청 처리 (폼 입력, 데이터 응답 등)
destroy()서버 종료 시 또는 서블릿 언로드 시종료 시 1회자원 정리, 로그 남기기 등 정리/마무리 작업
  • 서블릿은 싱글톤으로 관리되어, 한 번만 생성되고 여러 요청을 동시에 처리합니다.
  • 요청마다 새로운 스레드가 할당되어 service()가 실행됩니다.

    WAS는 요청마다 스레드를 생성하거나 풀에서 할당하고, 그 스레드가 서블릿 인스턴스의 service() 메서드를 호출하여 로직을 실행합니다.

서블릿 생명주기 특징

  • 서블릿은 싱글톤 객체로 동작합니다. 단 한 번만 인스턴스가 만들어집니다.
  • 하지만 요청은 여러 번 들어오므로 WAS는 요청마다 새로운 스레드를 만들어 service()를 실행합니다.
  • 따라서 서블릿 내부에서 공유 자원(인스턴스 변수)을 사용할 때는 동기화 처리에 주의해야 합니다.
  • 일반적으로 요청 처리에 필요한 데이터는 지역 변수(스레드 안전)로 처리하는 것이 원칙입니다.

서블릿 컨테이너란?

서블릿 컨테이너(Servlet Container)서블릿을 실행하고 관리하는 환경입니다.
대표적으로 Tomcat, Jetty, WebSphere, WebLogic, GlassFish 등이 있습니다.

역할

  • 서블릿 객체의 생성, 초기화, 실행, 소멸 등 생명주기 관리
  • HttpServletRequest / HttpServletResponse 객체 생성 및 전달
  • 클라이언트 요청을 적절한 서블릿으로 매핑 및 실행
  • 멀티스레드 기반으로 여러 요청 동시 처리
  • 보안, 설정, 리소스 관리 등 지원

Tomcat은 대표적인 서블릿 컨테이너이자, 서블릿 API(HttpServlet)를 구현한 WAS입니다.

HTTP 요청과 서블릿 처리 흐름

[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 등의 응답을 받아 화면에 렌더링
  • WAS는 클라이언트의 요청마다 새로운 스레드를 생성하거나 스레드 풀에서 하나를 할당하여 처리합니다.
  • 이 스레드는 서블릿의 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 생성 → 서블릿 실행 → 응답 반환
  • 서블릿 생명주기 메서드(init, service, destroy)는 WAS가 자동으로 호출하며, 개발자는 필요한 로직만 오버라이드해 구현하면 됩니다.
  • 서블릿은 싱글톤 객체로 관리되어, 멀티스레드 환경에서 동작하므로 인스턴스 변수 사용 시 동시성에 주의해야 합니다.

서블릿은 Java 웹 프로그래밍의 기초이며, 다음과 같은 기술의 기반이 됩니다.

  • JSP (JavaServer Pages): HTML 안에 자바 코드를 삽입한 형태, 내부적으로 서블릿으로 변환되어 실행
  • Spring MVC: DispatcherServlet이라는 서블릿을 기반으로 전체 웹 애플리케이션의 흐름을 제어
  • RESTful API: doGet(), doPost() 등을 활용한 API 엔드포인트 개발
profile
donggyun_ee

0개의 댓글