2022. 1. 14. 17:47ㆍFramework/Spring Boot
이번 글은 <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의 <jsp:include>와 include 디렉티브(<%@ include %>)의 가장 큰 차이점은 컴파일 시점과 포함되는 방식에 있습니다.
- 컴파일 시점:
- include 디렉티브: 파일의 내용을 현재 JSP 파일에 삽입한 후, 함께 컴파일합니다. 즉, JSP 소스 코드를 가져와서 포함된 파일과 호출한 파일이 하나의 단위로 컴파일됩니다.
- jsp:include 액션 태그: 이미 컴파일된 다른 JSP 파일의 결과물을 호출한 파일에 포함시킵니다. 이는 요청 시점에 동작하며, 실행 중에 포함되는 파일의 결과가 호출된 JSP 파일에 삽입됩니다.
- 포함 방식:
- include 디렉티브: 코드 차원에서 파일을 포함합니다. 이는 정적 포함(static inclusion)이라고 할 수 있으며, 포함된 파일의 변수나 메서드를 호출하는 JSP 파일에서 사용할 수 있습니다.
- jsp:include 액션 태그: 실행 중에 다른 JSP 파일의 결과를 포함합니다. 이는 동적 포함(dynamic inclusion)이라고 할 수 있으며, 일반적으로 페이지 레이아웃의 구성 요소를 모듈화 하는 데 사용됩니다.
- 사용 예시
- include 디렉티브는 반복적으로 사용되는 변수나 메서드를 포함할 때 유용합니다. 이를 통해 코드 중복을 줄이고 유지보수를 쉽게 할 수 있습니다.
- jsp:include 액션 태그는 페이지의 특정 부분을 동적으로 로드할 때 사용됩니다. 예를 들어, 페이지의 헤더, 푸터, 또는 네비게이션 바와 같은 공통 요소를 포함할 때 유용합니다.
JSPF(JSP Fragment)
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 한다는 의미를 갖습니다. 알아두면 코드를 보고 당황하지 않겠죠?
'Framework > Spring Boot' 카테고리의 다른 글
[Spring] TDD란? (0) | 2022.10.14 |
---|---|
[Spring] IoC/DI 컨테이너 (0) | 2022.10.12 |
[Spring] Gradle vs Maven (2) | 2022.09.25 |
JSP 기본 객체와 영역 (0) | 2022.01.14 |
JSP 동작 원리와 Servlet (0) | 2022.01.13 |