서블릿 동작 원리 이해 및 공부, 서블릿의 라이프 사이클 :: 개발/일상_Mr.lee

서블릿 동작 원리 이해 및 공부, 서블릿의 라이프 사이클

Posted by Mr.mandu.
2016. 4. 6. 08:21 개발/web, html5,jsp



서블릿의 동작 원리

톰캣이 구동되면 자바가상머신(JVM)이 구동되어 자바 문법을 따르는 서블릿을 처리할 수 있는 환경을 제공하여 서블릿 컨테이너라는 별칭이 붙여있다고 생각하시면 됩니다.

 - 다음의 그림으로 설명하겠습니다.









1. 브라우저에서 서블릿을 요청합니다.

2. 그러면 WAS안에 웹 서버가 서블릿 요청을 인식하여 서블릿 컨테이너에게 서블릿을 수행하도록 넘겨줍니다.

3. 서블릿은 스레드를 기동하여 해당 서블릿 객체를 생성하여 이를 수행합니다.

4. 서블릿 객체의 작업이 종료되면 기동되었던 스레드가 종료됩니다.

5. 서블릿 수행 결과가 웹 서버에 전송됩니다.

6. 이를 클라이언트에 전송하게 됩니다.




서블릿 라이프 사이클

서블릿이 다른 웹 기술보다 주목을 받게 된 이유는 수행 속도가 빠르다는 점 입니다.

이유 : 두 번째 이상의 요청이 첫 번째 요청인 경우와 다르게 처리되기 때문입니다.


서블릿이 첫 번째 요청인 경우에는 서블릿 클래스를 찾아 메모리에 로딩하여 인스턴스(객체)를 생성합니다. 이때 생성된 서블릿 인스턴스는 메모리에 계속 남아 있게 되므로 이후부터는 서블릿이 호출되어도 서블릿 인스턴스가 다시 생성되지 않고 이미 메모리에 로딩된 서블릿으로부터 서비스만 받기 때문에 수행 속도가 빠릅니다.

반명에 PHP나 ASP는 요청될 때마다 인터프리터 방식으로 코드가 재해석되기 때문에 수행 속도가 느립니다.







우선 객체가 생성되면서 init() 메소드가 단 한번 호출됩니다. 

init()메소드에서는 주로 초기화 작업을 합니다.


그 이후, 클라이언트의 요청이 있을 때 doGet() 혹은 doPost() 메소드가 실행됩니다. 

여러 클라이언트가 동시에 요청을 하더라도 스레드가 생성되므로 수행 속도가 빠릅니다.


서블릿이 더이상 서비스를 하지 않을 경우 destory()메소드가 호출되는데 

예를 들어 서블릿 컨테이너가 종료(톰캣 재가동)되거나 서블릿 내용이 변경되어 다시 컴파일해서 클래스 파일이 바뀌는 경우입니다.