Java Framework/Spring Boot

[Spring Boot] 템플릿 엔진 (Template Engines)

annovation 2024. 12. 15. 11:14

템플릿 엔진

템플릿 엔진은 HTML 같은 고정된 구조와 서버에서 제공하는 동적인 데이터를 결합하여 최종 결과를 생성하는 도구입니다.

  • 고정된 구조 : HTML 코드 (ex. 제목, 표, 버튼 등)
  • 동적인 데이터 : 서버에서 제공하는 값 (ex. 사용자 이름, 상품 목록)

동작 방식

  1. 클라이언트(웹 브라우저)가 서버에 요청을 보냅니다.
  2. 서버는 데이터베이스나 비즈니스 로직을 통해 필요한 데이터를 준비합니다.
  3. 템플릿 엔진이 HTML 템플릿과 데이터를 결합해 최종 HTML을 생성합니다.
  4. 클라이언트는 생성된 HTML을 받아 화면에 표시합니다.

특징

  1. 동적 웹 페이지 생성 : 사용자의 요청에 따라 변경되는 웹 페이지(ex. 사용자 맞춤 대시보드)를 쉽게 구현할 수 있습니다.
  2. 개발자와 디자이너의 협업 : 디자이너는 HTML 구조를 작업하고, 개발자는 템플릿 엔진을 활용해 데이터를 삽입하므로 역할을 분리할 수 있습니다.
  3. 표준 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)

 

반응형