목차
Servlet
- Java를 사용하여 동적 웹 콘텐츠를 생성하는 서버 측 프로그램
- 쉽게 말해, Java로 만든 CGI 프로그램 같은 것
- Servlet 인터페이스를 정의
- 즉 Servlet 인터페이스를 구현 -> Java로 구현한 CGI프로그램
CGI의 단점 해결
- 요청마다 새로운 프로세스가 생성 (CGI) -> 멀티 스레드로 해결
- 스레드는 누가 생성하고 관리하나 -> 컨테이너의 등장
Servlet Architecture

Servlet Container
- 웹 컨테이너(web container, 또는 서블릿 컨테이너)는 웹 서버의 컴포넌트 중 하나로 자바 서블릿과 상호작용한다.
- 웹 컨테이너는 서블릿의 생명주기를 관리하고, URL과 특정 서블릿을 맵핑 하며 URL 요청이 올바른 접근 권한을 갖도록 보장한다.
- 웹 컨테이너는 서블릿, Java Server Page(JSP) 파일, 그리고 서버-사이드 코드가 포함된 다른 타입의 파일들에 대한 요청을 다룬다.
- 웹 컨테이너는 서블릿 객체를 생성하고, 서블릿을 로드와 언 로드하며, 요청과 응답 객체를 생성하고 관리하고, 다른 서블릿 관리 작업을 수행한다.
- 웹 컨테이너는 웹 컴포넌트 Java EE 아키텍처 제약을 구현하고, 보안, 병행성(concurrency), 생명주기 관리, 트랜잭션, 배포 등 다른 서비스를 포함하는 웹 컴포넌트의 실행 환경을 명세한다.
정리
- Java 언어로 엔터프라이즈 애플리케이션을 개발하고 운영할 수 있도록 지원해 주는 플랫폼
- 현재는 Eclipse 재단으로 운영이 넘어가서 Jakarta EE 로 변경됨
- apache 재단에서 만든 WAS 중의 하나
- Servlet Container의 reference 구현
- 사실상, Servlet Container = WAS = tomcat
웹서버와 WAS의 차이
웹서버
- 주로 정적 컨텐츠(HTML, CSS, 이미지 등)를 처리합니다
- 클라이언트의 HTTP 요청을 받아 정적 파일을 응답으로 제공합니다
- 대표적인 예: Apache, Nginx, IIS 등
- 비즈니스 로직을 직접 처리하지 않습니다
WAS(웹 애플리케이션 서버)
- 동적 컨텐츠를 처리하는 미들웨어입니다
- 웹서버로부터 받은 요청 중 애플리케이션 로직이 필요한 요청을 처리합니다
- 데이터베이스 연동, 트랜잭션 처리 등 비즈니스 로직을 수행합니다
- 대표적인 예: Tomcat, JBoss, WebLogic, WebSphere 등
- 서블릿 컨테이너, JSP 엔진 등을 포함합니다
간단한 비유
웹서버는 손님(클라이언트)에게 메뉴판(정적 컨텐츠)을 제공하는 식당의 홀 직원이라면, WAS는 주방에서 실제 요리(동적 컨텐츠)를 만드는 요리사라고 볼 수 있습니다.
실제 사용 방식
많은 시스템에서는 웹서버와 WAS를 함께 사용합니다. 웹서버가 먼저 요청을 받아 정적 컨텐츠는 직접 처리하고, 동적 처리가 필요한 요청만 WAS로 전달하는 구조를 가집니다.
웹서버와 WAS 연동
Proxy
- 자원을 요청하는 클라이언트와 자원을 제공하는 서버 사이에서 중재자 역할을 하는 서버 프로그램
Forward Proxy
- 사용자의 요청을 실제 서버가 직접 받는 것이 아닌 중간에서 Forward proxy server가 대신 요청받아 실제 서버와 연결하여 그 결과를 클라이언트에 전달
- 캐싱을 통한 성능 향상

Reverse Proxy
- 보안상의 이유로 DMZ 존에 웹서버를 두고 Reverse Proxy로 설정하고 WAS는 내부망에 위치시킴

Servlet Lifecycle

- init() 메서드
- Servlet Container가 Servlet을 생성한 후 초기화 작업을 수행하기 위해 호출
- 클라이언트의 요청을 처리하기 전에 준비할 작업이 있는 경우 여기에서 처리
- ex.) 데이터베이스 접속, 외부 스토리지 연결, property 로딩 등
- service() 메서드는 굳이 override 할 필요 없음
- GET, POST, PUT, DELETE 각각의 http method 에 대해
- 구현이 필요한 doXXX() 메서드 override 해서 구현
- destroy() 메서드
- Servlet Container가 종료되거나 해당 서블릿을 비활성화시킬 때 호출
- 서비스 수행을 위해 확보되었던 자원 해제, 데이터 저장등의 마무리 작업 시 여기에서 처리
- ex.) 데이터베이스 연결 종료
load-on-startup
-
- Servlet은 브라우저의 최초 요청시 init() 메서드(초기화) 과정을 통해서 메모리에 로드되어 기능을 수행합니다.
-
- 이는 최초 요청에 대해서 실행시간이 길어질 수 있는 단점이 있습니다.
- 지연 초기화 ( lazy initialization )
ServletContext
- Servlet Container 실행 환경
- Servlet과 Servlet Container 간에 연동을 위해 사용
- 웹 애플리케이션마다 하나의 ServletContext 생성
- 하나의 웹 애플리케이션에 포함된 Servlet 들은 동일한 ServletContext 공유
- Servlet끼리 자원을 공유하는 데 활용
- Servlet Container 실행 시 생성되고 Servlet Container 종료 시 소멸

'🚣활동 > NHN Academy' 카테고리의 다른 글
Spring AI로 알아보는 Java 기반 AI 엔지니어링 (0) | 2025.03.28 |
---|---|
Connection Pool 최적화 (0) | 2025.03.25 |
HTTPS (HTTP over SSL/TLS) (0) | 2025.02.17 |
쿠키와 세션 (Cookie & Session) (0) | 2025.02.17 |
HTTP method, HTTP status (0) | 2025.02.17 |
Servlet
- Java를 사용하여 동적 웹 콘텐츠를 생성하는 서버 측 프로그램
- 쉽게 말해, Java로 만든 CGI 프로그램 같은 것
- Servlet 인터페이스를 정의
- 즉 Servlet 인터페이스를 구현 -> Java로 구현한 CGI프로그램
CGI의 단점 해결
- 요청마다 새로운 프로세스가 생성 (CGI) -> 멀티 스레드로 해결
- 스레드는 누가 생성하고 관리하나 -> 컨테이너의 등장
Servlet Architecture

Servlet Container
- 웹 컨테이너(web container, 또는 서블릿 컨테이너)는 웹 서버의 컴포넌트 중 하나로 자바 서블릿과 상호작용한다.
- 웹 컨테이너는 서블릿의 생명주기를 관리하고, URL과 특정 서블릿을 맵핑 하며 URL 요청이 올바른 접근 권한을 갖도록 보장한다.
- 웹 컨테이너는 서블릿, Java Server Page(JSP) 파일, 그리고 서버-사이드 코드가 포함된 다른 타입의 파일들에 대한 요청을 다룬다.
- 웹 컨테이너는 서블릿 객체를 생성하고, 서블릿을 로드와 언 로드하며, 요청과 응답 객체를 생성하고 관리하고, 다른 서블릿 관리 작업을 수행한다.
- 웹 컨테이너는 웹 컴포넌트 Java EE 아키텍처 제약을 구현하고, 보안, 병행성(concurrency), 생명주기 관리, 트랜잭션, 배포 등 다른 서비스를 포함하는 웹 컴포넌트의 실행 환경을 명세한다.
정리
- Java 언어로 엔터프라이즈 애플리케이션을 개발하고 운영할 수 있도록 지원해 주는 플랫폼
- 현재는 Eclipse 재단으로 운영이 넘어가서 Jakarta EE 로 변경됨
- apache 재단에서 만든 WAS 중의 하나
- Servlet Container의 reference 구현
- 사실상, Servlet Container = WAS = tomcat
웹서버와 WAS의 차이
웹서버
- 주로 정적 컨텐츠(HTML, CSS, 이미지 등)를 처리합니다
- 클라이언트의 HTTP 요청을 받아 정적 파일을 응답으로 제공합니다
- 대표적인 예: Apache, Nginx, IIS 등
- 비즈니스 로직을 직접 처리하지 않습니다
WAS(웹 애플리케이션 서버)
- 동적 컨텐츠를 처리하는 미들웨어입니다
- 웹서버로부터 받은 요청 중 애플리케이션 로직이 필요한 요청을 처리합니다
- 데이터베이스 연동, 트랜잭션 처리 등 비즈니스 로직을 수행합니다
- 대표적인 예: Tomcat, JBoss, WebLogic, WebSphere 등
- 서블릿 컨테이너, JSP 엔진 등을 포함합니다
간단한 비유
웹서버는 손님(클라이언트)에게 메뉴판(정적 컨텐츠)을 제공하는 식당의 홀 직원이라면, WAS는 주방에서 실제 요리(동적 컨텐츠)를 만드는 요리사라고 볼 수 있습니다.
실제 사용 방식
많은 시스템에서는 웹서버와 WAS를 함께 사용합니다. 웹서버가 먼저 요청을 받아 정적 컨텐츠는 직접 처리하고, 동적 처리가 필요한 요청만 WAS로 전달하는 구조를 가집니다.
웹서버와 WAS 연동
Proxy
- 자원을 요청하는 클라이언트와 자원을 제공하는 서버 사이에서 중재자 역할을 하는 서버 프로그램
Forward Proxy
- 사용자의 요청을 실제 서버가 직접 받는 것이 아닌 중간에서 Forward proxy server가 대신 요청받아 실제 서버와 연결하여 그 결과를 클라이언트에 전달
- 캐싱을 통한 성능 향상

Reverse Proxy
- 보안상의 이유로 DMZ 존에 웹서버를 두고 Reverse Proxy로 설정하고 WAS는 내부망에 위치시킴

Servlet Lifecycle

- init() 메서드
- Servlet Container가 Servlet을 생성한 후 초기화 작업을 수행하기 위해 호출
- 클라이언트의 요청을 처리하기 전에 준비할 작업이 있는 경우 여기에서 처리
- ex.) 데이터베이스 접속, 외부 스토리지 연결, property 로딩 등
- service() 메서드는 굳이 override 할 필요 없음
- GET, POST, PUT, DELETE 각각의 http method 에 대해
- 구현이 필요한 doXXX() 메서드 override 해서 구현
- destroy() 메서드
- Servlet Container가 종료되거나 해당 서블릿을 비활성화시킬 때 호출
- 서비스 수행을 위해 확보되었던 자원 해제, 데이터 저장등의 마무리 작업 시 여기에서 처리
- ex.) 데이터베이스 연결 종료
load-on-startup
-
- Servlet은 브라우저의 최초 요청시 init() 메서드(초기화) 과정을 통해서 메모리에 로드되어 기능을 수행합니다.
-
- 이는 최초 요청에 대해서 실행시간이 길어질 수 있는 단점이 있습니다.
- 지연 초기화 ( lazy initialization )
ServletContext
- Servlet Container 실행 환경
- Servlet과 Servlet Container 간에 연동을 위해 사용
- 웹 애플리케이션마다 하나의 ServletContext 생성
- 하나의 웹 애플리케이션에 포함된 Servlet 들은 동일한 ServletContext 공유
- Servlet끼리 자원을 공유하는 데 활용
- Servlet Container 실행 시 생성되고 Servlet Container 종료 시 소멸

'🚣활동 > NHN Academy' 카테고리의 다른 글
Spring AI로 알아보는 Java 기반 AI 엔지니어링 (0) | 2025.03.28 |
---|---|
Connection Pool 최적화 (0) | 2025.03.25 |
HTTPS (HTTP over SSL/TLS) (0) | 2025.02.17 |
쿠키와 세션 (Cookie & Session) (0) | 2025.02.17 |
HTTP method, HTTP status (0) | 2025.02.17 |