https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-mvc-2/dashboard
강의를 수강하며 공부한 것을 정리한 글입니다.
템플릿과 레이아웃
웹 페이지 상의 공통되는 영역들을 일일이 복붙으로 개발하는 것은 비효율적이다. 중복이 발생하기도 하고 변경사항이 생기면 하나하나 찾아다니며 수정해야하기 때문이다. 타임리프에서는 이를 해결하기 위해 템플릿, 레이아웃 기능을 제공해서 효율적으로 개발할 수 있도록 도와준다.
템플릿
템플릿 예시 코드는 다음과 같다
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<body>
<footer th:fragment="copy">
footer
</footer>
<footer th:fragment="copyParam (param1, param2)">
<p>파라미터</p>
<p th:text="${param1}"></p>
<p th:text="${param2}"></p>
</footer>
<div th:fragment="hello">
<h1>hello div!</h1>
</div>
</body>
</html>
th:fragment = "이름" 으로 만들어놓고 다른 html 파일에서 가져다 쓰면 된다.
가져다 쓰는 방법은 2가지다
1.
<h2>부분 포함 insert</h2>
<div th:insert="~{template/fragment/footer :: copy}"></div>
th:insert를 넣은 div 태그 안에다 템플릿 코드를 넣는 방식. ~{ 경로 :: 템플릿이름 }
2.
<h2>부분 포함 replace</h2>
<div th:replace="~{template/fragment/footer :: copy}"></div>
th:replace를 넣은 div 태그 자체를 replace 하는 방식
추가. 파라미터 전달
<h1>파라미터 사용</h1>
<div th:replace="~{template/fragment/footer :: copyParam ('데이터1', '데이터2')}"></div>
파라미터를 넣으려면 함수를 호출하듯이 소괄호 열고 파라미터를 입력한다. 인자의 갯수는 맞춰줘야한다.
레이아웃
템플릿은 필요한 부분을 가져다가 쓰는 것이라면 레이아웃은 이보다 더 큰 개념이다. 큰 틀이 정해져있고 그 틀에 페이지마다 원하는 인자를 전달해서 쓰는 방식이다.
<html xmlns:th="http://www.thymeleaf.org">
<head th:fragment="common_header(title,links, div)">
<title th:replace="${title}">레이아웃</title>
<th:block th:replace="${links}" />
<th:block th:replace="${div}"></th:block>
</head>
레이아웃의 코드이다. title, links, div 를 인자로 넘겨주면 된다.
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head th:replace="template/layout/base :: common_header(~{::title},~{::link}, ~{::div})">
<title>메인</title>
<link rel="stylesheet" th:href="@{/css/bootstrap.min.css}">
<link rel="stylesheet" th:href="@{/themes/smoothness/jquery-ui.css}">
<div style="width:100px; height:100px; border: 1px solid red;"></div>
</head>
<body>
<div style="width:100px; height:100px; border: 1px solid blue;"></div>
</body>
</html>
~{::title} 은 title 태그 자체가 인자로 넘어가고 ~{::link} 는 link 태그들이 인자로 넘어간다. 수업의 예제에서 추가로 div 태그도 해봤는데 당연히 th:replace 태그 내에 있는 태그들만 넘어간다고 생각했는데 body에 있는 div도 인자로 넘어갔다. 그래서 결과는 다음과 같았다.
템플릿 vs 레이아웃
템플릿은 레이아웃에 비해 간단하다. 하지만 간단한 만큼 중복이 좀 생긴다. 그렇기 때문에
페이지가 적으면 템플릿 !
페이지가 많으면
레이아웃!
'백엔드 > 스프링' 카테고리의 다른 글
스프링 부트 배너 멋있게 바꾸기 (0) | 2021.10.06 |
---|---|
타임리프 정리2 (0) | 2021.09.13 |
타임리프 사용법 정리 (0) | 2021.09.13 |
스프링 No serializer found for class 에러 해결 (0) | 2021.08.24 |
PRG (Post Redirect Get) (0) | 2021.08.19 |