서블릿(Servlet)은 Java EE(Enterprise Edition) 플랫폼의 일부로서, 웹 애플리케이션 서버에서 동작하는 Java 클래스입니다. 서블릿은 클라이언트의 요청에 대한 동적인 처리를 수행하며, 주로 HTTP 프로토콜을 통해 웹 애플리케이션과 상호작용합니다. 서블릿은 서버 측에서 실행되며, 서버의 기능을 확장하고 개선하기 위해 사용됩니다.
서블릿은 다음과 같은 생명주기(Life Cycle)를 가집니다. 이 생명주기는 서블릿 컨테이너(웹 애플리케이션 서버)에 의해 관리되며, 서블릿의 생성, 초기화, 서비스, 소멸 등의 단계로 구성됩니다.
- 로딩(Loading):
- 서블릿 컨테이너가 서블릿 클래스를 로딩합니다.
- 서블릿 클래스의 인스턴스를 생성하고 초기화하지는 않습니다.
- 예시: 서블릿 컨테이너가 웹 애플리케이션을 시작할 때, 서블릿 클래스가 로딩됩니다. 예를 들어, 웹 애플리케이션의 web.xml 파일에서 서블릿 매핑을 설정하면 해당 서블릿 클래스가 로딩됩니다.
- 인스턴스화(Instantiation):
- 서블릿 컨테이너가 서블릿 클래스를 로딩합니다.
- 서블릿 클래스의 인스턴스를 생성하고 초기화하지는 않습니다.
- 예시: 서블릿 컨테이너가 서블릿 요청을 받으면 해당 서블릿 클래스의 객체를 생성합니다. 예를 들어, 클라이언트가 서블릿에 대한 요청을 보내면, 서블릿 컨테이너는 요청에 해당하는 서블릿 객체를 생성합니다.
- 초기화(Initialization):
- 서블릿 컨테이너가 init() 메서드를 호출하여 서블릿을 초기화합니다.
- 서블릿이 필요한 자원을 할당하거나 설정 작업을 수행합니다.
- 예시: init() 메서드에서 데이터베이스 연결을 설정하거나, 서블릿의 초기 상태를 설정하는 등의 작업을 수행할 수 있습니다.
- 서비스(Service):
- 클라이언트의 요청이 서블릿에 도착하면, 서블릿 컨테이너는 해당 요청을 처리하기 위해 service() 메서드를 호출합니다.
- service() 메서드는 HTTP 요청 방식(GET, POST 등)에 따라 doGet(), doPost() 등의 적절한 메서드를 호출합니다.
- 요청마다 새로운 쓰레드가 생성되어 서비스를 처리합니다.
- 예시: 클라이언트가 웹 브라우저를 통해 서블릿에 대한 HTTP GET 요청을 보내면, 서블릿 컨테이너는 해당 요청을 처리하기 위해 service() 메서드를 호출하고, doGet() 메서드가 호출됩니다.
- 소멸(Destruction):
- 서블릿 컨테이너는 서블릿의 사용을 종료할 때 destroy() 메서드를 호출합니다.
- 서블릿이 사용한 자원을 해제하거나 정리 작업을 수행합니다.
- 서블릿 객체가 메모리에서 제거됩니다.
- 예시: destroy() 메서드에서 데이터베이스 연결을 닫거나, 서블릿이 사용한 리소스를 정리하는 등의 작업을 수행할 수 있습니다.