들어가기에 앞서 CGI가 무엇인지부터 알고 가자.
CGI (Common Gateway Interface)
서버와 응용프로그램 사이에 데이터를 주고 받기 위한 방법이나 규약
- 서버에서 가지고 있는 데이터 뿐만 아니라 외부 프로그램을 호출하고 처리 결과를 받아서 동적으로 컨텐츠를 생성하기 위한 방법이 고안되었다.
- 이를 실현하기 위해 서버 프로그램과 외부 프로그램의 통신을 위한 규약을 정한 것이 바로 CGI이다.
- 예를 들어, 웹 서버와 데이터베이스 사이의 통신을 생각하면 이해하기 쉽다.
CGI는 몇가지 문제점이 존재했는데
- HTTP 요청마다 개별적으로 프로세스를 만들기 때문에 서버에 많은 부하가 걸릴 수 있다.
- 페이지 로드 사이에 데이터가 메모리에 캐시될 수 없다.
서블릿
서버에서 웹페이지 등을 동적으로 생성하거나 데이터 처리를 수행하기 위해 자바(Java)로 작성된 프로그램
- 위에 언급한 CGI의 단점을 보완한 자바 프로그램이다.
- 서블릿은 하나의 공유 프로세스를 두고 내부에 스레드 풀을 생성하여 각 요청마다 스레드를 할당하여 작업을 처리한다.
- 스레드 풀은 최대 스레드 개수가 정해져 있으며 사용 가능한 스레드가 없을 경우 요청을 대기 시킴으로서 대량의 트래픽에서도 좀 더 안전성을 확보할 수 있다.
서블릿 컨테이너
서블릿의 생성, 실행, 소멸을 관리하는 웹 컨테이너
- 서블릿은 그저 자바로 작성된 프로그램으로 스스로 동작하는게 아니기 때문에 이와 관련해서 서블릿을 관리해줄 역할이 필요한 데 이것을 서블릿 컨테이너가 담당한다.
- 쉽게 말해서, 서블릿은 어떠한 기능을 하는지 적은 명세서이고 서블릿 컨테이너는 해당 명세서를 토대로 기능을 수행해주는 역할이라고 보면 된다.
서블릿 컨테이너의 역할
세부적으로 서블릿 컨테이너가 무슨 역할을 하는지 알아보자.
1. 웹 서버와의 통신 지원
웹 서버로 부터 받은 요청을 분석해 서블릿을 실행시키고, 서블릿에서는 웹서버의 정보를 확인할 수 있도록 하는 기능을 제공한다.
2. 서블릿 생명주기 관리
- 서블릿을 로드하여 초기화 한다.
- 요청이 들어오면 적절한 서블릿 메서드을 호출한다.
- 요청이 처리 된 후 서블릿을 소멸시키고 가비지 컬렉션을 진행한다.
3. 멀티스레딩 지원 및 관리
요청이 들어올 때 마다 스레드를 생성하고 처리 완료된 요청에 대해서 스레드를 자동으로 소멸해준다.
4. 선언적 보안 관리
보안에 관련된 내용을 서블릿, 자바 클래스 안에 구현하지 않고 배포 서술자 (web.xml
) 에 기술하면 된다.
참고
velog - 서블릿 컨테이너(Servlet Container) 란?
velog - 자바 서블릿에 대해 알아보자. 근데 톰캣과 스프링을 살짝 곁들인
WAS와 Server의 차이? 그리고 Web Container 란?