본문 바로가기

Spring Framework/JSP

<jsp:include>와 include 디렉티브의 차이점

반응형

이번 글은 <jsp:include> 액션 태그와 include 디렉티브의 차이점에 대해 정리해보려고 합니다. 

 

그전에 액션 태그와 디렉티브에 대한 용어를 정리하고 가겠습니다.

 

  • 액션 태그란?

액션 태그란 JSP 페이지 내에서 어떤 동작을 하도록 지시하는 태그입니다. 예를 들어 페이지 이동, 페이지 include 등 특정 목적을 가지고 동작을 수행하는 역할을 가지고 있습니다. 

 

그 형태는 <jsp:_____> 를 취하고 _____에 뭐가 오느냐에 따라 그 역할이 다릅니다.

 

예를 들어 <jsp:forward> 는 현재 페이지를 다른 페이지로 전환할 때 사용하고 <jsp:include>는 JSP페이지 내에 다른 페이지를 삽입하는 역할을 수행합니다.

 

  • 디렉티브란?

디렉티브(directive) 란 JSP 페이지를 어떻게 처리할 것인지를 설정하는 태그를 의미합니다. 즉, JSP와 관련된 정보를 JSP 컨테이너에 지시하는 메시지라고 생각하면 될 것 같습니다. 

 

예를 들어 page 디렉티브는 JSP 페이지에 대한 정보를 설정하는데 page 디렉티브의 속성 중 contentType을 설정하는 경우 해당 JSP의 MIME type을 지정하는 경우인데 <%@ page contentType="text/html" %> 이런 식으로 지정할 수 있습니다. 

 

액션 태그와 디렉티브의 용어에 대한 정리가 어느 정도 된 것 같습니다.

 

이제는 오늘의 핵심 주제인<jsp:include> 와 include 디렉티브에 대한 내용을 정리해보겠습니다.

 

일단 둘다 include라는 용어가 공통적으로 들어갑니다. 그럼 이 include를 사용하는 목적에 대해 알아야겠죠?

 

예를 들어 블로그를 개발한다고 했을 때 블로그의 Header와 Footer는 모든 블로그 페이지에 공통적으로 들어가는 부분일 것입니다. 근데 만약 로그인, 회원가입, 블로그 생성, 블로그 내용 조회 등 모든 페이지에 Header와 Footer에 해당되는 코드를 작성해야 한다면 어떻게 될까요? 물론 컴파일상 문제는 전혀 없을 겁니다. 하지만 전 그렇게 개발해야 하면 개발자 안 할 겁니다. 왜냐하면 매우 귀찮은 작업이기 때문이죠

 

이런 상황을 해결하기 위해 <jsp:include> 와 include 디렉티브를 사용합니다. 둘다 지정한 페이지를 현재 위치에 포함시켜주는 기능을 제공하기 때문이죠.

 

그럼 드는 생각이 아니 액션 태그든지 디렉티브든지 하나만 쓰면 되는 거 아니냐는 궁금증이 생기게 됩니다. 저도 그랬어요. 때문에 지금부터는 둘의 차이점에 대해 정리해 보려고 합니다. 

 

 

  • <jsp:include>와 include 디렉티브의 차이점

먼저 둘의 가장 큰 차이점은 포함되는 방식에 있습니다. 다른 방식으로 표현 하자면 컴파일 시점이 다릅니다.

 

<jsp:include>는 다른 JSP로 흐름을 이동시켜 그 결과물을 현재 위치에 포함시키는 느낌입니다. 컴파일한 include 파일을 현재 jsp 페이지로 포함하는 개념인 반면 include 디렉티브는 다른 파일의 내용을 현재 위치에 삽입한 후에 같이 컴파일하는 방식입니다. 

 

말이 어려웠죠. 간단히 말하자면 include 디렉티브는 include할 jsp 소스코드를 가져와 같이 컴파일하는 것이고 include 액션 태그는 컴파일을 이미한 jsp 파일을 가져와 사용하는 개념입니다. 

 

include 디렉티브는 코드 차원에서 포함되기 때문에 include 액션태그와는 다른 용도로 사용할 수 있습니다. 

 

일반적으로 include 액션태그는 레이아웃의 한 구성 요소를 모듈화 하기 위해 사용되고

include 디렉티비는 포함하는 jsp에서 포함되는 jsp 내 변수나 메서드를 사용할 수 있기 때문에 반복적으로 사용되는 변수나 메서드를 사용할 때 많이 사용합니다.

 

 

  • jspf란?

include와 관련된 내용을 추가적으로 하나 더 가져왔습니다. 

 

jsp 프로젝트를 보면 .jspf 확장자를 가진 파일을 볼 수 있습니다. 이는 JSP Fragment 라는 의미를 지니고 있고 "JSP의 코드 조각 파일"로 해석할 수 있습니다.

 

이 말의 의미는 include 디렉티브로 포함되는 대상 파일은 꼭 jsp 확장자를 가지지 않아도 되는데 포함되는 코드 조각이라는 것을 쉽게 알아볼 수 있도록 임의로. jspf 파일로 작성했다고 이해하시면 될 것 같습니다.

 

<jsp-config>                                                                            
     <jsp-property-group> 
           <url-pattern>*.jsp</url-pattern> 
           <include-prelude>/ready.jspf</include-prelude> 
     </jsp-property-group> 
</jsp-config>

 

 사용 예시는 위와 같습니다.

<jsp-config> : jsp에 관련된 여러가지 설정을 하기위한 태그입니다.
<jsp-property-group> : 하나의 설정을 지정하기 위한 그룹 태그입니다. (특정 패턴에 대해 특정 설정을 하기 위한 단위)
<url-pattern> : 설정을 적용할 대상을 패턴으로 지정합니다. *.jsp로 지정시 모든 jsp 파일에 설정이 적용됩니다.
<include-prelude> : 패턴에 해당하는 JSP페이지의 맨 앞 부분에 include 될 JSP를 지정합니다.

 

위 코드는 모든 jsp 페이지에 대해 맨 앞에 ready.jspf를 include 한다는 의미를 갖습니다. 


알아두면 코드를 보고 당황하지 않겠죠? 

반응형

'Spring Framework > JSP' 카테고리의 다른 글

JSP 기본 객체와 영역  (0) 2022.01.14
JSP 동작 원리와 Servlet  (0) 2022.01.13