웹이 처음 등장했을 때는 정적인 데이터(HTML, 이미지)만을 전달해주는 웹서버 밖에 없었다. 하지만 CGI가 탄생한 이 후 동적으로 사용자와 상황에 따라 다른 페이지를 보여줄 수 있게 되었다.
하지만 CGI는 요청이 들어올 때마다 프로세스 단위로 실행이 되어 사용자가 많아지면 서버가 힘들어진다.
동적 웹 페이지를 만들 때 멀티스레드 방식으로 처리하기 위한 자바 기반의 웹 애플리케이션 프로그래밍 기술
서블릿은 웹 요청과 응답의 흐름을 간단한 메서드 호출만으로 체계적으로 다룰 수 있게 해주는 기술이다.
서블릿은 각 요청 마다 프로세스를 생성해 처리하는 것이 아니라, 프로세스 1개 안에 Thread Pool이라는 thread들이 생성될 수 있는 공간을 만들어 멀티스레드로 처리한다.
또한 Thread Pool은 thread의 개수를 지정하여 일정 이상의 요청이 들어왔을 때는 대기하도록 만들어서 대량의 요청이 들어왔을 때도 조금 더 안정적으로 운영할 수 있다.
클라이언트가 웹 서버에 요청하면 웹 서버는 톰캣과 같은 WAS에 요청을 전달한다. 그러면 WAS는 각 요청에 해당하는 서블릿을 실행시켜 처리한다. 그 후 결과를 HTTP형식으로 응답한다.
서블릿을 담고 관리해주는 컨테이너
HttpServletRequest, HttpServletResponse 객체 생성
서블릿 생명주기 관리
통신 지원
멀티스레딩 관리
클라이언트 요청을 WAS의 웹 서버가 받음
WAS의 웹 서버가 HTTP 요청을 서블릿 컨테이너에게 전달
서블릿 컨테이너는 HttpServletRequest / HttpServletResponse 객체를 생성
서블릿 컨테이너는 web.xml (설정 파일)을 참고하여 매핑할 서블릿을 찾고 요청 처리에 필요한 서블릿 인스턴스가 컨테이너에 존재하는 지 확인
존재하지 않는다면 서블릿 인스턴스를 생성하고 해당 서블릿 인스턴스의 init() method를 호출하여 서블릿 객체를 초기화
해당하는 서블릿에서 service() 메소드 호출 후 요청 처리
동적 페이지 생성 후 ServletResponse 객체에 응답 전송
처리한 결과를 웹 서버에게 전달한 후 HttpServletRequest / HttpServletResponse 객체를 소멸
웹 서버는 받은 응답을 클라이언트에게 전달
서블릿은 생성 이후에 init() 메서드를 통해 초기화된다.
service() 메서드 호출
destroy()