본문 바로가기
Programming/Languages (Java, etc)

[JSP] jsp를 모듈화할 때 액션태그를 써야하는 이유

by kghworks 2022. 11. 13.

목차

  • include 지시어와 액션 태그
  • jsp 런타임에서 차이점

 

<%--지시어--%>
<%@include file="foo.jsp"%>

<%--액션태그--%>
<jsp:include page="foo.jsp"/>

 jsp 페이지들을 모듈화 하고자 할 때 쓰는 방법이 include입니다. 방법은 2가지가 있습니다. 지시어를 사용하는 방법과 액션 태그를 사용하는 방법인데요. 둘의 차이를 알아보고 적절한 사용방법을 알아보겠습니다.


include 지시어와 액션태그

 

include 지시어

<%@include file="foo.jsp"%>

 

 지정된 파일 (foo.jsp)의 텍스트를 지시어 위치에 그대로 삽입합니다. 대상이 되는 JSP페이지가 서블릿으로 변환시키기 전에 삽입됩니다. 즉 JSP 파일의 텍스트 그 자체가 지시어가 사용된 곳에 그대로 삽입되어 그 이후 서블릿으로 변환됩니다.

주로 정적인 요소 (공통 scirpt, css, js library 등)들을 삽입하고자 할 때 사용합니다. 

 

 

include 액션태그

<jsp:include page="foo.jsp"/>

 지정한 페이지를 삽입하되 먼저 독립적으로 실행시킨 뒤 그 결과를 삽입합니다. (지시어랑 다른 점) JSP 요청이 처리될 때 독립적으로 실행됩니다.  index.jsp에 foo.jsp 가 inlclude 되었다면 아래와 같은 순서로 요청이 처리됩니다.

 

  1. /index.jsp 요청
  2. foo.jsp 실행
  3. foo.jsp 실행 결과를 /index.jsp에 inlcude
  4. index.jsp 실행
  5. index.jsp 실행 결과 응답

 

지시어는 foo.jsp 텍스트 자체를 삽입했습니다. 그러나 jsp:include는 실행 결과를 삽입합니다.


jsp 런타임에서 차이점

 

 좀 더 구체적으로 살펴보겠습니다. 지시어는 텍스트 자체를 삽입한다는 것이고, 액션 태그는 독립적으로 실행 후 그 결과를 삽입한다는  차이가 있다는 건 알겠습니다. JSP 런타임상 어떤 차이가 있을까요.

 

 먼저 JSP는 반드시 번역과 컴파일 2가지 과정을 거칩니다. 

 

jsp 컴파일 과정

 컨테이너에 의해 jsp는 결국 서블릿으로 변환이 되는데요. 이때 지시어와 액션태그는 아래와 같이 변환 과정에서 차이를 보이게 됩니다. 

 

지시어와 액션태그의 차이

 실제로 그랬는지 제 로컬 PC에서 확인해보겠습니다. 먼저 지시어를 사용했을 때입니다.

 

지시어를 사용했을때의 including jsp 파일

index.jsp 하나만 컴파일되었네요. 이제 액션 태그를 사용했을 때입니다.

 

액션태그를 사용했을 때

 foo.jsp 가 독립적으로 실행 (번역, 컴파일) 되었습니다. 실행 과정에서 이와 같은 차이가 있습니다. 이를 어떻게 활용해야 할까요. 아래와 같이 정리해볼 수 있겠습니다.

 

jsp include 지시어

  • inlcluding 파일과 함께 실행
  • included 파일 내용이 바뀌었더라면 inlcuding  파일까지 재컴파일 (오버헤드)
  • 따라서 자주 바뀌지 않는 파일 (공통 파일, css, js library 등)을 삽입할 때 사용

 

jsp include 액션 태그

  • inlcluding 파일과 독립적으로 실행한 뒤 결과만 삽입
  • 독립적으로 실행되기 때문에 included 파일의 내용이 바뀌었으면 해당 파일만 재컴파일 (효율)
  • jsp파일 혹은 자주 바뀌는 파일 삽입 시 사용

 

따라서 jsp 페이지를 모듈화 하고자 할 때는 jsp:include 액션 태그를 사용하는 것이 적절하겠네요.

 

 

댓글