티스토리 뷰

donaricano-btn
반응형

우선 지난 시간에 배웠던 Servlet의 동작 순서를 다시한 번 복습 하겠습니다.


여기서 컨테이너는 매핑된 서블릿을 찾아서 service() 메소드를 호출한다고 했습니다. 그런데 어떤 클래스의 메소드를 호출하려면 그 클래스의 instance가 존재해야 합니다. 그렇다면 servlet의 instance가 언제 생성이되는지 궁금해 집니다.


결론부터 이야기 하면 ‘클라이언트로 부터 최초 요청을 받았을 때’ 입니다. 컨테이너는 cilent의 최초 요청이 있을 때, 매핑된 servlet 클래스 파일을 찾아서 로딩하게 됩니다. 그리고 servlet 객체를 생성하고 초기화를 담당하는 init() method를 호출하게 됩니다.


그런데 이렇게 컨테이너에 최초 요청이 들어올 때 클래스를 로드하고 생성자와 초기화 메소드를 호출하게 되면 최초에 접속하는 클라이언트는 시간적으로 손해를 보게 됩니다. 또 개발자가 먼저 로드시키고 싶은 서블릿 클래스가 존재하기도 할 수도 있습니다.


그런 경우에 load-on-startup이라는 요소를 사용할 수 있습니다. 배포 서술자나 어노테이션을 통해 이 값을 0보다 큰 양의 정수로 지정하게 되면 컨테이너가 처음 시작할 때(웹 애플리케이션 배포 시에) 이 값의 순서대로 servlet 클래스가 로드되게 됩니다.


이렇게 클래스가 로드되고 생성자를 호출해서 servlet class의 객체(object)를 생성했습니다. 그러나 서블릿이 만들어 질 때 반드시 수행되어야 하는 작업이 있을 수 있습니다. 가령 초기화 작업 같은 것입니다. 사실 지금 상태의 servlet instance는 컨테이너로부터 서블릿 설정정보나 웹 애플리케이션 설정 정보를 읽어올 수도 없습니다. 그래서 컨테이너는 instance 생성 이후에 init() method를 호출해 해당하는 servlet을 초기화 시킵니다. 개발자는 이 init() method를 override 해서 서블릿 최초 생성 시에 필요한 코드를 작성할 수 있습니다. 이 때 init() 메소드는 ServletConfig 라는 객체를 인자로 받습니다. Servlet과 웹 애플리케이션 설정 정보를 담고 있는 객체인데 이 ServletConfig 객체에 대해서는 뒷장에서 살펴 보도록 하겠습니다.


초기화가 된 서블릿은 이제 컨테이너에서 전달되는 요청이 있을 때  service() method가 호출 됩니다. service() method 는 request 요청에 알맞은 method 가령 doGet()이나 doPost()같은 method를 찾아서 호출합니다. 그리고 웹 애플리케이션이 종료되거나 서블릿이 오랜시간 사용되지 않으면 컨테이너는 서블릿을 소멸시키게 됩니다. 이 때 호출되는 것이 destroy() method 입니다. 이 method에는 servlet이 종료될 때 필요한 작업을 override 할 수 있습니다.


이렇게 servlet의 lifecycle을 알아 봤습니다. 그런데 servlet은 최초 요청이 있을 때 그 instance를 생성한다고 설명을 드렸습니다. 그리고 지난시간에 컨테이너는 요청마다 새로운 thread를 만들거나 thread pool에서 thread를 가져와서 service() method를 호출한다고 했습니다. 다시 말해서 컨테이너는 서블릿 하나에 대한 다수 요청을 처리하기 위해서 다수의 thread를 실행하지만 다수의 instance를 만들지는 않는다는 것입니다. 같은 서블릿에 대한 두가지 요청이 동시에 발생했을 경우에 실제 동작 순서를 한 번 보도록 하겠습니다.


client 두 곳에서 요청이 들어오면 컨테이너는 thread 두 개를 생성하고 각각 thread에서 request 객체와 response 객체를 생성해 mapping 된 servlet에 service() 메소드를 호출합니다.



반응형
donaricano-btn
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함