웹 서버에서 동적인 페이지를 보여주기 위해 임의의 프로그램을 실행할 수 있도록 하는 기술로, 자바 Servlet보다 이전에 존재했다.
자바 웹 서버로 웹 페이지를 제공할 때, 동적인 데이터를 제공하는 서버 측 프로그램이다.
웹 서버의 성능을 향상하기 위해 사용되는 자바 클래스의 일종으로, 자바 코드 안에 HTML을 포함하고 있다.
CGI는 요청이 있을 때마다 새로운 프로세스가 생성되어 응답하지만, 서블릿은 외부 요청마다 프로세스보다 가벼운 스레드로써 응답하기 때문에 보다 가볍다. 또한, 자바로 구현되므로 다양한 플랫폼에서 동작 가능하다.
CGI 동작 방식
CGI는 브라우저에서 웹 서버로 요청이 갔을 때, 각 요청에 대한 처리 프로세스를 생성하는 점에서 대량의 트래픽을 처리하기엔 무리가 있다.
Servlet 동작 방식
서블릿은 각 요청에 대한 프로세스를 생성하지 않고, 하나의 프로세스 내부에 스레드 풀이라는 스레드들이 생성될 공간을 만들어 스레드로 처리한다. 또한, 스레드 풀은 개수를 지정해 일정 이상의 요청이 들어오면 대기하도록 만들어서 대량의 요청이 들어왔을 때도 안정성이 높아진다.
Servlet과 CGI의 결정적 차이
서블릿도 CGI 규칙에 따라 데이터를 주고 받지만, 서블릿은 서블릿을 가지고 있는 서블릿 컨테이너에게 일을 위임한다. 이를 체계적으로 수행하기 위한 서블릿 컨테이너와 서블릿 사이의 규칙이 존재한다.
.java
)를 작성.class
)가 됨
초기의 CGI의 1개의 요청 : 1개의 프로세스 구조를 탈피하여 서블릿이 특정한 라이프사이클을 갖고 컨테이너 내부에서 스레드 단위로 요청을 처리한다.
이 과정에서 흐름을 개발자가 아닌 컨테이너가 제어하는데, 이를 IoC(Inversion of Control) 또는 제어의 역전이라고 한다.