Sevlet 작동 순서, 라이프사이클, 선처리와 후처리

Servlet 작동 순서

클라이언트에서 Servlet요청이 들어오면 서버에서는 Servlet컨테이너를 만들고 요청이 있을 때마다 스레드가 생성된다. MultiThread를 사용하면 다른 CGI(Common Gateway Interface)언어들에 비해 서버 부하가 적게 발생하기에 속도가 빠르다.(서버의 부하가 안 걸리는 건 아님)
따라서 서버를 효율적으로 운영해나갈 수 있다.

Servlet 라이프사이클(생명주기)

Servlet의 사용도가 높은 이유는 빠른 응답 속도때문이다.
Servlet은 최초 요청 시 객체를 만들어져 메모리에 로딩되고 이후 요청 시에는 기존의 객체를 활용하게 됨으로 동작 속도가 빠르다.
Service()는 doGet, doPost가 없으면 service 메소드가 실행된다.
같이있으면 Service 메소드 롤백으로 들어온다.
doGet, doPost는 둘 중에 하나만 실행된다.

출력결과 init은 요청 시 한번만, doGet은 요청 시 계속 실행

Servlet 선처리, 후처리

Servlet의 라이프 사이클 중 init()과 destroy() 메소드와 관련하여 선처리(init()전)와 후처리(destroy()후) 작업이 가능하다. @ : annotation
PostConstruct: 선처리로 메소드를 선언해주면 init메소드를 호출하기 전에 한번 실행됨
PreDestory : 후처리로 메소드를 선언해주면 그 메소드가 마지막에 한번 실행됨
(init, destroy처럼 슈퍼클래스에서 오버라이드하는 것이 아니다. 내가 임의로 만든 다음에 어노테이션을 사용해서 이 메소드가 선처리/후처리가 되는 것이라고 해주는 것이다.)

출력결과 init이 호출되기 전에 initPostConstruct가 호출되었고
destroy가 호출된 후에 destroyPreDestroy가 호출되었다는 것을 볼 수 있다.


출처
Seoul Wiz, 신입SW인력을 위한 실전 JSP Servlet 동영상과정, https://www.youtube.com/watch?v=APJAJeePl4g&list=PLYBmkgNU_x7Zj0nCzt5D0qV33C_rU1NK2