Thymeleaf란?
Thymeleaf는 HTML, XML, JavaScript, CSS 등의 뷰 템플릿을 동적으로 처리해주는 서버 사이드 템플릿 엔진입니다.
HTML 파일을 그대로 브라우저에서 열 수 있으면서도 서버 사이드에서 데이터 바인딩이 가능하도록 설계된 것이 가장 큰 장점입니다.
주요 특징
| 기능 | 설명 |
|---|
| Natural Templates | HTML 문서를 브라우저에서 그냥 열어도 문법 오류 없이 잘 보입니다. (디자이너와 협업에 좋음) |
| Spring과 완벽한 통합 | Spring MVC, Spring Boot와 자연스럽게 작동하며, Model 객체의 데이터를 뷰에 쉽게 바인딩 가능 |
| 표현식 언어(EL) | ${}, *{} 등의 문법을 통해 데이터를 HTML에 쉽게 출력 |
| 조건문 / 반복문 | th:if, th:each 등으로 논리 처리 가능 |
| 국제화 지원(i18n) | 메시지 번역을 위한 리소스 번들 쉽게 연동 가능 |
| 폼 처리 지원 | 폼 값의 바인딩, 유효성 검증 등과 잘 맞음 |
예제
- 컨트롤러 예제 (Spring Boot)
@Controller
public class HelloController {
@GetMapping("/hello")
public String hello(Model model) {
model.addAttribute("name", "Spring Boot!");
return "hello";
}
}
- Thymeleaf 템플릿 예제 (
src/main/resources/templates/hello.html)
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Hello</title>
</head>
<body>
<h1 th:text="'안녕하세요, ' + ${name}">안녕하세요!</h1>
</body>
</html>
안녕하세요, Spring Boot!
주요 속성
| 속성 | 설명 |
|---|
th:text | 텍스트 출력 (HTML escape 적용) |
th:utext | 텍스트 출력 (HTML escape 미적용) |
th:if, th:unless | 조건문 |
th:each | 반복문 |
th:href, th:src | 링크, 이미지 등의 경로 지정 |
th:object, *{} | 폼 데이터 바인딩 |
Thymeleaf vs JSP
| 항목 | Thymeleaf | JSP |
|---|
| 문법 친화성 | HTML 친화적 | HTML 깨지기 쉬움 |
| 뷰 레이어 분리 | 디자이너 친화적 | 디자이너 협업 어려움 |
| 보안성 | XSS 방지 기본 제공 | 수동 처리 필요 |
| Spring과의 통합 | 매우 우수 | 보통 |
Reference