Thymeleaf

기술노트
Admin (토론 | 기여)님의 2025년 7월 13일 (일) 08:45 판 (새 문서: = 🌿 Thymeleaf란? = '''Thymeleaf(타임리프)'''는 HTML을 서버에서 동적으로 생성할 수 있도록 도와주는 '''템플릿 엔진'''입니다. Spring Boot와 잘 연동되며, JSP의 대체재로 가장 많이 사용됩니다. → HTML 문서 안에 `th:`로 시작하는 속성을 추가해서 → 서버 데이터를 출력하거나 반복문, 조건문 등을 처리할 수 있습니다. ---- = ✨ 왜 사용하는가? = 기존 JSP는 HTML과 Java 코...)
(차이) ← 이전 판 | 최신판 (차이) | 다음 판 → (차이)

🌿 Thymeleaf란?

Thymeleaf(타임리프)는 HTML을 서버에서 동적으로 생성할 수 있도록 도와주는 템플릿 엔진입니다. Spring Boot와 잘 연동되며, JSP의 대체재로 가장 많이 사용됩니다.

→ HTML 문서 안에 `th:`로 시작하는 속성을 추가해서 → 서버 데이터를 출력하거나 반복문, 조건문 등을 처리할 수 있습니다.


✨ 왜 사용하는가?

기존 JSP는 HTML과 Java 코드가 섞여 있어 보기 어려웠습니다. Thymeleaf는 HTML 문서를 그대로 유지하면서, 필요한 부분만 서버에서 바꿔치기(rendering)하기 때문에

  • 디자이너도 보기 쉬움
  • 웹 브라우저로 열어도 정상 HTML처럼 보임
  • Java 변수, 조건, 반복 등을 쉽게 적용 가능

✅ 아주 쉬운 예제

<input type="text" value="기본값" th:value="${item}">
  • 서버에서 `item`이라는 값이 있으면 → `value="item의 값"` 으로 변경됨
  • 값이 없으면 → `value="기본값"`이 그대로 유지됨

🔎 타임리프는 `th:속성`이 있는 경우, 그 속성이 기존 속성을 덮어쓴다고 이해하면 됩니다. 렌더링된 HTML에서는 `th:value` 같은 속성은 사라지고, **최종 결과만 남습니다.**


🧠 작동 방식 요약

1. 컨트롤러에서 모델(Model)에 데이터를 담아 HTML로 전달 2. HTML 파일에서 `th:text`, `th:value` 등을 사용해 변수 출력 3. 서버에서 렌더링 후 `th:` 속성은 제거되고, 결과 HTML만 브라우저에 전달됨 4. 브라우저에서는 일반 HTML처럼 보임 (`th:` 속성은 보이지 않음)


🧩 주요 문법 요약표

표현 설명 예제
th:text 태그 내용 변경 <p th:text="${name}">
th:value input value 설정 <input th:value="${name}">
th:href 링크 주소 설정 <a th:href="@{/home}">
th:each 반복 처리 <li th:each="i : ${items}">
th:if / th:unless 조건 처리 <div th:if="${isAdmin}">
${...} 변수 참조 th:text="${user.name}"
@{...} URL 링크 표현식 th:href="@{/item/{id}(id=${item.id})}"

⚙️ Spring Boot 설정 방법

Gradle

implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'

application.properties 기본 설정

spring.thymeleaf.prefix=classpath:/templates/
spring.thymeleaf.suffix=.html

HTML 파일 상단에 네임스페이스를 반드시 선언:

<html xmlns:th="http://www.thymeleaf.org">

🧪 실전 예제: 상품 목록 출력

<table>
  <tr th:each="item : ${items}">
    <td th:text="${item.name}">상품명</td>
    <td th:text="${item.price}">가격</td>
  </tr>
</table>

🔗 참고 자료