[JSP] 서블릿(Servlet)/서블릿 컨테이너(Servlet Container)

Yeoonnii·2023년 4월 4일
0

Java

목록 보기
30/30

1. 웹 서버란?

서블릿 컨테이너가 무엇인지 알려면 먼저 웹 서버가 무엇인지 알아야 한다.

  • 웹 서버는 HTTP 프로토콜을 사용하여 데이터를 전송한다.
  • 사용자(클라이언트)는 브라우저에 URL(https://velog.io/)를 입력하여 웹 페이지를 얻는다.

웹 서버가 하는 일은 웹 페이지를 사용자(클라이언트)에게 보내주는 것이다.




2. 서블릿 컨테이너란?

서버에 만들어진 서블릿이 스스로 작동하는 것이 아니라, 서블릿을 관리 해주는 것이 필요한데, 이러한 역할을 하는 것이 바로 서블릿 컨테이너 이다.

즉, 서블릿 컨테이너(Servlet Container)는

  • 서블릿들의 생성, 실행, 파괴를 담당하며,
  • 서블릿들을 위한 상자(Container)이다.

웹 서버에서 볼 수 있듯이 사용자(클라이언트)는 서버에서 정적인 웹 페이지만 요청할 수 있다.

서블릿 컨테이너

  • 서버 사이드에서 동적으로 웹페이지를 생성하기 위해 Java를 사용한다.
  • Clinet의 Request를 받아주고 Response할 수 있도록, 웹 서버와 소켓을 만들어 통신한다.
  • 서블릿과 상호작용하는 웹 서버의 일부이며 웹 서버와 서블릿들이 상호작용할 때 서블릿 컨테이너는 필수적이다.

대표적으로 무료 서비스인 Tomcat(톰캣)이 있다.

Tomcat(톰캣)은 웹 서버와 소켓을 만들어 통신하며 JSP(java server page)와 Servlet이 작동할 수 있는 환경을 제공한다.



서블릿 컨테이너의 역할

1. 웹서버와의 통신 지원

서블릿 컨테이너는 서블릿과 웹서버가 손쉽게 통신할 수 있게 해주어, 소켓을 만들고 listen, accept 등을 API로 제공하여 복잡한 과정을 생략할 수 있게 해준다.

2. 서블릿 생명주기(Life Cycle) 관리

서블릿 컨테이너는 서블릿의 탄생과 죽음을 관리한다.
1. 서블릿 클래스를 로딩하여 인스턴스화
2. 초기화 메소드를 호출
3. 요청이 들어오면 적절한 서블릿 메소드를 호출합니다.
4. 서블릿 소멸 시 Garbage Collection(가비지 컬렉션)을 진행

3. 멀티쓰레드 지원 및 관리

  1. 서블릿 컨테이너는 요청이 올 때 마다 새로운 자바 쓰레드를 하나 생성한다.
  2. HTTP 서비스 메소드를 실행하고 나면, 쓰레드는 자동으로 소멸된다.
  3. 원칙적으로 쓰레드를 관리해줘야 하지만 서버가 다중 쓰레드를 생성하고 운영해주니 쓰레드의 안정성에 대해서 걱정하지 않아도 된다.

4. 선언적인 보안 관리

  • 서블릿 컨테이너를 사용하면 개발자는 보안에 관련된 내용을 서블릿 또는 자바 클래스에 구현해 놓지 않아도 된다.
  • 일반적으로 보안관리는 배포시 XML에 기록하므로, 보안에 대해 수정할 일이 생겨도 자바 소스 코드를 수정하여 다시 컴파일 하지 않아도 보안관리가 가능하다.


웹 서버와 서블릿 컨테이너간 Life Cycle

  1. 웹 서버가 HTTP 요청을 받는다.
  2. 웹 서버는 요청을 서블릿 컨테이너로 전달한다.
  3. 서블릿이 컨테이너에 없는 경우, 서블릿 컨테이너는 서블릿을 동적으로 검색하여 컨테이너의 주소 공간에 로드한다.
  4. 컨테이너는 초기화를 위해 서블릿의 init() 메서드를 호출한다.
    (서블릿이 처음 로드될 때 한 번만 호출된다.)
  5. 컨테이너는 서블릿의 service() 메서드를 호출하여 HTTP 요청을 처리한다.
    (요청request의 데이터를 읽고, 응답response을 생성한다)
  6. 서블릿은 컨테이너 주소에 남아 있으며, 다른 HTTP 요청들을 처리할 수 있다.
  7. 웹 서버는 동적으로 생성된 결과를 올바른 위치로 반환한다.

*참고 - 톰캣에서 동작하는 서블릿의 Life cycle



위 과정에서 JVM의 역할은?

위 과정에서 JVM은 각각의 요청들을 Java의 '분리된 스레드' 내부에서 처리한다
이는 서블릿 컨테이너의 장점 중 하나이다.

각각의 요청된 서블릿은 HTTP 요청request에 응답response하는 특정한 요소들이 있는 자바 클래스이다.

즉, 서블릿 컨테이너 의 가장 중요한 기능은 요청을 올바른 서블릿에 전달해서 처리되도록하고, JVM이 해당 요청을 처리 한 후에는 생성된 결과를 올바른 장소에 동적으로 반환 해주는 것이다.



3. 서블릿이란?

웹 프로그래밍에서 사용자(클라이언트)의 요청을 처리하고,
결과를 다시 사용자(클라이언트)에게 전송하는 자바 프로그래밍 기술이다.


서블릿의 특징

  • 사용자(클라이언트)의 요청에 대해 동적으로 작동하는 웹 어플리케이션 이며,
    자바로 만든 웹 애플리케이션을 서블릿(Servlet)이라 부른다.
  • Java Thread를 이용하여 동작한다.
  • MVC 패턴에서 Controller로 이용된다.
  • HTTP 프로토콜 서비스를 지원하는 javax.servlet.http.HttpServlet 클래스를 상속받는다.
  • Servlet 클래스의 구현 규칙을 따른다.
  • 서블릿(Servlet)을 실행하려면 Java EE 규약에 따라 만든 서블릿 컨테이너가 있어야 한다.
  • HTML을 사용하여 요청에 응답하며 HTML 수정 시 서블릿을 다시 컴파일해야 하는 단점이 있다.
  • UDP보다 처리 속도가 느리다.


서블릿 Life Cycle

  1. 사용자(클라이언트)가 URL을 입력하면 HTTP Request를 Servlet Container로 전송한다.
  2. HTTP Request를 전송받은 Servlet Container는 HttpServletRequest, HttpServletResponse 두 객체를 생성한다.
  3. web.xml은 사용자가 요청한 URL을 분석하여 어느 서블릿에 대해 요청인지 찾는다.
  4. 해당 서블릿에서 service메소드를 호출한 후 클리아언트의 GET, POST 여부에 따라 doGet() 또는 doPost()를 호출한다.
  5. doGet() 또는 doPost() 메소드는 동적 페이지를 생성한 후 HttpServletResponse 객체에 응답을 보낸다.
  6. 응답이 끝나면 HttpServletRequest, HttpServletResponse 두 객체를 소멸시킨다.


참고 링크
Java Servlet Technology
What is Servlet Container?
[JSP] 서블릿(Servlet)이란?
Servlet
서블릿 컨테이너(Servlet Container) 란?

0개의 댓글