54_[jsp servlet]서블릿 동작 원리와 라이프 사이클
서블릿 동작 원리와 라이프 사이클
서블릿의 동작 원리와 라이프 사이클에 대해서 알아보기 전에, 이에 대한 이해를 조금 더 빠르게 하기 위해서 웹 서버와 WAS 간의 구성/관계에 대해서 살펴보자
📌웹 서버와 WAS 간의 관계📌
웹 서버와 웹 어플리케이션 서버간의 관계
참고: https://gap85.tistory.com/entry/WAS-와-웹서버-의-차이
저번 시간에 정리했던 것에 더해서 전반적인 구조적 관계를 살펴보자
먼저 웹을 구조적으로 나누어본다면
-
클라이언트 : 사용자
-
서버 : 사용자의 요청을 받아서 처리하고, 그 결과를 페이지로 반환해주는 역할
로 나누어 볼 수 있다.
그리고, 구조적으로, 서버는
웹 어플리케이션 서버 내부에 웹 서버와 웹 컨테이너가 포함되어 있다!
저번에 정리해두었던 관련 개념-
- 웹 서버 : 사용자로부터 요청을 받아서, 그 요청에 대한 결과를 반환해주려는 서버
- 웹 어플리케이션 서버 WAS: 웹 서버로부터 전달받은 요청, 정보에 대한 비즈니스 로직 등의 로직을 데이터베이스와 연계하여 처리한 결과값을 웹 서버에 전달해주는 서버
- 웹 컨테이너 : jsp, servlet의 구동 환경을 제공해주는 틀
- -서블릿 컨테이너 : 서블릿 관련 객체를 관리
- 서블릿 생명주기 관리(생성, 초기화, 소멸), HttpServletRequest/HttpServletResponse 객체 생성, 요청에 따라 멀티 스레딩 구성(톰캣이 관리해줌), 전송 방식에 따라 동적으로 페이지를 구성하는 작업 진행, 정적 로딩 처리 -JSP 컨테이너 : jsp 파일 ▶️ java 코드 ▶️ class 파일 ▶️ 메모리 공간에 로드한 후 실행가능하도록 만드는 작업(Servlet화) 진행, 처리 결과를 HTML 파일로 만들어주는 작업 진행, 동적 로딩 처리
🌹 정적로딩과 동적로딩 🌹
https://ubange.tistory.com/223
정적로딩과 동적로딩은 각각 static 변수와 인스턴스 변수를 떠올리면 될 것 같다!
-정적로딩: 프로그램이 실행될 때 시작부터 메모리에 로딩되는 방식
-동적로딩: 실행될 때마다 메모리에 올라가고, 필요없어지면 메모리에서 해제되는 방식
▶️ 인터프리터 언어(스크립트 언어) 동작 방식과 유사!!
웹 서버와 WAS 의 차이점
서블릿의 동작 원리
서블릿의 동작원리
위에서 설명했던 웹 서버와 WAS 간의 구조상 관계가 바로 이 동작원리와 직결된다!
서블릿파일을 만들어둔 상태에서, 클라이언트로부터 요청을 받았을 때의 서블릿이 어떻게 동작하는지를 아래와 같이 각 단계별로 나누어 생각해보자
- 클라이언트가 어떤 동작을 하게 되면, 브라우저로부터 서블릿에 대한 요청이 들어온다(to 웹서버)
- 웹서버는 요청받은 서블릿을 “같은 WAS 내에 있는 서블릿 컨테이너”에 전달
- 서블릿 컨테이너에 전달된 서블릿은 스레드를 기동시키고, 서블릿 객체를 생성
- 서블릿 수행
- 서블릿 객체 작업 종료(if 그렇다면~ 6단계로~~)
- 기동되었던 스레드 종료
- 서블릿 수행 결과가 웹 서버에 전송됨
- 웹 서버에 전송된 수행결과가 클라이언트에 전송됨
서블릿의 라이프사이클
- 서블릿의 라이프사이클은 이전에 서블릿이 Event Driven Programming 방식으로 수행된다는 점에서 짧게 소개한 적 있다! 거기에 4~6과정을 엮어서 정리해주자!
- 먼저, 앞에서 설명한 과정에 의해서, 브라우저의 요청을 받은 웹 서버가 전달받음
- 웹 서버는 서블릿을 서블릿 컨테이너에 전달
- 서블릿 컨테이너는 스레드에 대해서 스레드가 기동되면서 서블릿 객체를 생성
- 서블릿 객체가 생성된 후 , init() 메서드가 최초 한번만 생성된다
- 서블릿 객체는 메모리에 속해있어서, 요청될때마다, 서비스를 제공하는 요청 메서드인 doGet 혹은 doPost가 호출된다(그 이후는 위의 6~8 단계가 알맞게 작동됨)
- 하지만, 만약 톰캣을 해제 or 서블릿 컨테이너 종료(톰캣 재가동) or 서블릿 내용 변경이 발생한다면 , 자원을 해제하는 destroy()가 호출됨
https://hy6219.github.io/TIL-Today-I-Learned-/JSP Servlet/Basic/서블릿 기본 구조.html
서블릿의 라이프 사이클
-
서블릿이 ASP나 PHP보다 수행 속도가 빠른 이유 ASP나 PHP보다 수행 속도가 빠른 이유
📌**서블릿**은 **객체가 한 번 생성되면 메모리에 계속 남아 있어서, 이후에 로딩된 서블릿으로부터 서비스만 받으면 되는 방식**
⚠️ASP, PHP는 인터프리터 방식으로 코드가 재해석되어, 수행속도가 느림!
💬 인터프리터 방식?💬
- Duck Typing: 어떠한 변수나 객체가 메서드 등에 의해 실행되는 형태에 따라 적합성이 판단되는 것 (. ↔️ structural typing: 정적인 언어- 예 : 자바)
✏️ 보안보다는, 편의성(convenience)에 치중되어 있음!
예) 자바스크립트
const welcome = 'welcome';//String
const num1 = 10; //integer
const welStr = `${welcome} your ${num1} th visit!`;//String
const fNum = 5.1; //float
ref: https://en.wikipedia.org/wiki/Duck_typing
https://jins-dev.tistory.com/entry/Compiler-와-Interpreter-의-개념과-차이점