최근 스프링을 공부하면서 JSP는 코드를 수정한 후 빌드를 다시하지 않아도 사용할 수 있다는 개념을 알게 되었다. 즉 이미 배포 되어 있는 서비스에 JSP가 변경되더라도 서버를 재시작하는 재배포의 과정 없이 JSP파일만 수정해주면 바로 서비스에 적용이 가능하다는 것이다. JSP에도 java 코드가 있는데 어떻게 컴파일을 하지 않고 동작하는 것인지 의문이 생겨서 정리해보았다.
Servlet 과 JSP 의 컴파일 시점 비교
서블릿은 컴파일하면 class 파일이 생성되어 배포되고 런타임 시에 WAS에 의해 동작하게 된다. JSP파일은 빌드시에 컴파일되지 않고 그 파일 그대로 WAR에 포함되어 배포된다. 그렇다면 JSP의 Java 코드는 어떻게 동작하게 될까? JSP는 런타임 시에 컴파일이 이루어진다. 최초로 특정 JSP 파일을 필요로하는 요청이 들어오면 WAS가 해당 JSP파일을 컴파일하여 객체로 생성하고 반환해준다. 그 후에 요청에는 다시 컴파일하지 않고 이전에 생성했던 객체를 사용한다.
JSP파일이 수정된다면?
컴파일된 JSP의 객체정보에 컴파일된 시간을 기록한다. JSP파일의 변경시간과 비교하여 파일이 변경되었다고 판단되면 재컴파일하여 요청에 응답한다.