“안녕하세요. 00 님!!!” 과  JSP 동작원리에 대하여

 

모든 언어의 시작은 “Hello World” 부터 시작이니 저도 역시 Hello World 부터 시작을 하겠습니다.  시작이 절반이라는 말처럼 말입니다.

 

1. 안녕하세요. 00 님!!!


ex.jsp source
<%@ page contentType="text/html;charset=euc-kr" %>
<HTML>
<BODY>
안녕하세요.
<b><%
String name = request.getParameter("NAME");
if( name == null ) name = " 손";
out.println(name);
%>님 !!!
</b>
</BODY>
</HTML>

 

http://localhost:3030/work/ex.jsp?NAME=손상모
http://localhost:3030/work/ex.jsp

 

2. JSP 동작원리에 대하여

JSP ( Java Server Page )는 용어에서 말해주는 것처럼 Dynamic Page에 대한 처리 시에 사용되는 Server Side Script 입니다. 

현재 많이 사용되고 있는 CGI, ASP, PHP와 비슷하다고 생각하면 됩니다.

그럼 Java Code에 의하여 처리되는 내부 원리에 대하여 자세히 이야기 하겠습니다.


 

1) HTTP Server 가 JSP 에 대한 요청을 처리한다.

2) 해당 요청은 JSP, Servlet Container ( Tomcat, Resin, JRUN 등)에 전달된다.

3) Container 는 Page Complier Servlet 을 호출하여 처리한다.

4) Page Complier Servlet 은 해당 JSP Code를 Complie 하여 Page Servlet Code 생성한다.

5) 생성된 Page Servlet Codejava complier에서 요청하여 java class(.class) 파일을 생성한다.

6) 생성된 class 파일은 JSP Container의 클래스 경로의 지정된 디렉토리에 저장한다.

 

이와 같이 요청된 JSP Code는 JSP Container와 복잡한 Complie 과정이 필요합니다. 그래서 새롭게 작성하거나 수정된 JSP Code의 속도가 느린 이유입니다.  Perl, PHP, ASP를 사용한 개발자들에게는 이와 같이 Complie 하는 시간이 조금 부담이 될 수 있을 것 같군요. 

 

여기서 4) 의 과정을 좀 더 자세히 이야기를 하면

(1)        JSP Container와 Page Complier Servlet은 해당 JSP 파일에 대한 Timestamp를 관리하여 변화여부를 체크 합니다.  해당 JSP 파일이 변화가 없다면 Complie 과정이 없이 바로 출력하기에 빠른 처리 속도에 의하여 처리됩니다. 여기서 Servlet Code가 Memory에 Load 되어 있다면 해당 Memory에서 직적 실행이 되기에 더욱 빠른 처리속도를 기대할 수 있습니다.  이와 같은 처리과정 때문에 자주 호출되는 Page의 경우는 더욱 빠른 처리 결과를 기대할 수 있게 되는 것입니다.

(2)        Complie 과정에 대하여 좀 더 자세히 이야기를 하면
해당 JSP Page를 죽 훑어가면서 Tag를 찾고 Parsing하여 해당 Content로 출력할 수 있는 Java Code를 바꿉니다.
이때 원래의 페이지의 정적 HTML는 수정되지 않은 채로 출력 스트림으로 기록되는 자바문자열로 JSP Tag중 Bean Tag 는 해당 객체와 프로퍼티 호출문으로 바뀌고, JSP Script Element는 그대로 혼합된 Code를 생성합니다. 

 

Dynamic Content 출력시에 전용 Tag 와 Script 을 사용하는 파일은 해당 document가 요청될 때마다 인터프리터에 의해 분석되어야 하고 이것이 가져오는 overhead는 상당합니다. 그러나 필요할 때에만 파일분석을 수행하는 JSP에선 볼 수 없는 것이지요. 그러기에 다른 Script 언어에서는 볼 수 없는 빠른 속도를 볼 수 있습니다.

 

강좌의 reference

-  Web Development with Java Server Pages. by Duane K. Fields & Mark A. Kolb ,곽용재편역 ; InfoBook, Manning

-  http://java.sun.com/products/jsp/tags/tags.html

-  http://myhome.shinbiro.com/~jimmy/home.htm