BE/Spring & Spring Boot

[Spring Boot] Thymeleaf 타임리프

baek-dev 2024. 12. 29. 13:22

Java 웹 애플리케이션에서 HTML 템플릿 엔진으로 사용되는 라이브러리

서버에서 동적으로 데이터를 렌더링하여 HTML을 생성하며, Spring Boot와 잘 통합되어 뷰(View)를 생성하는데 널리 사용됨


Thymeleaf의 주요 특징

1. HTML 템플릿 파일로 작동

  • 순수 HTML로 디자인 할수 있어 HTML파일이 브라우저에서도 제대로 표시됨
  • 개발자와 디자이너가 동일한 파일을 사용할 수 있음

2. Spring MVC와 강력한 통합

  • 컨트롤러에서 전달된 모델 데이터를 쉽게 활용 가능

3. 표현식 기반의 문법 지원

  • 데이터 바인딩, 반복, 조건문 등을 쉽게 처리할 수 있음

4. 확장성

  • 커스텀 태그와 속성을 정희할 수 있어 유연한 사용이 가능

5. 서버 및 클라이언트에서 모두 동작 가능

  • 서버 사이드 렌더링을 기본으로 지원하지만, 클라이언트 렌더링에도 사용할수 있음

기본 문법

1. 데이터 바인딩 

  • 데이터 출력은 ${} 표현식을 사용
<p>Hello, <span th:text="${name}">Name</span>!</p>
  • 위 코드에서 컨트롤러에서 전달한 name의 값이 span태그안에 출력

 

2. 반복 처리

  • 데이터를 반복 출력할때 th:each를 사용
<ul>
  <li th:each="item : ${items}" th:text="${item}"></li>
</ul>
  • items는 리스트 데이터, 각 요소가 li태그에 출력

 

3. 조건문

  • 조건문에 th:if 와 th:unless 를 사용
<p th:if="${user != null}" th:text="${user.name}">Default User</p>
<p th:unless="${user != null}">No User Available</p>
  • user가 존재하면 이름 출력, 없으면 다른 메세지 출력

 

4. URL처리

  • th:href 와 th:src 로 동적으로 URL을 설정 가능
<a th:href="@{/home}">Home</a>
<img th:src="@{/images/logo.png}" alt="Logo">

 

 

5. 폼 처리

  • 폼 필드와 객체 바인딩
<form action="#" th:action="@{/submit}" th:object="${user}" method="post">
  <input type="text" th:field="*{name}" />
  <input type="text" th:field="*{email}" />
  <button type="submit">Submit</button>
</form>
  • th:object를 통해 user 객체와 바인딩하여, 입력값을 자동으로 객체 필드에 매핑

속성 설명
th:text HTML 요소에 텍스트 출력
th:utext HTML 요소에 텍스트를 출력하며, HTML 태그를 렌더링
th:each 반복문
th:if 조건문. 조건이 참일 경우 렌더링
th:unless 조건이 거짓일 경우 렌더링
th:href 동적으로 URL 생성
th:src 동적으로 이미지 등의 경로 설정
th:field 폼 데이터 바인딩
th:value 입력 필드의 기본값 설정

Thymeleaf 와 Spring Boot 통합

1. 의존성 추가

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

2. 디렉토리 구조

기본적으로 resourses/templates 디렉토리에 위치

src/main/resources/templates/
  ├── index.html
  ├── about.html

3. Controller와 연동

컨트롤러에서 모델 데이터를 전달하면 Thymeleaf 템플릿에서 이를 활용해 HTML을 생성

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class HomeController {

    @GetMapping("/")
    public String home(Model model) {
        model.addAttribute("name", "John");
        return "index"; // templates/index.html 파일 렌더링
    }
}

4. 예제 템플릿

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <title>Thymeleaf Example</title>
</head>
<body>
    <h1>Welcome, <span th:text="${name}">Guest</span>!</h1>
</body>
</html>

Thymeleaf 확장 기능

1. 템플릿 조각

  • 공통된 UI 요소 (예: 헤더, 푸터)를 별도 파일로 분리하여 재사용가능

th:insert 또는 th:replace 사용

<!-- header.html -->
<header>
  <h1>Site Header</h1>
</header>
<!-- main.html -->
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<body>
    <div th:insert="~{fragments/header :: header}"></div>
    <p>Main content here</p>
</body>
</html>

 

2. 국제화(i18n)

  • 다국어 지원을 위해 메세지 프로퍼티 파일 사용 가능

messages.properties :

greeting=Hello, {0}!

 

messages_ko.properties :

greeting=안녕하세요, {0}!

 

템플릿에서 :

<p th:text="#{greeting('John')}"></p>

장단점

장점

1. 순수 HTML과 유사하여 협업이 용이

2. Spring Boot 와 강력한 통합

3. 커스터마이징 및 확장 기능 지원

4. 강력한 데이터 바인딩 및 폼 처리

 

단점

1. 서버 사이드 렌더링 기반으로 동작하므로 클라이언트 중심 애플리케이션에는 적합하지 않음

2. 복잡한 UI를 처리하기에는 제약이 있음


정리

1. Thymeleaf란?

  • Java 웹 애플리케이션에서 HTML을 동적으로 생성하는 템플릿 엔진

2. 기능

  • 데이터 바인딩, 반복, 조건문, URL 처리, 폼 바인딩 등

3. Spring Boot 통합

  • Spring MVC와 연동하여 템플릿에서 동적 데이터 출력

4. 장점

  • 사용법이 간단하며 Spring과의 호환성이 뛰어남

 

 

 

 

출처 : ChatGPT

'BE > Spring & Spring Boot' 카테고리의 다른 글

[Spring Boot] 관련 어노테이션  (0) 2025.01.01
[Spring Boot] Validation 유효성 검사  (0) 2024.12.30
[Spring Boot] Page  (0) 2024.12.27
[Spring Boot, Java] Cascade  (0) 2024.12.26
[Spring Boot, JPA] 스냅샷  (1) 2024.12.25