서블릿 컨테이너를 알기전에 웹서버에 대한 이해가 먼저 필요합니다.
웹서버에 대해서 알아보겠습니다.
- 웹 서버는 데이터를 전송하기 위해 HTTP 프로토콜을 사용합니다.
- 일반적인 상황에서 사용자는 브라우저에 URL(https://velog.io/@han_been)을 입력합니다.
- 그리고 사용자는 웹페이지를 얻게 됩니다.
- 웹서버가 하는 일은 웹페이지를 사용자에게 전송하는 것입니다.
서버에 만들어진 서블릿이 스스로 작동하는 것이 아니라, 서블릿을 관리 해주는 것이 필요한데, 이러한 역할을 하는 것이 바로 서블릿 컨테이너 입니다.
즉, 서블릿을 '요구사항 명세서'라고 표현한다면, 서블릿 컨테이너는 그 명세서를 보고 개발하는 '개발자'입니다.
서블릿 컨테이너는 Clinet의 Request를 받아주고 Response할 수 있게, 웹 서버와 소켓을 만들어 통신합니다.
대표적으로 무료 서비스인 Tomcat(톰캣)이 있습니다.
톰캣은 웹 서버와 소켓을 만들어 통신하며 JSP(java server page)와 Servlet이 작동할 수 있는 환경을 제공합니다.
- 일반적으로 사용자는 서버에서 오직 정적인 웹페이지만을 요청할 수 있음
- 만약 사용자가 본인의 입력을 기초로한 웹페이지를 자유롭게 얻고 싶다면 이 방법은 제한적임
- 서블릿 컨테이너는 서버 사이드에서 동적으로 웹페이지를 생성하기 위해 자바를 사용
- 때문에 웹서버와 서블릿들이 상호작용할 때 서블릿 컨테이너는 필수적
Servlet에 대한 기초가 궁금하시다면 CLICK!!
1. 웹서버와의 통신 지원
- 서블릿 컨테이너는 서블릿과 웹서버가 손쉽게 통신할 수 있게 해주어, 소켓을 만들고 listen, accept 등을 API로 제공하여 복잡한 과정을 생략할 수 있게 해준다.
2. 서블릿 생명주기(Life Cycle) 관리
- 서블릿 컨테이너는 서블릿의 탄생과 죽음을 관리한다.
- 서블릿 클래스를 로딩하여 인스턴스화
- 초기화 메소드를 호출
- 요청이 들어오면 적절한 서블릿 메소드를 호출합니다.
- 서블릿 소멸 시 Garbage Collection(가비지 컬렉션)을 진행
서블릿 생명 주기(Servlet Life Cycle)가 궁금하시다면 CLICK!!
3. 멀티쓰레드 지원 및 관리
- 서블릿 컨테이너는 요청이 올 때 마다 새로운 자바 쓰레드를 하나 생성
- HTTP 서비스 메소드를 실행하고 나면, 쓰레드는 자동으로 소멸
- 원래는 쓰레드를 관리해야 하지만 서버가 다중 쓰레드를 생성 및 운영해주니 쓰레드의 안정성에 대해서 걱정하지 않아도 된다.
4. 선언적인 보안 관리
- 서블릿 컨테이너를 사용하면 개발자는 보안에 관련된 내용을 서블릿 또는 자바 클래스에 구현해 놓지 않아도 됩니다.
- 일반적으로 보안관리는 XML 배포 서술자에 다가 기록하므로, 보안에 대해 수정할 일이 생겨도 자바 소스 코드를
수정하여 다시 컴파일 하지 않아도 보안관리가 가능합니다.
- 웹서버가 HTTP 요청을 받는다
- 웹서버는 요청을 서블릿 컨테이너로 전달합니다.
- 서블릿이 컨테이너에 없다면, 서블릿을 동적으로 검색하여 컨테이너의 주소 공간에 로드한다
- 컨테이너가 서블릿의 init() 메소드를 호출하면, 서블릿이 초기화된다
: 서블릿이 처음 로드됬을 때 한번만 호출- 컨테이너가 서블릿의 service() 메소드를 호출하여 HTTP 요청을 처리한다.
(요청의 데이터를 읽고, 응답을 만들어낸다)
서블릿은 컨테이너 주소에 남아있고, 다른 HTTP 요청들을 처리할 수 있습니다.- 웹서버는 동적으로 생성된 결과를 올바른 위치에 반환한다.
서블릿 컨테이너 의 가장 중요한 기능은 요청을 올바른 서블릿에 전달해서 처리되도록하고, JVM이 해당 요청을 처리 한 후에는 생성된 결과를 올바른 장소에 동적으로 반환 해주는 것이다.
님 짱..!