템플릿 엔진
템플릿 엔진은 HTML 같은 고정된 구조와 서버에서 제공하는 동적인 데이터를 결합하여 최종 결과를 생성하는 도구입니다.
- 고정된 구조 : HTML 코드 (ex. 제목, 표, 버튼 등)
- 동적인 데이터 : 서버에서 제공하는 값 (ex. 사용자 이름, 상품 목록)
동작 방식
- 클라이언트(웹 브라우저)가 서버에 요청을 보냅니다.
- 서버는 데이터베이스나 비즈니스 로직을 통해 필요한 데이터를 준비합니다.
- 템플릿 엔진이 HTML 템플릿과 데이터를 결합해 최종 HTML을 생성합니다.
- 클라이언트는 생성된 HTML을 받아 화면에 표시합니다.
특징
- 동적 웹 페이지 생성 : 사용자의 요청에 따라 변경되는 웹 페이지(ex. 사용자 맞춤 대시보드)를 쉽게 구현할 수 있습니다.
- 개발자와 디자이너의 협업 : 디자이너는 HTML 구조를 작업하고, 개발자는 템플릿 엔진을 활용해 데이터를 삽입하므로 역할을 분리할 수 있습니다.
- 표준 HTML과 호환 : 대부분의 템플릿 엔진은 HTML 파일을 확장하므로 표준 웹 기술과 호환됩니다.
종류
1. Thymeleaf
Thymeleaf
Integrations galore Eclipse, IntelliJ IDEA, Spring, Play, even the up-and-coming Model-View-Controller API for Java EE 8. Write Thymeleaf in your favourite tools, using your favourite web-development framework. Check out our Ecosystem to see more integrati
www.thymeleaf.org
- Spring Boot와 가장 잘 통합됩니다.
- HTML 파일 안에서 간단히 데이터를 바인딩할 수 있습니다.
- HTML을 그대로 브라우저에서 볼 수 있어 디버깅이 편리합니다.
(1) HTML
<!DOCTYPE html>
<html>
<body>
<h1>Welcome, <span th:text="${name}">User</span></h1>
</body>
</html>
(2) Controller
@GetMapping("/welcome")
public String welcome(Model model) {
model.addAttribute("name", "Alice");
return "welcome"; // welcome.html을 반환
}
(3) 장점
- HTML 표준을 준수합니다.
- 브라우저에서 미리보기와 테스트가 가능해 개발 생산성이 높습니다.
2. Mustache
- 간단하고 가벼운 템플릿 엔진입니다.
- {{}} 문법을 사용하여 데이터를 삽입합니다.
- 서버와 클라이언트에서 모두 사용할 수 있습니다.
(1) HTML
<!DOCTYPE html>
<html>
<body>
<h1>Hello, {{name}}</h1>
</body>
</html>
(2) Controller
@GetMapping("/greet")
public String greet(Model model) {
model.addAttribute("name", "Bob");
return "greet"; // greet.html을 반환
}
(3) 장점
- 문법이 간단하고 배우기 쉽습니다.
- 클라이언트 측(자바스크립트)에서도 사용할 수 있습니다.
3. Groovy
- HTML뿐만 아니라 스크립트 기반으로 더 복잡한 로직을 처리할 수 있습니다.
- 자바와 유사한 문법을 사용합니다.
(1) HTML
<!DOCTYPE html>
<html>
<body>
<h1>Items:</h1>
<ul>
<% items.each { item -> %>
<li>${item}</li>
<% } %>
</ul>
</body>
</html>
(2) Controller
@GetMapping("/items")
public String items(Model model) {
model.addAttribute("items", List.of("Apple", "Banana", "Cherry"));
return "items"; // items.html을 반환
}
(3) 장점
- 유연성과 확장성이 뛰어납니다.
- 복잡한 데이터 처리에 적합합니다.
4. Freemarker
- 빠르고 강력한 템플릿 엔진입니다.
- 데이터 변환과 같은 고급 기능을 지원합니다.
(1) HTML
<!DOCTYPE html>
<html>
<body>
<h1>Products:</h1>
<ul>
<#list products as product>
<li>${product}</li>
</#list>
</ul>
</body>
</html>
(2) Controller
@GetMapping("/products")
public String products(Model model) {
model.addAttribute("products", List.of("Laptop", "Tablet", "Phone"));
return "products"; // products.html을 반환
}
(3) 장점
- 복잡한 템플릿 논리를 처리할 수 있습니다.
- 성능이 우수합니다.
5. Velocity
- 오래된 템플릿 엔진으로, 현재는 많이 사용되지 않습니다.
- 간단한 문법과 빠른 처리 속도를 자랑합니다.
(1) HTML
<!DOCTYPE html>
<html>
<body>
<h1>Welcome, $name</h1>
</body>
</html>
(2) Controller
@GetMapping("/welcome")
public String welcome(Model model) {
model.addAttribute("name", "John");
return "welcome"; // welcome.html을 반환
}
(3) 장점
- 간단한 프로젝트에 적합합니다.
비교
템플릿 엔진 | 특징 | 장점 | 단점 |
Thymeleaf | HTML 표준 준수, Spring Boot와 통합 | 간결한 문법, 디버깅이 쉬움 | 복잡한 작업에는 제한적 |
Mustache | 간단한 문법, 서버와 클라이언트에서 모두 사용 가능 | 배우기 쉽고 경량화됨 | 고급 기능 부족 |
Groovy | 스크립트 기반으로 동적 처리가 가능 | 유연성과 확장성이 뛰어남 | 문법이 복잡할 수 있음 |
Freemarker | 고성능, 복잡한 논리 처리 가능 | 강력한 기능, 고급 데이터 처리 가능 | 문법이 비교적 복잡함 |
Velocity | 단순하고 빠름 | 간단한 작업에 적합 | 최신 프로젝트에서 거의 사용되지 않음 |
출처
OpenAI의 ChatGPT (https://openai.com)
반응형
'Java Framework > Spring Boot' 카테고리의 다른 글
[Spring Boot] DTO(Data Transfer Object) (0) | 2024.12.17 |
---|---|
[Spring Boot] Thymeleaf 속성 (0) | 2024.12.16 |
[Spring Boot] Custom Query의 SQL 연산자 (2) | 2024.12.14 |
[Spring Boot] JpaRepository (0) | 2024.12.13 |
[Spring Boot] JPA Hibernate DDL Auto (0) | 2024.12.11 |