서블릿의 개요
서블릿은 자바로 만들어진 프로그램을 서버에서 실행하기 위해 만들어졌다.
서블릿은 특히 웹 서비스 개발에 특화되어 있는데 데이터베이스 연동, 외부 서비스 연동을 통해 정적인 웹에 동적인 정보 제공을 가능하게 한다.
서블릿은 순수 자바 코드로 작성되며, 코드 자체만 보면 일반적인 자바 클래스와 다르지 않다. 다만 HttpServlet 클래스를 상속하여 서블릿 등록에 필요한 정보를 추가해야 하며, 서블릿 단독으로 실행할 수 없고 서블릿 컨테이너를 통해야 한다.
서블릿 동작 과정
- HttpServlet 클래스를 상속받는 서블릿 클래스를 구현한다.
- 컨테이너는 URL Mapping 설정을 참고하여 서블릿을 등록한다.
- 서블릿 객체 생성 및 init() 메서드를 실행한다.
- 클라이언트 요청은 스레드로 동시 처리되며 각각 service() 메서드를 호출한다.
- service() 메서드는 doGet(), doPost() 등 프로토콜에 따른 메서드를 호출한다.
- 컨테이너 종료 혹은 웹 애플리케이션 종료 시점에 destroy() 메서드를 실행한다.
- 서블릿을 등록 해제한다.
서블릿의 장단점
장점
- 자바를 기반으로 하므로 자바 API를 모두 사용할 수 있다.
- 운영체제나 하드웨어의 영향을 받지 않으므로 한번 개발된 애플리케이션은 다양한 서버 환경에서도 실행할 수 있다.
- 웹 애플리케이션에서 효율적인 자료 공유 방법을 제공한다.
- 다양한 오픈소스 라이브러리와 개발도구를 활용할 수 있다.
단점
- HTML 응답을 위해서는 출력문으로 문자열 결합을 사용해야 한다.
- 서블릿에서 HTML을 포함할 경우 화면 수정이 어렵다.
- HTML 폼의 데이터 처리가 불편하다.
- 기본적으로 단일 요청과 응답을 처리하는 구조로 다양한 경로의 URL 접근을 하나의 클래스에서 처리하기 어렵다.
서블릿은 웹에서 호출 가능한 자바 프로그램 규격이지만, 그 자체만으로는 실제 서비스 개발에서 앞의 단점과 같이 여러 제약이 있다. 따라서 실제 자바 웹 개발에는 서블릿과 함께 다음과 같은 조합으로 구현하게 된다.
- 화면 구성을 위해 JSP와 같은 템플릿 엔진을 사용한다.
- REST API 구현을 위해서는 JAX-RS를 사용한다.
- 복잡한 서비스 구현을 위해 프론트 컨트롤러 모델 등을 사용한다.
이 외에도 보안과 인증, 성능, 개발 생산성 등의 문제를 고려할 때 스프링 프레임워크 등을 사용하고 핵심 기능 구현에 집중하는 것이 바람직하다.