카테고리 없음

서블릿 컨테이너(Servlet Container) 란?

JUNGKEUNG 2024. 9. 8. 12:54
반응형

서블리 컨테이너를 알기 위해서는 먼저 웹 서버(Web Server) 가 뭐인지 알아야 한다. 

 

웹서버는 : 웹 페이지를 사용자에게 전송하는 서버이다.

  • 웹 서버는 데이터를 전송하기 위해 HTTP 프로토콜을 사용한다.
  • 일반적인 상황에서 사용자는 브라우저에 URL(https://wwww,naver.com)을 입력한다.
  • 그리고 사용자는 웹페이지를 얻게 된다.
  • 웹서버가 하는 일은 웹페이지를 사용자에게 전송하는 것한다.

 

서블릿 컨테이너란 ?

  • 서블릿 컨테이너
    : 서블릿들의 생성, 실행, 파괴를 담당한다.
    : 서블릿들을 위한 상자(Container)입니다.

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

즉, 서블릿을 '요구사항 명세서'라고 표현한다면, 서블릿 컨테이너는 그 명세서를 보고 개발하는 '개발자' 라고 할 수 있다.

서블릿 컨테이너는 Clinet의 Request를 받아주고 Response할 수 있게, 웹 서버와 소켓을 만들어 통신한다.

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

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

  • 일반적으로 사용자는 서버에서 오직 정적인 웹페이지만을 요청할 수 있음
  • 만약 사용자가 본인의 입력을 기초로한 웹페이지를 자유롭게 얻고 싶다면 이 방법은 제한적임
  • 서블릿 컨테이너는 서버 사이드에서 동적으로 웹페이지를 생성하기 위해 자바를 사용
  • 때문에 웹서버와 서블릿들이 상호작용할 때 서블릿 컨테이너는 필수적

 

 

 

서블릿 컨테이너의 역할은 ?

1. 웹서버와의 통신 지원

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

 

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

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

 

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

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


4. 선언적인 보안 관리

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

 

웹 서버와 서블릿 컨테이너는 어떻게 요청을 처리할까 ? 

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

 

이 과정에서 JVM의 역할은?

  • 각 요청들을 '분리된 스레드' 내부에서 처리한다
  • 즉, 서블릿을 사용하는 것은 JVM이 각 요청을 분리된 자바 스레드 내부에서 처리하도록 하는 것
  • 이는 서블릿 컨테이너의 주요 장점 중 하나이다.
  • 각 서블릿은 HTTP 요청에 응답하는 특정한 요소들이 있는 자바 클래스이다.
  • 대부분의 사례에 서블릿 컨테이너는 하나의 JVM에서 동작하지만 컨테이너가 여러개의 JVM들을 필요로하는 문제들이 존재하기도 한다.

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

 

 

총 정리

-------------------------------------------------------------------------------

서블릿은 클라리언트 요청을 처리하고 응답을 생성하는 서버 측 프로그램이다.  생성, 초기화(init), 요청(service), 소멸(destory)를 사용한다. 그리고 서블릿 컨테이너는 모두가 알고 있는 tomcat이 가장 많이 사용 되고 있다. 동적인 웹 콘텐츠를 생성하는 중요한 역할을 하고 있으며 이를 관리하는것이 서블릿 컨테이너이다. 

서블릿은 독립적으로 실행되지 않으며, 항상 서블릿 컨테이너 안에서 실행이 되고 서블릿 컨테이너는 서블릿이 요청을 처리할 수 있도록 환경을 제공하고, HTTP 요청을 서블릿으로 전달한 후 서블릿의 응답을 클라이언트에게 반환한다.

 

참고자료

------------------------------------------------------------------------------------

https://www.youtube.com/watch?v=h0rX720VWCg

https://code-lab1.tistory.com/210

https://velog.io/@yoho98/%EC%84%9C%EB%B8%94%EB%A6%BFServlet%EA%B3%BC-%EC%84%9C%EB%B8%94%EB%A6%BF-%EC%BB%A8%ED%85%8C%EC%9D%B4%EB%84%88Servlet-Container-y88kny7g

https://maenco.tistory.com/entry/%EC%84%9C%EB%B8%94%EB%A6%BFServlet-%EA%B3%BC-%EC%84%9C%EB%B8%94%EB%A6%BF-%EC%BB%A8%ED%85%8C%EC%9D%B4%EB%84%88Servlet-Container