타임리프 th:fragment / th:replace

송지윤·2026년 5월 14일

Spring Boot

목록 보기
78/81

th:fragment

temp.html 에서
th:fragment="alias1"
별칭 설정

<div th:fragment="alias1">
	별칭 1
</div>

<h1 th:fragment="alias2">
	별칭 2
</h1>

th:replace

main.html 에서 조각을 가져오려면
<th:block th:replace="~{fragments/temp :: alias1}"></th:block>
<th:block th:replace="~{fragments/temp :: alias2}"></th:block>
이렇게 가져와서 쓸 수 있음

페이지 전체

footer.html 전체를 가져오려면
main.html 에서 th:replace="~{fragments/footer}" 이렇게 가져오면 페이지 전체 가져와짐

<th:block th:replace="~{fragments/footer}"></th:block>

그렇지만 footer.html 을 전체 th:block th:fragment 로 감싸서 사용하기도 함

  • 명시적인 의도 파악 : 코드를 보는 사람이 공통 양식임을 바로 알 수 있음
  • HTML 구조의 순수성 유지 : th:replace="~{파일경로}" 방식은 대상 파일의 \, \, \ 태그 자체는 무시하고 내용물만 가죠오려고 시도함. 반면 th:fragment로 감싸두면 그 태그 안에 포함된 모든 요소를 안전하게 묶어서 전달할 수 있음
  • 유지보수 : 나중에 footer.html 안에 다른 프래그먼트가 추가도리 경우 이름을 지정하는 방식이 구분에 훨씬 유리

별칭 설정 없이 html 전체 호출할 때 (이름 없이 호출할 때)
~{fragments/footer}
타임리프는 footer.html 내의 유효한 태그 내용물만 긁어옴. 이 과정에서 의도치 않게 일부 태그가 누락되거나 구조가 깨질 위험이 있음.

별칭 설정하여 호출할 때 (이름으로 호출할 때)
footer.html

<th:block th:fragment="footerFragment">
  <h1> footer 내용 작성</h1>
</th:block>

~{fragments/footer :: footerFragment}
\<th:block> 으로 감싸진 모든 내용(head, body, script 전체)을 박스 채로 들어다가 교체하는 방식이므로 가장 확실하고 안전함.

파일 하나가 통째로 공통 레이아웃 역할을 하고 있다면, footerFragment라는 이름을 명시해주는 것이 타임리프의 표준적인 구너장 방식이며 예상치 못한 파싱 오류를 줄일 수 있음.

0개의 댓글