본문 바로가기
웹 프로그래밍 기초/자바기반의 웹&앱 응용SW 개발자

자바기반의 웹&앱 응용 SW개발자 양성과정 38일차 -60

by oncerun 2020. 4. 22.
반응형

 

서블릿 컨테이너란?

 

서블릿 컨테이너를 알기 전 웹서버에 대해 잠시 짚고 넘어가야 합니다. 웹서버는 데이터를 전송하기 위해

HTTP 프로토콜을 사용합니다. 사용자는 웹브라우저에 URL을 요청하여 웹페이지를 얻게 됩니다.

웹서버가 하는 일은 웹페이지를 사용자에게 전송하는 일뿐입니다. 변화하는 것은 HTTP 프로토콜에서 형식이 지정되는 요청과 반응입니다.

 

서블릿 컨테이너는 서블릿들의 생성, 실행 , 파괴를 담당합니다.

 

사용자는 웹서버에서 오직 정적인 웹사이트만 요청할 수 있었습니다. 단지 조회를 하기 위한 기사를 읽기 위한 그러한 페이지였죠, 만약 사용자가 회원가입과 같은 입력값을 기초로 한 웹페이지를 보고 싶다면 정적인 웹페이지에서는 불가능합니다. 서블릿 컨테이너는 서버 사이드에서 동적으로 웹페이지를 생성하기 위해 JAVA를 사용하는 것입니다.

따라서 웹서버와 서블릿들이 상호작용할 때 서블릿을 관리하는 서블릿 컨테이너는 필수적인 부분입니다.

 

서블릿은 javax.servlet.package에 정의된 인터페이스입니다. 이 인터페이스는 서블릿의 LifeCycle을 위한 3가지 필수적인 메서드들을 정의합니다. 

1. init()

2. service()

3. destory()

이러한 메서드들은 모든 서블릿에서 구현되고 서버에 의해 호출됩니다.

 

1. init() 

init() 메서드는 서블릿 생명 주기중 초기화 단계의 호출됩니다. javax.servlet.ServletConfig 인터페이스를 구현하는 객체가 전달되며, 이를 통해 서블릿이 웹 애플리케이션에서 초기화 매개변수에 접 글 할 수 있도록 합니다.

 

2.service()

service()는 초기화 이후 각각의 요청들이 왔을 때 호출되는 메서드입니다. java의 main메서드랑 비슷한 부분이 있습니다.

각각의 요청들이 하나씩 처리하게 되면 사용자는 무한히 기다릴 수도 있으므로 별도로 나누어진 스레드를 사용해 요청을 처리합니다. 웹 컨테이너는 모든 요청에 대해 서블릿의 service() 메서드를 요청합니다. service() 메서드는 요청의 종류를 판별하고 요청을 처리할 적절한 doget, dopost의 메서드로 전달합니다.

 

3.destroy()

destroy메서드는 서블릿 객체가 파괴되어야 할 때 호출됩니다. 해당 서블릿이 가지고 있던 자원을 해제합니다.

 

서블릿 객체의 생명주기에서 서블릿 클래스가 클래스 로더에 의해 컨테이너에 동적으로 로드됩니다.

각 요청은 자체적인 스레드를 사용하며, 서블릿 객체는 동시에 여러 개의 스레드를 제공할 수 있습니다.

파괴가 되어야 할 때는 JVM의 GC로 처리되어야 합니다.

 

 

서블릿 컨테이너와 웹서버의 동작

 

1. 웹서버가 사용자에게 HTTP 요청을 받습니다.

 

2. 웹서버는 요청을 서블릿 컨테이너로 전달합니다.

 

3. 서블릿이 컨테이너에 존재하지 않는다면, 서블릿을 DD를 참고하여 검색하며, 컨테이너의 주소 공간에 로드합니다.

 

4. 컨테이너가 호출된 서블릿의 init() 메서드를 호출하면, 서블릿이 초기화됩니다.(서블릿이 처음 로드됐을 때 한 번만 호출됩니다.)

 

5. 컨테이너가 서블릿의 service() 메서드를 호출하여 HTTP 요청을 처리합니다. 서블릿은 컨테이너 주소에 남아있으며 다른 HTTP 요청을 처리할 수 있습니다.

 

6. 웹서버는 생성된 동적 웹페이지를 반환합니다.

 

 

JVM의 역할

 

서블릿을 사용하는 것은 JVM이 각 요청을 분리된 자바 스레드 내부에서 처리하도록 하며, 이는 서블릿 컨테이너의 주요 장점 중 하나입니다.

반응형

댓글