JavaServer Pages(JSP)는 서버 사이드에서 동적 웹 페이지를 생성하는 데 사용되는 Java 표준 기술입니다. JSP를 사용하면 HTML과 Java 코드를 혼합하여 정적 콘텐츠 및 동적 데이터를 처리할 수 있습니다. 그러나 JSP는 간단한 작업에는 유용하지만 복잡한 비즈니스 로직을 처리하기에는 제한적일 수 있습니다.
이러한 경우에는 JSP에 템플릿 엔진을 사용하여 더욱 강력한 동적 웹 애플리케이션을 개발할 수 있습니다. 템플릿 엔진은 JSP에서 프리젠테이션 로직과 비즈니스 로직을 분리하는 데 도움을 주며, 템플릿 파일과 데이터를 결합하여 동적으로 생성된 결과를 출력할 수 있습니다.
1. 템플릿 엔진의 종류
Java에서는 다양한 템플릿 엔진을 사용할 수 있습니다. 가장 인기 있는 템플릿 엔진 중 하나는 Thymeleaf입니다. Thymeleaf는 JSP와 유사한 문법을 사용하며, HTML 파일에 템플릿 속성을 추가하여 동적으로 변경될 부분을 지정할 수 있습니다.
또 다른 인기 있는 템플릿 엔진으로는 Freemarker와 Velocity가 있습니다. 이들은 JSP와는 다른 문법을 사용하며, 컴파일 없이 동적으로 템플릿을 렌더링할 수 있습니다.
2. 템플릿 엔진의 사용법
템플릿 엔진을 JSP에 사용하는 방법은 각각의 엔진에 따라 다를 수 있지만, 일반적으로 다음과 같은 단계를 따릅니다:
2.1. 의존성 추가
프로젝트의 의존성에 템플릿 엔진 라이브러리를 추가해야 합니다. Maven을 사용한다면 pom.xml
파일에 다음과 같이 의존성을 추가할 수 있습니다:
<dependencies>
<!-- Thymeleaf -->
<dependency>
<groupId>org.thymeleaf</groupId>
<artifactId>thymeleaf</artifactId>
<version>3.0.12.RELEASE</version>
</dependency>
<!-- Freemarker -->
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.31</version>
</dependency>
<!-- Velocity -->
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity</artifactId>
<version>1.7</version>
</dependency>
</dependencies>
2.2. 템플릿 파일 작성
템플릿 엔진을 사용하려면 템플릿 파일을 작성해야 합니다. 파일은 엔진에 따라 다른 문법을 사용할 수 있습니다. 다음은 Thymeleaf를 사용하는 경우의 예시입니다:
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<title>템플릿 엔진 사용하기</title>
</head>
<body>
<h1>Hello, <span th:text="${name}">World</span>!</h1>
</body>
</html>
2.3. 엔진 설정
엔진을 설정하기 위해 JSP 파일에서 해당 엔진을 사용하도록 선언해야 합니다.
Thymeleaf 사용하기
web.xml
파일에 다음과 같이 ThymeleafViewResolver를 추가합니다:
<bean id="viewResolver" class="org.thymeleaf.spring5.view.ThymeleafViewResolver">
<property name="templateEngine" ref="templateEngine"/>
<property name="characterEncoding" value="UTF-8"/>
</bean>
<bean id="templateEngine" class="org.thymeleaf.spring5.SpringTemplateEngine">
<property name="templateResolver" ref="templateResolver"/>
</bean>
<bean id="templateResolver" class="org.thymeleaf.spring5.templateresolver.SpringResourceTemplateResolver">
<property name="prefix" value="/WEB-INF/templates/"/>
<property name="suffix" value=".html"/>
<property name="templateMode" value="HTML"/>
</bean>
Freemarker 사용하기
web.xml
파일에 다음과 같이 FreeMarkerViewResolver를 추가합니다:
<bean id="viewResolver" class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
<property name="order" value="1"/>
<property name="viewClass" value="org.springframework.web.servlet.view.freemarker.FreeMarkerView"/>
<property name="prefix" value="/WEB-INF/templates/"/>
<property name="suffix" value=".ftl"/>
</bean>
Velocity 사용하기
web.xml
파일에 다음과 같이 VelocityLayoutViewResolver를 추가합니다:
<bean id="viewResolver" class="org.springframework.web.servlet.view.velocity.VelocityLayoutViewResolver">
<property name="order" value="1"/>
<property name="layoutUrl" value="/WEB-INF/templates/layout.vm"/>
<property name="prefix" value=""/>
<property name="suffix" value=".vm"/>
</bean>
2.4. 컨트롤러 작성
컨트롤러는 엔진에서 렌더링할 템플릿 파일을 선택하고 데이터를 전달하는 역할을 합니다.
Thymeleaf 사용하기
@Controller
public class MyController {
@RequestMapping("/")
public String index(Model model) {
model.addAttribute("name", "John Doe");
return "index";
}
}
Freemarker 사용하기
@Controller
public class MyController {
@RequestMapping("/")
public String index(Model model) {
model.addAttribute("name", "John Doe");
return "index";
}
}
Velocity 사용하기
@Controller
public class MyController {
@RequestMapping("/")
public String index(Model model) {
model.addAttribute("name", "John Doe");
return "index";
}
}
3. 결과 확인
위의 단계를 모두 수행한 뒤 웹 애플리케이션을 실행하면 템플릿 엔진에서 동적으로 생성된 웹 페이지를 확인할 수 있습니다.
이처럼 JSP에 템플릿 엔진을 사용하면 더욱 강력하고 유연한 웹 애플리케이션을 개발할 수 있습니다. 각 템플릿 엔진의 문법과 기능에 익숙해지면 웹 애플리케이션의 프리젠테이션 측면을 더욱 효과적으로 제어할 수 있을 것입니다.