Contents
1. 서블릿(Servlet)1️⃣ 서블릿이란?2️⃣ 서블릿의 역할 흐름3️⃣ 서블릿의 생명주기 (Lifecycle)4️⃣ 주요 클래스와 인터페이스5️⃣ 서블릿의 특징6️⃣ 서블릿과 JSP의 관계7️⃣ 현대 웹 개발에서의 위치2. 서블릿(Servlet)과 톰캣(Tomcat)의 관계1️⃣ 한 문장으로 정리2️⃣ 역할 분담 구조3️⃣ 톰캣이 하는 일 (서블릿 관점)4️⃣ 요청 처리 흐름 (서블릿 + 톰캣)5️⃣ 왜 서블릿만으로는 안 되고 톰캣이 필요한가?6️⃣ 톰캣과 다른 서버들의 관계7️⃣ Spring과의 관계 (중요)8️⃣ 비유로 이해하기1. 서블릿(Servlet)
1️⃣ 서블릿이란?
자바 기반 웹 애플리케이션에서 서버 측 로직을 처리하기 위한 표준 기술
주로 HTTP 요청을 받아 처리하고, 그 결과를 HTTP 응답으로 클라이언트(브라우저)에 반환하는 역할 수행
1) 서블릿의 핵심 개념
- 서버에서 실행되는 자바 클래스
- 동적 웹 콘텐츠 생성 담당 (HTML, JSON 등)
- Java EE / Jakarta EE 표준의 일부
- 웹 서버가 아니라 서블릿 컨테이너에서 실행됨
2) 대표적인 서블릿 컨테이너
- Apache Tomcat
- Jetty
- WildFly
2️⃣ 서블릿의 역할 흐름
- 클라이언트가 HTTP 요청 전송
- 웹 서버가 요청을 서블릿 컨테이너(톰캣)로 전달
- 컨테이너가 적절한 Servlet 호출
- 서블릿이 비즈니스 로직 처리
- 응답(HttpServletResponse) 생성 후 반환
3️⃣ 서블릿의 생명주기 (Lifecycle)
서블릿은 한 번 생성되어 여러 요청을 처리
- init()
- 서블릿 최초 로딩 시 1회 호출
- 초기화 작업 수행
- service()
- 요청마다 호출
- 내부적으로
doGet(),doPost()등으로 분기
- 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️⃣ 톰캣이 하는 일 (서블릿 관점)
- HTTP 서버 역할
- 포트 열고 요청 수신 (기본 8080)
- 서블릿 컨테이너 역할
- 서블릿 로딩 및 초기화 (
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