JSP(JavaServer Pages) 라이프사이클은 JSP 페이지가 생성된 시점부터 소멸될 때까지의 전체 과정을 의미합니다. 서블릿(Servlet) 라이프사이클과 매우 유사하지만, JSP를 서블릿으로 변환·컴파일하는 추가 단계가 필요하다는 점이 차이입니다.
JSP가 거치는 4가지 단계
JSP는 다음과 같은 경로를 순서대로 거치며 동작합니다.
- 컴파일(Compilation)
- 초기화(Initialization)
- 실행(Execution)
- 정리(Cleanup)
이 네 단계는 서블릿 라이프사이클의 주요 단계와 거의 동일하며, 각 단계별로 자세히 살펴보겠습니다.
1. JSP 컴파일 (Compilation)
브라우저가 JSP 페이지를 요청하면 JSP 엔진은 먼저 해당 페이지를 컴파일해야 하는지 여부를 확인합니다. 페이지가 한 번도 컴파일된 적이 없거나, 마지막 컴파일 이후 JSP 파일이 수정되었다면 JSP 엔진은 페이지를 새로 컴파일합니다.
컴파일 과정은 크게 세 단계로 이루어집니다.
- JSP 파싱(Parsing)
- JSP를 서블릿으로 변환
- 변환된 서블릿 컴파일
2. JSP 초기화 (Initialization)
컨테이너가 JSP를 로드하면, 어떤 요청을 처리하기 전에 먼저 jspInit() 메서드를 호출합니다. JSP에 특화된 초기화 작업이 필요하다면 아래와 같이 jspInit() 메서드를 오버라이드하여 구현할 수 있습니다.
public void jspInit() {
// 초기화 코드...
}초기화는 일반적으로 한 번만 수행되며, 서블릿의 init 메서드와 마찬가지로 데이터베이스 연결 설정, 파일 열기, 조회용 테이블 생성 등의 작업을 jspInit 메서드에서 처리하는 것이 일반적입니다.
3. JSP 실행 (Execution)
실행 단계는 JSP가 소멸될 때까지 발생하는 모든 요청과의 상호작용을 포함합니다.
브라우저가 JSP를 요청하고 해당 페이지가 이미 로드 및 초기화된 상태라면, JSP 엔진은 JSP 내부의 _jspService() 메서드를 호출합니다.
_jspService() 메서드는 아래와 같이 HttpServletRequest와 HttpServletResponse를 매개변수로 받습니다.
void _jspService(HttpServletRequest request, HttpServletResponse response) {
// 요청 처리 코드...
}_jspService() 메서드는 요청이 들어올 때마다 호출되며, 해당 요청에 대한 응답을 생성하는 역할을 담당합니다. 또한 GET, POST, DELETE 등 HTTP의 일곱 가지 메서드에 대한 응답 처리 역시 이 메서드에서 수행됩니다.
4. JSP 정리 (Cleanup)
정리 단계, 즉 소멸(Destruction) 단계는 JSP가 컨테이너에 의해 더 이상 사용되지 않고 제거되는 시점을 의미합니다.
jspDestroy() 메서드는 서블릿의 destroy 메서드에 해당하는 JPS 버전이라고 할 수 있습니다. 데이터베이스 연결 해제나 열려 있는 파일 닫기와 같은 리소스 정리 작업이 필요하다면 jspDestroy 메서드를 오버라이드하여 구현하면 됩니다.
public void jspDestroy() {
// 정리(cleanup) 코드 작성
}