2015년 8월 17일 월요일

servlet에 대한 고찰(쓰레드)

서블릿... 모두가 서블릿은 쓰레드로 처리 된다고 알고 있다. 

서블릿의 생명 주기는 아래와 같이 쓰레드와 동일하게 처리 된다라고 알고 있다. 
요청의 들어오면,
- 서블릿 인스턴스가 존재하지 않을 경우,
1. 서블릿의 인스턴스를 생성한다.
2. init() 메서드를 통해 초기화 한다.
- 서블릿 인스턴스가 존재할 경우,
- 각 요청에 대해 서블릿 인스턴스의 스레드를 생성해서 service() 메서드를 호출한다.
- 서블릿 인스턴스를 삭제하게 될 경우, destroy() 메서드를 실행한다.


'서블릿 인스턴스의 스레드'를 생성해서 service() 메서드를 호출한다...
아무리 라이브러리를 까서 서블릿 API 를 아무리 뒤져봐도 Servlet 클래스가 Thread 를 상속받거나 Runnable 을 구현하는 게 보이지 않는다.

애초부터 서블릿은  쓰레드로 구현된 것이 아닌 것이였다. 

서블릿 인스턴스의 스레드를 생성하는 게 아니었다.


요청이 들어오면 WAS(Web Application Server)에서 스레드를 생성하여
서블릿 인스턴스의 service() 메서드를 실행한다.

즉, 생성되는 스레드는 WAS 의 쓰레드였던 거다.

WAS의 쓰레드 풀을 이용하여 쓰레드를 생성하고 해당 쓰레드에 서블릿을 할당하여 싱글톤의 servlet 클래스의 service메쏘드를 실행하여 서블릿이 쓰레드로 실행되도록 한 것이였다. 

댓글 없음:

댓글 쓰기