Spring Boot / / 2024. 10. 31. 16:47

Thymeleaf

Thymeleaf는 자바 기반의 서버 템플릿 엔진으로, HTML을 사용하여 서버 측에서 데이터를 렌더링하는 데 사용됩니다. Spring Boot와 함께 사용될 때는 특히 MVC(Model-View-Controller) 패턴에 적합하여 정적 HTML 파일에 동적인 데이터를 삽입해 클라이언트에게 전달하는 방식으로 웹 페이지를 생성합니다.

 

Thymeleaf의 주요 특징

 

1. HTML 친화적:

Thymeleaf는 HTML 파일에서 직접 템플릿 엔진 기능을 추가할 수 있는 태그 속성(th:text, th:href 등)을 제공합니다.

HTML 표준을 유지하면서, 브라우저에서 직접 확인할 수 있어 디자이너와 개발자 간의 협업에 용이합니다.

2. 서버 사이드 렌더링:

클라이언트가 요청을 보낼 때 서버가 HTML을 생성하여 완성된 웹 페이지를 클라이언트로 전달합니다.

데이터 렌더링과 로직 처리를 모두 서버에서 진행하기 때문에 SEO 친화적이며, 빠른 초기 로딩이 가능합니다.

3. Spring MVC와 통합 용이:

Thymeleaf는 Spring Framework와 자연스럽게 통합되어 컨트롤러의 데이터와 모델을 템플릿에서 쉽게 사용하게 해줍니다.

Spring Boot에서는 Thymeleaf 의존성을 추가하면 기본적으로 통합되어 있습니다.

 

Thymeleaf의 주요 문법과 기능

 

Thymeleaf는 HTML 태그의 속성으로 동작하며, 주요 속성은 다음과 같습니다.

 

1. th:text

 

텍스트를 삽입하고 값을 출력하는 데 사용됩니다.

${} 문법으로 모델의 데이터를 표현식으로 출력할 수 있습니다.

<p th:text="${message}">Hello, World!</p>

 

2. th:if, th:unless

 

조건에 따라 콘텐츠를 표시하거나 숨길 수 있습니다.

<p th:if="${isUserLoggedIn}">Welcome, User!</p>
<p th:unless="${isUserLoggedIn}">Please log in to continue.</p>

 

3. th:each

 

컬렉션 데이터(리스트 등)를 반복하여 출력하는 데 사용합니다.

예를 들어, 사용자 목록을 출력하는 경우:

<ul>
    <li th:each="user : ${userList}" th:text="${user.name}">User Name</li>
</ul>

 

4. th:href, th:src

 

링크나 이미지 경로를 동적으로 생성할 때 사용합니다.

예를 들어, 사용자 페이지 링크에 사용자 ID를 동적으로 추가하는 경우:

<a th:href="@{/user/{id}(id=${user.id})}">Profile</a>

 

5. th:include, th:replace

 

중복된 레이아웃이나 공통 요소를 별도 파일로 분리하여 포함할 수 있습니다.

예를 들어, 헤더나 푸터 같은 공통 요소를 따로 작성하여 여러 템플릿에서 재사용할 수 있습니다.

<div th:include="fragments/header :: header"></div>
<div th:replace="fragments/footer :: footer"></div>

 

6. th:object와 폼 바인딩

 

폼을 렌더링하고 객체와 바인딩할 때 사용됩니다. 주로 Spring의 @ModelAttribute와 함께 사용합니다.

<form th:action="@{/submit}" th:object="${user}" method="post">
    <input type="text" th:field="*{username}" placeholder="Username" />
    <input type="password" th:field="*{password}" placeholder="Password" />
    <button type="submit">Submit</button>
</form>

 

Thymeleaf의 템플릿 레이아웃 기능

 

Thymeleaf는 공통 레이아웃을 위한 템플릿 레이아웃 기능을 제공합니다. 일반적으로 레이아웃을 정의하는 템플릿 파일을 생성하고 각 페이지가 이를 상속하는 방식으로 구현할 수 있습니다.

 

1. 기본 레이아웃 템플릿 작성:

헤더, 내비게이션, 푸터 등의 공통 부분을 layout.html에 정의합니다.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title th:text="${pageTitle}">My Page</title>
</head>
<body>
    <header th:include="fragments/header :: header"></header>
    <main th:replace="~{::content}"></main>
    <footer th:include="fragments/footer :: footer"></footer>
</body>
</html>

 

2. 개별 페이지에서 레이아웃 확장:

페이지마다 필요한 콘텐츠만 정의하고, 공통 레이아웃을 상속합니다.

<section th:fragment="content">
    <h1>Page Content</h1>
    <p>This is the specific content for this page.</p>
</section>

 

Thymeleaf와 Spring Boot의 통합

 

Spring Boot에서 Thymeleaf는 spring-boot-starter-thymeleaf 의존성을 추가하는 것만으로 쉽게 통합됩니다.

 

resources/templates 폴더에 .html 파일을 저장하면, Spring MVC 컨트롤러에서 모델 데이터를 받아 렌더링할 수 있습니다.

예를 들어, 컨트롤러에서 model.addAttribute("message", "Hello, Thymeleaf!");를 설정하면, 템플릿에서 ${message}를 통해 접근할 수 있습니다.

 

Thymeleaf의 장점과 단점

 

장점

 

서버 사이드 렌더링: SEO에 유리하며, 초기 로딩 속도가 빠릅니다.

HTML 친화적: HTML 파일 그대로 개발 가능해 디자이너와 협업에 용이합니다.

Spring과의 높은 호환성: Spring MVC와의 통합이 자연스러워 템플릿 엔진으로 많이 사용됩니다.

 

단점

 

클라이언트 측 동적 UI 부족: 서버 렌더링 방식이므로, SPA(싱글 페이지 애플리케이션) 구현에는 한계가 있습니다.

JavaScript와의 통합 부족: 복잡한 UI 처리가 필요한 경우 Vue.js나 React 같은 프론트엔드 프레임워크가 더 적합할 수 있습니다.

 

결론

 

Thymeleaf는 HTML 기반의 템플릿 엔진으로, 서버 측에서 동적 HTML 생성을 통해 클라이언트에게 완성된 페이지를 제공할 때 유용합니다. Spring Boot와 통합이 용이하고, SEO에 적합하며, 웹 애플리케이션에서 흔히 사용되는 탬플릿 엔진으로 널리 활용됩니다.

'Spring Boot' 카테고리의 다른 글

SLF4J의 로그 레벨  (0) 2024.12.13
HikariCP  (1) 2024.10.22
Spring Data JPA  (1) 2024.10.22
spring.factories  (2) 2024.10.21
@Import  (0) 2024.10.21
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유