finerss's world!

서블릿은 서버에서 실행되는 프로그램이다.
그리고, 서블릿의 모태는 CGI라고 할수 있다.

기존의 HTML은 정적인 페이지만을 서비스 할수 있었지만,
CGI는 요청페이지내에 서버용 프로그램을 삽입하여,
서버에서 처리한 결과를 서비스 할수 있다.


CGI는 사용자의 요청이 있을때마다 프로세스를 하나씩
생성한다. 이로인한 단점은 서버의 부하인데
이러한 단점을 극복한 한단계 업그레이드된 버전이
바로 servlet과 jsp이다.

servlet과 jsp는 인-프로세스방식을 사용하는데,
이는 메모리에 라이브러리를 로드시킨뒤 한번 로드된 라이브러리
(프로세스 라고도 함)를 여러 요청에 이용할수 있는 방식이다.
(서버에 부하가 작아짐)
또 하나의 차이점은 servlet과 jsp는 자바의 모든 성질을 그대로
가지고 있기 때문에 스레드 처리도 가능하다는 것이다.

 즉 GI가 클라이언트 프로세스로 처리하는데 반해 서블릿은 클라이언트를 쓰레드로 처리한다. 그래서 많은 클라이언트의 요구를 효과적으로 처리할 수 있다. 서블릿 객체는 쓰레드가 여러 개 돌아가면서 처리하기 때문에 서블릿 메소드들은 반드시 멀티쓰레드에 대한 고려를 해야한다.





웹 서버는 정적인 페이지 서비스만 제공한다.
정적인페이지란 디렉토리에 있는파일 그대로를 말하는데 서버는 단지 클라이언트가 요청한 파일을 찾아서 그대로 클라이언트에게 넘겨줄 뿐이다. 즉 모든 클라이언트가 동일한 결과를 본다는 뜻이다.

웹서버 혼자서 할 수 없는 두가지
1. 동적인 컨텐츠 생성
 앞에서 말했듯이 웹 서버는 단지 정적인 페이지만을 제공할 뿐이다. 그러나 도우미(Helper)애플리케이션이 웹 서버와 협력해서
동적이고, 실시간으로 작성한 페이지를 제공할 수 있다. 예로 이미지 디렉토리에서 임의로 그림을 하나 골라 제공하는 페이지 같은 것을 말한다

2. 서버상에 데이터 저장하기
 
사용자가 폼에 데이터를 입력하고 전송 버튼을 눌렀을경우 웹서버는 혼자 파일이나 데이터베이스에 데이터를 저장할수 없다.
이 경우 웹 서버는 자신을 도와줄 애플리케이션에게 SOS요청을 하는데 웹서버는 파라미터를 애플리케이션에 넘겨주고 응답하도록 부탁한다.

이런 도우미 애플리케이션을 CGI(Common Gateway Interface) 라고 부르며 대부분의 CGI 프로그램은 펄(Perl) 스크립트로 작성한다. 물론 펄 말고도 C, 파이썬, PHP 같은 언어도 있다.

CGI를 가지고 현재시간(동적)을 클라이언트에게 제공하는 것을 살펴보면

 

 


1. 사용자는 정적인 페이지가 아닌 CGI 프로그램에 대한 URL을 클릭한다.


2. 웹 서버는 들어온 요청이 도우미 프로그램을 호출하는 것임을 간파하고는, 해당 프로그램을 실행한다. 물론 GET 또는 POST로 넘어온 파라미터를 그대로 넘겨준다


3. 도우미 프로그램은 현재 시간이 들어간 페이지를 만들어(동적으로) 서버에 HTML 형식으로 넘겨준다. 이시점에서 웹 서버가 도우미 프로그램으로부터 받는 페이지는 정적인 페이지이다.


4. 도우미 프로그램은 페이지를 장사를 끝내고 셔터 문을 내린다. 클라이언트는 정적인 페이지가 된 HTML 페이지를 서버로부터 받는다.