Servlet Thread - Serlvet 은 Runnable을 구현하나?

발생일: 2009.11.24

문제:
서블릿 스레드...
사용자 요청이 들어왔을 때, 서블릿 인스턴스의 스레드를 생성해서 처리한다고 알고 있었다...

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


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

어떻게 된 걸까...?


해결책:
잘못 알고 있었다.
애초부터 '서블릿 스레드'라는 건 잘못된 거였다.

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


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

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

참고:

*
덧붙여,
Servlet 의 인스턴스는 하나 밖에 생성이 안되지만, 실질적으로 싱글턴 패턴을 구현하고 있는 것은 아니다.
싱글턴과 같이 사용하지만 선언적으로 아닌 것이다.

또한, SingleThreadModel Interface 를 구현할 경우, 각 요청에 대해 여러 개의 서블릿 인스턴스를 생성하도록 할 수 있다.

참고 :





카테고리

분류 전체보기 (710)
About me. (6)
Daylogs (675)
영어공부 (0)
My works - 추억 (29)
비공개 (0)