Servlet이란?
Servlet이란 동적 웹 페이지를 만들 때 사용되는 자바 기반의 웹 애플리케이션 프로그래밍 기술이다. 서블릿은 웹 요청과 응답의 흐름을 간단한 메서드 호출만으로 체계적으로 다룰 수 있게 해준다.
Servlet 특징
- 클라이언트의 Request에 대해 동적으로 작동하는 웹 어플리케이션 컴포넌트
- 기존의 정적 웹 프로그램의 문제점을 보완하여 동적인 여러 가지 기능을 제공
- JAVA의 스레드를 이용하여 동작
- MVC패턴에서 컨트롤러로 이용됨
Servlet 동작 과정

1. 클라이언트의 요청
2. HTTP 요청을 위한 HttpServletRequest,HttpServletResponse 객체 생성
3. Web.xml에서 어느 Servlet에 대한 요청인지 탐색
4. 해당하는 Servlet에서 Service() 메소드 실행
5. 요청에 따라서 doGet() 또는 doPost() 실행
(2에서 생성된 HttpServletRequest와 HttpServletResponse가 인자로 전달)
6. 실행된 결과가 HttpServletResponse에 담김
7. HttpServletResponse 객체를 서블릿 컨테이너에서 HTTP 형태로 바뀌어 웹서버로 전송
8. HttpServletRequest 객체와 HttpServletResponse 객체의 메모리 소멸 및 스레드 종료
Servlet Container
Servlet Container는 Servlet을 담고 관리해주는 컨테이너이다.
1. 생명주기 관리
- 서블릿의 생명주기를 관리한다.
- 초기화 메소드 호출
- 요청이 들어오면 적절한 서블릿 메소드 호출
- 서블릿 소멸 시 가비지 컬렉션 진행
2. 웹서버와 통신 지원
- 서블릿 컨테이너는 서블릿과 웹서버가 손쉽게 통신할 수 있게 해주어, 소켓을 만들고 listen, accept 등을 API로 제공하여 복잡한 과정을 생략할 수 있게 함
3. 멀티스레딩 관리
- 서블릿 컨테이너는 요청이 올 때 마다 자바 쓰레드를 하나 생성
- HTTP 서비스를 실행하고 나면, 쓰레드 자동 소멸
4. 선언적인 보안관리
- 서블릿 컨테이너를 사용하면 개발자는 보안에 관련된 내용을 서블릿 또는 자바 클래스에 구현하지 않아도 됨
- 일반적으로 보안관리는 XML 배포 서술자에 기록하기 때문에, 보안에 대해 수정해도 자바 코드를 수정하여 다시 컴파일 하지 않아도 됨