Servlet 이란?

LSM ·2022년 1월 10일
1

Servelt 이란?

  • Java의 CGI 프로그램(WebServer와 WAS가 소통하기위해 CGI의 규칙을 준수한) 즉, 클라이언트 요청에 의해 서버에서 동적으로 실행되어야할 Java 프로그램을 말한다.
  • WAS에 의해 Servlet이 실행되며 그결과는 WAS에 의해 다시 웹서버에게 전달된다
  • MVC 패턴에서 Controller를 담당한다

장점

  • 빠르다 (스레드를 이용하여 요청을 처리하므로)
  • 플랫폼 독립적 (Java 기반이기에)
  • 보안 (Servlet Container 와 Java가 지원하는 보안기능을 사용가능)

동작 과정

앞서 WAS와 WebServer 에서 첨부한 그림을 다시 한번 언급하겠다.

  1. 사용자의 요청
  • 사용자가 웹서버에 요청을 전달
  • 만약 Servlet에 대한 요청인 경우 WAS에 요청을 전달
  1. WebContainer에서 request, response 객체 생성
  • 웹컨테이너에서는 사용자의 요청에 대한 HttpServletRequest 객체와 HttpServletResponse 객체를 생성
  1. 사용자 요청처리
  • WebContainer에서 web.xml(배포서술자)를 참조하여 사용자가 요청한 URL이 어떤 servlet에 mapping되는지를 찾음
  • 사용자가 요청한 servlet이 이전에 요청된적이 없다면 객체를 생성하고, 해당 servlet의 init() 메소드를 호출하고, 메모리에 로드 시킨다. 만약 이전에 생성한 적이 있다면 객체를 다시 생성하지 않는다.
  • 웹 컨테이너에서 사용자의 요청을 처리할 Thread를 생성한다.
  • Thread가 생성되었으면 해당 Thread를 통해 Servlet의 service()메소드를 실행한다.
  • service() 메소드에서는 사용자의 요청 메소드(get, post)에 따라 doGet(), 또는 doPost() 메소드가 호출된다. 이때 앞서 생성한 HttpServletRequest, HttpServletResponse 객체를 톰캣에 의해 인수로 전달 받는다.
  1. 응답
  • doGet(), 또는 doPost()가 호출되어 사용자 요청에 따른 페이지를 생성한 뒤 그것이 담긴 response객체를 WebContainer에서 HTTP Response로 바꾸어 WebServer에 전송한다.
  1. 소멸
  • request, response 객체를 소멸시킨다.
  • Thread를 종료한다.

Servlet Thread Life Cycle

Servlet은 빠른 응답속도 때문에 많은 사랑을 받았다. 빠른 응답속도의 요인은 최초 요청시 Servlet 객체가 만들어지면 메모리에 로딩된 후 이후 요청은 해당 객체를 계속해서 재사용을 하기 때문이다.

  1. Servlet 객체 생성은 최초 1회만 이루어진다.

  2. Init() (Servlet 초기화) 또한 최초 1회만 이루어진다.

  3. Service(), doGet(), doPost() 호출은 사용자의 요청에의해 계속해서 이루어진다.

  4. destroy() (Serlvet 제거)는 자원을 해제할 때(Servlet이 수정되어 대시 메모리에 로딩해야 하는 경우, 서버가 종료될 때) 이루어진다.

EX)
만약 쓰레드 최대 갯수가 20개 이면 20번은 쓰레드 생성만 일어나고 나머지는 기존의 쓰레드를 재사용한다. full 상태일 때는 실행되고있는 쓰레드의 종료를Wait한다(종료 후 destory는 하지 않음 재사용성 때문).


참고자료

https://galid1.tistory.com/487

profile
개발 및 취준 일지

0개의 댓글