
servlet을 instance 생성하여 method()를 실행해 주는 역할을 한다.
모든 method를 인식할 수 있는 것은 아니다.
우리가 직접 생성한 instance의 내용을 알고 우리가 호출 하는 것이 아닌 Container라는 App에서 처리하는 것이기 때문에 Container가 인식할 수 있는 약속에 의한 method()를 정의해 주어야 한다.
SERVLET LIFE CYCLE

º init() ⇒instance 생성을 생각하면 되고, 단 한번 호출되며, 초기화 작업을 해주며 instance null처리를 하지 않는다. Client 요청에 따라 Servlet 생성되고, Sevlet이 memory로 load될 때 실행 (web.xml 기준)
º service() ⇒ init()에서 instance 생성해 주었으니, method()만 계속해서 호출 후 response해 준다. Servlet이 수신한 모든 요청에 대해 실행 (각 Thread 당 실행)
º destroy() ⇒ Servlet class 수정 보완 후 compile을 할 경우 호출되며, init이 소멸한다.

client로 부터 request가 들어오면 process로 매번 대응하는 것이 아닌, thread가 호출된다.
Web Server는 HTTP 요청을 Web Container(Servlet Container)에게 위임
º web.xml ⇒ 어떤 URL과 Mapping되어 있는지 확인
º Client(browser)의 요청 URL을 보고 해당 Servlet을 실행(Thread 생성)
Web Container는 service() method 호출 전에 Servlet 객체 메모리 적재
º Web Container는 Servlet 찾고 컴파일(.class 파일)
º 컴파일(.class)된 파일을 메모리에 적재 (Servlet 객체 생성)
º 메모리 적재 시, init() 메소드 실행
Web Container는 요청이 올 때마다 Thread 생성
º 각 Thread는 단일 객체에 대해 service() method 호출
할당된 Thread는 doGet() 혹은 doPost() method를 실행한다.
해당 method의 값이 Return되면 destroy() method를 실행한다.
==> overhead 발생을 방지하기 위해 Thread Pool을 이용한다.