> 서버(Server)와 애플릿(Applet)의 약어로 동적인 웹페이지를 생성하는 서버측 프로그램 혹은 그 사양을 말하며 초창기 CGI방식 웹서버의 성능개선을 목적으로 썬마이크로시스템스에서 발표하였다.
>>> 초창기 CGI방식 웹서버와의 차이점
- 플랫폼 독립성 : JVM(자바가상머신) 위에서 동작해 하드웨어와 운영체제에 따라 다른 애플리케이션을 구현하지 않아도 된다.
- 안전성 : 악의적 혹은 잘못 작성된 서블릿이 서버의 파일시스템에 손상을 입히지 않도록 JVM 에서 접근을 제어한다.
- 효율성 : 멀티스레드 방식으로 동작하므로 서블릿이 생성되면 서버가 종료되지 않는 이상 메모리에 남게 된다. 이로 인해 이후에 오는 요청에 대해서는 서블릿을 새로 생성하지 않아도 되 시스템 메모리 활용에 큰 이점이 있다.
>>> 멀티프로세스 방식 VS 멀티스레드 방식
- 멀티 프로세스 방식
==> 클라이언트의 요청을 받아 웹 애플리케이션을 직접 실행하는 구조로 각각의 요청에 대해 프로세스를 생성하고 응답한 뒤 종료하는 형태이다. 이는 각각의 많은 요청이 들어오는 경우 프로세스를 계속 생성하므로(프로세스를 create하는 작업은 필요이상의 부담을 주게 된다) 시스템 부하가 커지게되 안정적인 서비스가 힘들다.
- 멀티 스레드 방식
==> 클라이언트의 요청을 받으면 웹 애플리케이션을 거치지 않고 웹 컨테이너로 요청이 전달된다. 그리고 웹 컨테이너가 요청을 처리할 스레드를 생성하는 형태이다. 멀티스레드 방식은 최초 요청 시 웹 애플리케이션을 실행한 후 종료하지 않은 상태에서 같은 요청이 여러 번 오는 경우, 실행되고 있는 웹 애플리케이션의 스레드를 생성해 요청을 처리하는 방법이다. CGI에서 사용하는 멀티프로세스 방식보다 시스템 부하를 줄여 안정적인 서비스를 제공할 수 있다.
>>> 서블릿의 종류
- Generic 서블릿 : GenericServlet(javax.servlet.GenericServlet)을 상속받아 구현 한다.
==> 프로토콜 독립적인 서블릿으로 service()를 오버라이딩해 사용한다.
- HTTP 서블릿 : HttpServlet(javax.servlet.http Servlet)을 상속받아 구현 한다.
HttpServlet은 GenericServlet을 상속받아 HTTP 프로토콜에 관련된 기능을 구현한 것이다.
==> GenericServlet을 상속받아 사용하는 것보다 편리하며 클라이언트 요청에 따라 doGet, doPost, doPut 등의 메소드를 호출한다.