Servlet에 관하여..

박건우·2022년 12월 30일
0
post-thumbnail

CGI란 ?

웹 서버에서 동적인 페이지를 보여주기 위해 임의의 프로그램을 실행할 수 있도록 하는 기술로, 자바 Servlet보다 이전에 존재했다.

CGI 구조

  • 통신 요청이 웹 서버에 전달
  • 웹 서버는 요청에 들어있는 주소가 CGI 프로그램에 대응되는지 확인
  • 대응되는 CGI 프로그램이 있다면 실행하여 환경 변수와 표준 입력 형태로 요청을 전달
  • 웹 서버는 CGI 프로그램이 표준 출력으로 돌려 보낸 내용을 그대로 반환

Servlet이란 ?

자바 웹 서버로 웹 페이지를 제공할 때, 동적인 데이터를 제공하는 서버 측 프로그램이다.
웹 서버의 성능을 향상하기 위해 사용되는 자바 클래스의 일종으로, 자바 코드 안에 HTML을 포함하고 있다.

CGI는 요청이 있을 때마다 새로운 프로세스가 생성되어 응답하지만, 서블릿은 외부 요청마다 프로세스보다 가벼운 스레드로써 응답하기 때문에 보다 가볍다. 또한, 자바로 구현되므로 다양한 플랫폼에서 동작 가능하다.

CGI의 단점과 그 단점을 해결한 Servlet

  • CGI 동작 방식

    CGI는 브라우저에서 웹 서버로 요청이 갔을 때, 각 요청에 대한 처리 프로세스를 생성하는 점에서 대량의 트래픽을 처리하기엔 무리가 있다.

  • Servlet 동작 방식

    서블릿은 각 요청에 대한 프로세스를 생성하지 않고, 하나의 프로세스 내부에 스레드 풀이라는 스레드들이 생성될 공간을 만들어 스레드로 처리한다. 또한, 스레드 풀은 개수를 지정해 일정 이상의 요청이 들어오면 대기하도록 만들어서 대량의 요청이 들어왔을 때도 안정성이 높아진다.

Servlet과 CGI의 결정적 차이

서블릿도 CGI 규칙에 따라 데이터를 주고 받지만, 서블릿은 서블릿을 가지고 있는 서블릿 컨테이너에게 일을 위임한다. 이를 체계적으로 수행하기 위한 서블릿 컨테이너와 서블릿 사이의 규칙이 존재한다.


Servlet을 이용한 개발 흐름

  • 개발자가 자바 서블릿 소스코드(.java)를 작성
  • 자바 서블릿 소스가 빌드 시에 컴파일되며 서블릿 클래스(.class)가 됨
  • 자바 서블릿 클래스가 Tomcat과 같은 서블릿 컨테이너에 등록됨
  • 클라이언트가 특정 경로에 대한 HTTP Rquest를 전송
  • HTTP Rquest에 상응하는 서블릿 실행
  • 서블릿 메서드(비즈니스 로직)가 실행
  • DB 연동 작업이 있는 경우, DB 연동이 되어 데이터를 CRUD
  • 완성된 데이터를 클라이언트에게 반환

Servlet Lifecycle 흐름


초기의 CGI의 1개의 요청 : 1개의 프로세스 구조를 탈피하여 서블릿이 특정한 라이프사이클을 갖고 컨테이너 내부에서 스레드 단위로 요청을 처리한다.

이 과정에서 흐름을 개발자가 아닌 컨테이너가 제어하는데, 이를 IoC(Inversion of Control) 또는 제어의 역전이라고 한다.

0개의 댓글