1. 서블릿(Servlet)

박은서's avatar
Jan 28, 2026
1. 서블릿(Servlet)

1. 서블릿(Servlet)

1️⃣ 서블릿이란?

자바 기반 웹 애플리케이션에서 서버 측 로직을 처리하기 위한 표준 기술
주로 HTTP 요청을 받아 처리하고, 그 결과를 HTTP 응답으로 클라이언트(브라우저)에 반환하는 역할 수행

1) 서블릿의 핵심 개념

  • 서버에서 실행되는 자바 클래스
  • 동적 웹 콘텐츠 생성 담당 (HTML, JSON 등)
  • Java EE / Jakarta EE 표준의 일부
  • 웹 서버가 아니라 서블릿 컨테이너에서 실행됨

2) 대표적인 서블릿 컨테이너

  • Apache Tomcat
  • Jetty
  • WildFly

2️⃣ 서블릿의 역할 흐름

  1. 클라이언트가 HTTP 요청 전송
  1. 웹 서버가 요청을 서블릿 컨테이너(톰캣)로 전달
  1. 컨테이너가 적절한 Servlet 호출
  1. 서블릿이 비즈니스 로직 처리
  1. 응답(HttpServletResponse) 생성 후 반환

3️⃣ 서블릿의 생명주기 (Lifecycle)

서블릿은 한 번 생성되어 여러 요청을 처리
  1. init()
      • 서블릿 최초 로딩 시 1회 호출
      • 초기화 작업 수행
  1. service()
      • 요청마다 호출
      • 내부적으로 doGet(), doPost() 등으로 분기
  1. destroy()
      • 서버 종료 또는 서블릿 제거 시 호출
      • 자원 해제

4️⃣ 주요 클래스와 인터페이스

1) 주요 클래스와 인터페이스

  • Servlet (인터페이스)
  • GenericServlet
  • HttpServlet ← 실무에서 가장 많이 사용
  • HttpServletRequest
  • HttpServletResponse

2) 예시

public class HelloServlet extends HttpServlet { protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException { resp.getWriter().write("Hello Servlet"); } }

5️⃣ 서블릿의 특징

1) 장점

  • 자바 기반 → 이식성 우수
  • 멀티스레드 처리 → 성능 효율적
  • 웹 표준 기반

2) 단점

  • HTML을 자바 코드에서 직접 생성 → 가독성/유지보수 어려움
  • 대규모 애플리케이션에선 생산성 낮음
➡️ 이 단점을 보완하기 위해 JSP, MVC 패턴, Spring MVC가 등장

6️⃣ 서블릿과 JSP의 관계

  • Servlet : 로직 중심 (Controller)
  • JSP : 화면(View) 중심
  • JSP도 내부적으로는 서블릿으로 변환되어 실행

7️⃣ 현대 웹 개발에서의 위치

  • 순수 서블릿만 사용하는 경우는 드묾
  • 대부분:
    • Spring MVC / Spring Boot 내부에서 사용
    • 개발자는 직접 서블릿을 다루지 않지만, 기반 기술로 매우 중요

2. 서블릿(Servlet)과 톰캣(Tomcat)의 관계

1️⃣ 한 문장으로 정리

서블릿 : 자바 웹 표준(API)
톰캣 : 그 서블릿을 실행해 주는 서블릿 컨테이너(웹 서버)

2️⃣ 역할 분담 구조

1) 서블릿(Servlet)

  • 자바 웹 애플리케이션을 위한 표준 인터페이스
  • 무엇을 어떻게 만들어야 하는지에 대한 규약
  • 직접 실행되지 않음
  • HttpServlet, doGet(), doPost() 같은 API 제공
➡️ 설계도 / 규칙

2) 톰캣(Tomcat)

  • Apache에서 만든 서블릿 컨테이너 구현체
  • 서블릿 표준을 실제로 구현하고 실행
  • HTTP 요청 수신, 서블릿 호출, 응답 반환 담당
➡️ 실행 환경 / 런타임

3️⃣ 톰캣이 하는 일 (서블릿 관점)

  1. HTTP 서버 역할
      • 포트 열고 요청 수신 (기본 8080)
  1. 서블릿 컨테이너 역할
      • 서블릿 로딩 및 초기화 (init())
      • 요청마다 스레드 할당
      • service()doGet()/doPost() 호출
      • 응답 전송
      • 종료 시 destroy() 호출
➡️ 즉, 서블릿 생명주기 전체를 관리

4️⃣ 요청 처리 흐름 (서블릿 + 톰캣)

브라우저 ↓ HTTP 요청 Tomcat (웹 서버) ↓ Tomcat (서블릿 컨테이너) ↓ Servlet ↓ Tomcat ↓ HTTP 응답 브라우저
개발자는 서블릿만 작성하고, 실행과 관리는 톰캣이 담당

5️⃣ 왜 서블릿만으로는 안 되고 톰캣이 필요한가?

  • 서블릿은 main 메서드 없음
  • HTTP 처리, 소켓 관리, 스레드 관리 직접 구현 불가
  • 누군가가
    • 요청을 받아주고
    • 서블릿을 호출하고
    • 응답을 클라이언트로 보내야 함
➡️ 그 역할을 하는 것이 톰캣

6️⃣ 톰캣과 다른 서버들의 관계

구분
설명
Tomcat
서블릿/JSP 컨테이너
Jetty
경량 서블릿 컨테이너
WildFly
Java EE 전체 지원 서버
WebLogic
상용 Java EE 서버
⚠️ 톰캣은 전체 Java EE 서버가 아니라, 서블릿 + JSP 중심의 웹 컨테이너입니다.

7️⃣ Spring과의 관계 (중요)

  • Spring MVC는 서블릿 기반
  • DispatcherServlet = 서블릿
  • Spring Boot는 내장 톰캣 사용
브라우저 → 톰캣 → DispatcherServlet → 컨트롤러

8️⃣ 비유로 이해하기

  • 서블릿: 전기제품 사용 규격 (콘센트 규격)
  • 톰캣: 실제 전기를 공급하는 발전소 + 배선
규격만 있어서는 동작하지 않고, 실제 전기를 공급해 주는 시스템이 필요
Share article