2024. 5. 21. 10:13ㆍBack-End/Spring
Thymeleaf는 Java 기반 웹 애플리케이션을 위한 강력하고 현대적인 템플릿 엔진이다. 주로 Spring Framework와 함께 사용되며, HTML, XML, JavaScript, CSS 등 다양한 파일 형식을 지원한다. 이 글에서는 Thymeleaf의 주요 특징, 사용법, 기본 문법, 그리고 장점을 살펴보겠다.
Thymeleaf의 주요 특징
- HTML5 지원: Thymeleaf는 표준 HTML5를 완벽하게 지원한다. 이는 개발자와 디자이너가 동일한 HTML 파일을 작업할 수 있게 해준다.
- 표현식 언어: 간단하면서도 강력한 표현식 언어를 통해 변수 출력, 조건문, 반복문 등을 사용할 수 있다.
- 템플릿 레이아웃: 템플릿의 재사용성을 높이기 위해 템플릿 레이아웃 기능을 제공한다.
- Spring 통합: Spring MVC와의 완벽한 통합을 지원하여, 웹 애플리케이션 개발을 더욱 편리하게 한다.
- 확장성: 커스텀 다이얼렉트(dialect)를 통해 기능을 확장할 수 있다.
기본 사용법
컨트롤러 작성
간단한 컨트롤러를 작성해보겠다. 이 컨트롤러는 사용자의 목록을 모델에 추가하여 Thymeleaf 템플릿에 전달한다.
package org.example.springmvc.controller;
import org.example.springmvc.domain.User;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import java.util.Arrays;
import java.util.List;
@Controller
public class UserController {
@GetMapping("/user")
public String user(Model model) {
List<User> users = Arrays.asList(
new User("jeon", true),
new User("kim", false),
new User("lee", false)
);
model.addAttribute("users", users);
return "user";
}
}
모델 클래스 작성
사용자 데이터를 표현할 간단한 모델 클래스를 정의한다.
package org.example.springmvc.domain;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
private String name;
private boolean admin;
}
Thymeleaf 템플릿 작성
이제 src/main/resources/templates 디렉토리에 user.html 파일을 생성하고, 사용자 목록을 표시하는 Thymeleaf 템플릿을 작성한다.
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>User List</title>
</head>
<body>
<h1>사용자 목록</h1>
<ul>
<li th:each="user : ${users}">
<span th:text="${user.name}">User Name</span> -
<span th:text="${user.admin} ? 'Admin' : 'User'">Status</span>
</li>
</ul>
</body>
</html>
Thymeleaf의 기본 문법
Thymeleaf의 기본 문법을 살펴보겠다. 이를 통해 모델 속성, 선택 변수 표현식, 메시지 표현식, 링크 URL 표현식 등을 이해할 수 있다.
모델 속성
모델 속성은 서버에서 전달된 데이터를 템플릿에서 사용하기 위해 사용된다. Model 객체에 추가된 속성을 템플릿에서 사용할 수 있다.
model.addAttribute("users", users);
템플릿에서 이를 참조하려면 ${}를 사용한다.
<p th:text="${users}">사용자 목록</p>
선택 변수 표현식
선택 변수 표현식은 주로 *{}을 사용하여 현재 선택된 객체의 속성에 접근하는 데 사용된다. 예를 들어, 반복문 내에서 현재 객체의 속성에 접근할 때 유용하다.
<li th:each="user : ${users}">
<span th:text="*{name}">User Name</span>
</li>
메시지 표현식
메시지 표현식은 국제화(i18n)를 지원하기 위해 사용된다. messages.properties 파일에 메시지를 정의하고 이를 템플릿에서 사용할 수 있다.
messages.properties 파일:
welcome.message=Welcome to Thymeleaf!
템플릿에서 메시지를 참조하려면 #{}를 사용한다.
<p th:text="#{welcome.message}"></p>
링크 URL 표현식
링크 URL 표현식은 동적으로 URL을 생성하기 위해 사용된다. @{}를 사용하여 URL을 생성한다.
<a th:href="@{/user}">User List</a>
@GetMapping 어노테이션
@GetMapping 어노테이션은 HTTP GET 요청을 처리하는 메서드를 정의하는 데 사용된다. URL 패턴을 지정하여 특정 URL로 들어오는 GET 요청을 이 메서드가 처리하도록 한다.
@GetMapping("/user")
public String user(Model model) {
// 메서드 내용
}
이 어노테이션이 붙은 메서드는 해당 URL로 요청이 들어오면 데이터를 불러와 처리하고, 결과를 뷰에 전달한다.
Thymeleaf의 장점
- 직관적인 템플릿 문법: Thymeleaf는 HTML 문서 안에서 자연스럽게 사용할 수 있는 템플릿 문법을 제공한다. 이는 개발자와 디자이너가 동일한 파일을 작업할 때 매우 유용하다.
- 서버-사이드 및 클라이언트-사이드 지원: Thymeleaf는 서버-사이드 렌더링뿐만 아니라, 클라이언트-사이드 렌더링을 지원하여 다양한 개발 환경에 적응할 수 있다.
- 강력한 Spring 통합: Spring MVC와의 완벽한 통합으로, 국제화(i18n), 폼 데이터 바인딩, 검증 등의 기능을 손쉽게 사용할 수 있다.
- 확장 가능성: 커스텀 다이얼렉트를 통해 자신만의 기능을 확장할 수 있다.
- 정적 분석 가능: Thymeleaf 템플릿은 정적 파일처럼 브라우저에서 미리 볼 수 있어, 개발 초기 단계에서의 오류를 줄일 수 있다.
결론
Thymeleaf는 Java 웹 애플리케이션 개발자에게 매우 강력한 도구이다. Spring MVC와의 뛰어난 통합성, 직관적인 템플릿 문법, 확장 가능성 등은 Thymeleaf를 선택할 만한 충분한 이유가 된다. 웹 애플리케이션 개발에서 Thymeleaf를 활용해보자. 효율적이고 유지보수하기 쉬운 코드를 작성하는 데 큰 도움이 될 것이다.
'Back-End > Spring' 카테고리의 다른 글
BindingResult (0) | 2024.05.22 |
---|---|
@Valid(스프링 MVC에서의 입력 유효성 검증) (0) | 2024.05.22 |
Spring MVC (0) | 2024.05.18 |
AOP (Aspect-Oriented Programming) (0) | 2024.05.18 |
ResultSetExtractor (0) | 2024.05.17 |