0. Thymeleaf ๋?
์ปจํธ๋กค๋ฌ๊ฐ ์ ๋ฌํ๋ ๋ฐ์ดํฐ๋ฅผ ์ด์ฉํด ๋์ ์ผ๋ก ํ๋ฉด์ ๋ง๋ค์ด์ฃผ๋ ์ญํ ์ ํ๋ ๋ทฐ ํ ํ๋ฆฟ ์์ง
1. ์ฌ์ฉ
html ํ์ผ์ ์ฝ๋ ์ฝ์ ํ ์ฌ์ฉ
<html xmlns:th="http://www.thymeleaf.org">
2. ๊ธฐ๋ณธ ๋ฌธ๋ฒ
1) ํ ์คํธ ์ถ๋ ฅ
์ปจํธ๋กค๋ฌ์์ model.setAttribute("๋ณ์๋ช ", "๊ฐ") ๋ถ๋ถ์ ๊ฐ์ ์ถ๋ ฅ
- ํ๊ทธ ์์์ ์ถ๋ ฅ < ํ๊ทธ๋ช th:"text=${๋ณ์๋ช }" >
- ์ปจํ ์ธ ์์ ์ง์ ์ถ๋ ฅ [[${๋ณ์}]]
cf) ์ต์ค์ผ์ดํ(escape)
ํน์ ๋ฌธ์๋ฅผ HTML๋ก ๋ณํํ๋ ํ์
๊ฐ ๋ถ๋ถ์ < > ๋ฑ์ ํน์ ๋ฌธ์์ด์ <(<), >(&rt) ๋์ด์ฐ๊ธฐ( ) ๊ธฐํธ๋ก ๋ณํํ์ฌ ์ธ์ํ๊ฒ ํ๋ ๊ฒ์ '์ด์ค์ผ์ดํ(escape)'๋ผ๊ณ ํ๋ค.
Q : ๊ทธ๋ ๋ค๋ฉด ๊ฐ์ <ํ๊ทธ> ๋ฅผ ์ธ์ํ๊ฒ ํ๋ ค๋ฉด ์ด๋ป๊ฒ ํด์ผ ํ ๊น?
A : ์ต์ค์ผ์ดํ ๊ธฐ๋ฅ์ ์ฌ์ฉํ์ง ์๋๋ก ํ๋ค.
- ํ๊ทธ ์์์ ์ถ๋ ฅ <ํ๊ทธ๋ช th:utext "${๋ณ์๋ช }">
- ์ฝํ ์ธ ์์ ์ง์ ์ถ๋ ฅ [(${๋ณ์})]
Q : ์ด์ค์ผ์ดํ ์ฒ๋ฆฌ๋ฅผ ๊ธฐ๋ณธ์ผ๋ก ์ฌ์ฉํ๋ ์ด์ ๋?
A : ์ฌ์ฉ์์ ์ ๋ ฅ์ ๋ฐ์ ๋์ ์ผ๋ก ํ์ด์ง๋ฅผ ๊ตฌ์ฑํ ๋, ์ฌ๋ฌ ํน์๋ฌธ์๋ค ๋๋ฌธ์ html ํ์ด์ง๊ฐ ๊นจ์ง ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
2) Spring EL
์คํ๋ง ํํ ์ธ์ด
- ๊ฐ์ฒด์ ์์ฑ ๊ฐ์ ์ ๊ทผ
${user.username}
${user['username']}
${user.getUsername()}
List์ HashMap๋ ํด๋น ๊ฐ์ฒด์ ์ ๊ทผํ ๋ค, ๊ฐ์ฒด์์ ๊ฐ์ ์ ๊ทผํ๋ ๋ฐฉ๋ฒ๊ณผ ๋์ผํ๊ฒ ์ฌ์ฉํ ์ ์๋ค.
- List<๊ฐ์ฒด> List[index]
- Map<key, ๊ฐ์ฒด> Map[key]
3) ์ง์ญ๋ณ์
์ ์ธ๋ ํ๊ทธ ๋ด์์๋ง ์ฌ์ฉ ๊ฐ๋ฅ
<ํ๊ทธ๋ช th.with="์ง์ญ๋ณ์๋ช "={$๋ณ์๋ช }">
4) ์ ๊ณตํ๋ ๊ฐ์ฒด
- ๊ธฐ๋ณธ ๊ฐ์ฒด
- ${#request}
- ${#response}
- ${#session}
- ${#servletContext}
- ${#locale}
- ํธ์๊ฐ์ฒด
- "${param.paramData} http ์ฃผ์?paramData=๊ฐ ๋ถ๋ถ์ ๊ฐ์ ์ถ๋ ฅํ๋ค.
- ์ธ์ ๋ฐ์ดํฐ์ ์ ๊ทผ "${session.sessionData}"
- ์คํ๋ง ๋น ๋ฐ์ดํฐ์ ์ ๊ทผ "${@์คํ๋ง๋น๋ฑ๋ก์ด๋ฆ.๋ฉ์๋๋ช (๋งค๊ฐ๋ณ์)}"
5) ์ ํธ๋ฆฌํฐ ๊ฐ์ฒด
์ด๋ฐ ๊ธฐ๋ฅ์ด ์๋ค ์ ๋๋ง ํ์ธํ๊ณ ์์ธํ ์ฌํญ์ ํํ์ด์ง ๊ณต์ ๋งค๋ด์ผ์ ์ฐธ์กฐํ์ฌ ํ์ํ ๋ ์ฌ์ฉํ์.
- ๋ฉ์์ง ์ฒ๋ฆฌ &{#message}
- URI ์ด์ค์ผ์ดํ ์ง์ ${#uris}
- java.util.Date ์์ ์ง์ ${#dates}
- java.util.Calendar ์์ ์ง์ ${#calendars}
- ์๋ฐ 8 ๋ ์ง ์์ ์ง์ ${#temporals}
- ์ซ์ ์์ ์ง์ &{#numbers}
- ๋ฌธ์ ๊ด๋ จ ํธ์ ๊ธฐ๋ฅ ${#strings}
- ๊ฐ์ฒด ๊ด๋ จ ๊ธฐ๋ฅ ์ ๊ณต ${#objects}
- boolean ๊ด๋ จ ๊ธฐ๋ฅ ์ ๊ณต ${#bools}
- ๋ฐฐ์ด ๊ด๋ จ ๊ธฐ๋ฅ ์ ๊ณต ${#arrays}
- ์ปฌ๋ ์ ๊ด๋ จ ๊ธฐ๋ฅ ์ ๊ณต &{#lists}, &{#sets}, &{#maps}
- ์์ด๋ ์ฒ๋ฆฌ ๊ด๋ จ ๊ธฐ๋ฅ ์ ๊ณต, ๋ค์์ ์ค๋ช ${#ids}
- ๋ ์ง์ฉ ์ ํธ๋ฆฌํฐ ๊ฐ์ฒด ${#temporals}
Tutorial: Using Thymeleaf
1 Introducing Thymeleaf 1.1 What is Thymeleaf? Thymeleaf is a modern server-side Java template engine for both web and standalone environments, capable of processing HTML, XML, JavaScript, CSS and even plain text. The main goal of Thymeleaf is to provide a
www.thymeleaf.org
6) URL ๋งํฌ
<ํ๊ทธ๋ช th:href=" @{http์ฃผ์ ~ }">
~ ๋ถ๋ถ์ ๊ฒฝ๋ก๋ณ์, ์ฟผ๋ฆฌ ํ๋ผ๋ฏธํฐ, ๊ฒฝ์๋ณ์+์ฟผ๋ฆฌ ํ๋ผ๋ฏธํฐ๋ก ๊ตฌ์ฑ
- ๊ฒฝ๋ก๋ณ์ (http ์ฃผ์?param1=data1¶m2=data2)
@{http ์ฃผ์(param1=${param1}, param2=${param2})}
- ์ฟผ๋ฆฌ ํ๋ผ๋ฏธํฐ (http ์ฃผ์/data1/data2)
@{http ์ฃผ์/{param1}/{param2}(param1=${param1}, param2=${param2})}
- ๊ฒฝ๋ก๋ณ์+์ฟผ๋ฆฌ ํ๋ผ๋ฏธํฐ (http ์ฃผ์/data1/data2?param3=data3)
@{http ์ฃผ์/{param1}/{param2}(param3=${param3})}
7) ๋ฆฌํฐ๋ด
์์ค์ฝ๋์์ ๊ณ ์ ๋ ๊ฐ
- ๋ฌธ์ : ์์น) ์์๋ฐ์ดํ๋ก ๊ฐ์ธ์ผํจ(' ๋ฌธ์ ') ์์ธ) ์ฐ์์ ์ผ๋ก ์ด์ด์ง ๋ฌธ์๋ผ๋ฉด ์๋ต ๊ฐ๋ฅํ๋ค
- ์ซ์
- Boolean : true, false
- Null : null
8) ์ฐ์ฐ
๋ค๋ฅธ ์ฐ์ฐ๊ณผ ๋์ผํ๋ฐ ํน์ ํน์๋ฌธ์๋ง ์ฃผ์ํ์ฌ ์ฌ์ฉํ์
- > (gt)
- < (lt)
- >= (ge)
- <= (le)
- ! (not)
- == (eq)
- != (neq, ne)
9) ์กฐ๊ฑด๋ฌธ
์ฃผ๋ก 8๋ฒ์ ์ฐ์ฐ๊ณผ ํจ๊ป ์ฌ์ฉ๋๋ฉฐ if์ unless์ switch ๋ฌธ์ฅ์ด ์๊ณ ์กฐ๊ฑด์ ๋ง์กฑํ์ง ์์ผ๋ฉด ํด๋น ํ๊ทธ์ ์ถ๋ ฅ์ด ์ ํ๋๋ค.
.html
<th:if="์กฐ๊ฑด">
<th:unless="์กฐ๊ฑด">
<th:switch="์กฐ๊ฑด๊ฐ">
<th:case="๊ฐ 1">
<th:case="๊ฐ 2">
<th:case="*"> //default(์กฐ๊ฑด์ด ์์ ๋ ์ฌ์ฉ)
10) ์์ฑ๊ฐ ์ค์
์์ฑ ์์ฑ/๋์ฒด <ํ๊ทธ๋ช th:์์ฑ๋ช ="๊ฐ"> : ํด๋น ์์ฑ๋ช ์ด ์กด์ฌํ์ง ์์ผ๋ฉด ์๋ก ๋ง๋ค์ด ๊ฐ์ ์ ์ฅํ๊ณ , ์์ฑ๋ช ์ด ์กด์ฌํ๋ฉด ํด๋น ๊ฐ์ผ๋ก ๋์ฒดํ๋ค.
์์ฑ ์ถ๊ฐ
- ๋ค์ ์ถ๊ฐ
.html
<ํ๊ทธ๋ช ํ๊ทธ์์ฑ์ด๋ฆ1="๊ฐ1" th:attrappend="ํ๊ทธ์์ฑ์ด๋ฆ1=๊ฐ2">
๊ฒฐ๊ณผ
ํ๊ทธ์์ฑ์ด๋ฆ1=๊ฐ1๊ฐ2
- ์์ ์ถ๊ฐ
.html
<ํ๊ทธ๋ช ํ๊ทธ์์ฑ์ด๋ฆ1="๊ฐ1" th:attrprepend="ํ๊ทธ์์ฑ์ด๋ฆ1=๊ฐ2">
๊ฒฐ๊ณผ
ํ๊ทธ์์ฑ์ด๋ฆ1=๊ฐ2๊ฐ1
- ๊ทธ ์ธ) classappend : ๋์ด์ฐ๊ธฐ๋ฅผ ํ์ง ์์๋ ์์ฐ์ค๋ฝ๊ฒ ์ถ๊ฐํ๋ค.
.html
<ํ๊ทธ๋ช ํ๊ทธ์์ฑ์ด๋ฆ1="๊ฐ1"th:classappend="ํ๊ทธ์์ฑ์ด๋ฆ1=๊ฐ2">
๊ฒฐ๊ณผ
ํ๊ทธ์์ฑ์ด๋ฆ1=๊ฐ1 ๊ฐ2
์ฌ์ฉ ์์
htmlํ์ผ์์ <input type="check box" name="active" checked="false">
์ด ๊ฒฝ์ฐ cheked๋ผ๋ ์์ฑ์ด ์๊ธฐ ๋๋ฌธ์ ์ฒดํฌ ์ฒ๋ฆฌ๊ฐ ๋์ด๋ฒ๋ฆฐ๋ค.
ํ์ง๋ง, ์์ฑ๊ฐ ๋์ฒด๋ฅผ ์ด์ฉํ์ฌ check๊ฐ ๋์์ ๋๋ง ์ฒ๋ฆฌ๋ฅผ ํ๋ค.
<input type="check box" name="active" th:checked="true">
<input type="check box" name="active" th:checked="false">
11) ๋ฐ๋ณต๋ฌธ
Iterable, Enumeration ๊ฐ์ฒด์ ์์๋ค์ ์ถ๋ ฅํ ๋ ์ถ๋ก ์ฌ์ฉ
.html
<th:each="ํ๊ทธ์์ฑ์ด๋ฆ1 : ${๊ฐ์ฒด๋ณ์์ด๋ฆ}">
<th:ํ๊ทธ์์ฑ์ด๋ฆ2="{ํ๊ทธ์์ฑ์ด๋ฆ1.์์ฑ1}">
ํ์ฌ ์์ฑ ํ์ธ userStat
- ์ธ๋ฑ์ค ํ์ธ(0๋ถํฐ) : userStat.index
- ํ์ฌ ๋ช ๋ฒ์งธ ๋ฐ๋ณต์ธ์ง ํ์ธ(1๋ถํฐ) : userStat.count
- ์ ์ฒด ๋ฐ๋ณต ํ์(๊ฐ์ฒด์ ์ฌ์ด์ฆ) ํ์ธ : userStat.size
- ๋ฐ๋ณต์ ํ์ ์ง์ ํ์ธ(boolean) : userStat.odd, userStat.even
- ๋ฐ๋ณต์ ์ฒซ ๋ฒ์งธ์ ๋ง์ง๋ง ํ์ธ(boolean) : userStat.first, userStat.last
- ํ์ฌ ๊ฐ์ฒด ํ์ธ : userStat.current
12) ์ฃผ์
๋ชจ๋ ์ฃผ์์ .html ํ์ผ๋ก ๋ณด๋ฉด ์ฃผ์์ฒ๋ฆฌ ๋ ์ฑ๋ก ๋ณด์ธ๋ค.
ํ์ค html ์ฃผ์
์น ๋ธ๋ผ์ฐ์ ๊ฐ ๋๋๋ง ํ์ง ์๊ณ + ํ์๋ฆฌํ๊ฐ ๋๋๋ง(์๋ฒ์ฌ์ด๋ ๋๋๋ง์ ์ฃผ์์ฝ๋๋ฅผ ์์ ์ง ์๋๋ค) ํ์ง๋ ์๋๋ค
์ฃผ์ ์ฝ๋๋ html์์ ๊ทธ๋๋ก ์กด์ฌํ๊ฒ ๋๋ค.
<!-- ์ฝ๋ -->
ํ์๋ฆฌํ ํ์ ์ฃผ์
์น ๋ธ๋ผ์ฐ์ ๊ฐ ๋๋๋ง ํ์ง ์๊ณ + ํ์๋ฆฌํ๊ฐ ๋๋๋ง(์๋ฒ์ฌ์ด๋ ๋๋๋ง ์ ์ฃผ์ ์ฝ๋๋ฅผ ์์ค๋ค) ํ๋ค.
์ฃผ์ ์ฝ๋๋ html ์์ ๋ณด์ด์ง ์๋๋ค.
<!-- /* ์ฝ๋ */ -->
ํ์๋ฆฌํ ํ๋กํ ํ์ ์ฃผ์
์น ๋ธ๋ผ์ฐ์ ๊ฐ ๋๋๋ง ํ์ง ์๊ณ +์๋ฒ์ฌ์ด๋ ๋๋๋ง ์ ํ์๋ฆฌํ๋ก ๋๋๋ง ๋ ๊ฒฝ์ฐ์๋ง ์ฃผ์์ ์ ๊ฑฐํ๊ณ ํ๋ฉด์์ ์ถ๋ ฅํ๋ค.
์ฃผ์ ์ฝ๋๋ ์ฃผ์์ด ์ ๊ฑฐ๋์ด ๊ฒฐ๊ณผ๊ฐ html ์์ ์กด์ฌํ๊ฒ ๋๋ค.
<!-- /*/
๋ธ๋ก ์ฝ๋
/*/ -->
๋๋ถ๋ถ) 2๋ฒ ๋ฐฉ๋ฒ์ผ๋ก ์ฃผ์์ ์ฌ์ฉํ๋ค.
13) ์์ฒดํ๊ทธ ๋ธ๋ก
ํ์๋ฆฌํ ํน์ฑ์ html์ ์์ฑ์ผ๋ก ๊ธฐ๋ฅ์ ์ ์ํด์ ์ฌ์ฉํ๋๋ฐ, ํ๊ทธ๋ก์จ ๊ธฐ๋ฅ์ ์ ์ํด์ ์ฌ์ฉํ๊ณ ์ถ์ ๊ฒฝ์ฐ ๋ค์๊ณผ ๊ฐ์ด ์ฌ์ฉํ๋ค.
.html
<th:block th:each="ํ๊ทธ์์ฑ์ด๋ฆ1 : ${๊ฐ์ฒด๋ณ์์ด๋ฆ}">
<ํ๊ทธ๋ช ~>
14) ์๋ฐ์คํฌ๋ฆฝํธ์ ํ์๋ฆฌํ
1. ํ ์คํธ ๋๋๋ง
ํ ์คํธ ๋๋๋ง์ ๋ฐ์ดํ๋ฅผ ๋ถ์ฌ์ผ ํ๊ฑฐ๋, ํน์๋ฌธ์ ๋ฑ์ ๋ฐ๋ก ์ฒ๋ฆฌํด์ผ ํ๋ค.
.js
user.username="user A"๋ผ๊ณ ํ ๋
var name=[[${user.username}]] ์ผ๋ก ๋ฐ๋ก ์ฌ์ฉํ ์ ์๊ณ
var name= "[[${user.username}]]"์ผ๋ก ํ์ ์ ๋ง์ถ์ด ์ฌ์ฉํ์ฌ์ผ ํ๋ค.
2. ๋ด์ถ๋ด ํ ํ๋ฆฟ ์ฌ์ฉ X
.js
var username= /*[[$user.username]] */ "test username"
์ฃผ์์ด ์ ๊ฑฐ๋์ง ์๊ณ ํด๋น ๋ฌธ์ฅ์ ๊ทธ๋๋ก ์คํํ๋ค.
๊ฒฐ๊ณผ
username= /*[[$user.username]] */ "test username"
3. ๊ฐ์ฒด ์ฌ์ฉ ์ ๋ถํธํจ
.js
username=๊ฐ์ฒด ๋ฅผ ํ ๋นํ์ ๋
๋ค์๊ณผ ๊ฐ์ด ํ ๋น๋๋ค.
๊ฒฐ๊ณผ
username=Controller์ด๋ฆ.๊ฐ์ฒดํด๋์ค(๊ฐ์ฒด์์ฑ=๊ฐ์ฒด๊ฐ);
์๋ฐ์คํฌ๋ฆฝํธ ์ธ๋ผ์ธ
์์ ๋ฌธ์ ๋ค์ ํ์๋ฆฌํ ๊ธฐ๋ฅ์ ๊ฐํธํ๊ฒ ์ฌ์ฉ ์ ์๋๋ก ํ๋ ์๋ฐ์คํฌ๋ฆฝํธ ์ธ๋ผ์ธ์ ์ฌ์ฉํ์ฌ ํด๊ฒฐํ ์ ์๋ค.
<script th:inline="javascript">
1. ํ ์คํธ ๋๋๋ง
ํ์ ์ ์ ๊ฒฝ ์ฐ์ง ์์๋ ๋๊ณ , ํน์๋ฌธ์์ ์ฒ๋ฆฌ์ ๊ฒฝ์ฐ๋ ์๋์ผ๋ก ์ฒ๋ฆฌ๋๋ค.
.js
var name= [[${user.username}]]
2. ๋ด์ถ๋ด ํ ํ๋ฆฟ ์ฌ์ฉ O
์ฃผ์์ด ์ ๊ฑฐ๋์ด ํด๋น ๋ฌธ์ฅ์ด ์คํ๋๋ค.
๊ฒฐ๊ณผ
username= "test username"
3. ๊ฐ์ฒด json ํ ๋น
์๋์ผ๋ก json ํ์์ผ๋ก ๋ณํํ์ฌ ๊ฐ์ ํ ๋นํ๋ค.
๊ฒฐ๊ณผ
username={๊ฐ์ฒด์์ฑ : ๊ฐ์ฒด๊ฐ}
4. ๋ฐ๋ณต๋ฌธ
each ๋ฌธ๋ฒ์ ๋ค์๊ณผ ๊ฐ์ด ์ฌ์ฉํ๋ค.
.js
[# th:each ๋ฌธ๋ฒ ๊ทธ๋๋ก ์ฌ์ฉ]
15) ๊ณตํต๋ ํ ํ๋ฆฟ ์ฌ์ฉ
์น ํ์ด์ง์ ํน์ html์ด ๋ฐ๋ณต๋์ด ๋ํ๋๋ ๊ฒฝ์ฐ ํ ํ๋ฆฟ์ ์กฐ๊ฐ๋ด์ด ์ฌ์ฉํ๋ค.
ํ ํ๋ฆฟ ์กฐ๊ฐ
[resources]-[template]-[fragment] ํด๋์ ์กฐ๊ฐ๋ธ html ํ์ผ์ ์ ์ฅํ๋ค.
์กฐ๊ฐ๋ธ ํ ํ๋ฆฟ์ ํจ์์ ๋น์ทํ ํ์์ผ๋ก ๋ถ๋ฌ์์ ์ฌ์ฉํ๋ค.
.html
- ํ๋ผ๋ฏธํฐ๊ฐ ํ์ํ์ง ์์ ํ ํ๋ฆฟ
<ํ ํ๋ฆฟ ํ๊ทธ๋ช th:fragment="ํ ํ๋ฆฟ ์ด๋ฆ"> ๋ด์ฉ </ํ ํ๋ฆฟ ํ๊ทธ๋ช >
- ํ๋ผ๋ฏธํฐ๊ฐ ํฌํจ๋ ํ ํ๋ฆฟ
<ํ ํ๋ฆฟ ํ๊ทธ๋ช th:fragment="ํ ํ๋ฆฟ ์ด๋ฆ (ํ๋ผ๋ฏธํฐ 1, ํ๋ผ๋ฏธํฐ 2)"> </ํ ํ๋ฆฟ ํ๊ทธ๋ช >
html์ ํน์ ๋ถ๋ถ์ ํ ํ๋ฆฟ ์กฐ๊ฐ ์ฌ์ฉ(์ฝ์ , ๋์ฒด)
- ํ๋ผ๋ฏธํฐ๋ก ๋จ์ ๊ฐ์ ์ฌ์ฉ
.html
<ํ๊ทธ๋ช 1 : insert/replace "~{๊ฒฝ๋ก :: ํ ํ๋ฆฟ ์ด๋ฆ(ํ๋ผ๋ฏธํฐ ๊ฐ)}"></ํ๊ทธ๋ช >
- insert : ํด๋น ํ๊ทธ ์์ ํ ํ๋ฆฟ์ ์ฌ์ฉ
<ํ๊ทธ๋ช 1><ํ ํ๋ฆฟ ํ๊ทธ๋ช > ๋ด์ฉ </ํ ํ๋ฆฟ ํ๊ทธ๋ช ></ํ๊ทธ๋ช 1>
- replace : ํด๋น ํ๊ทธ๋ฅผ ํ ํ๋ฆฟ์ ํ๊ทธ๋ก ๋์ฒด
<ํ ํ๋ฆฟ ํ๊ทธ๋ช > ๋ด์ฉ </ํ ํ๋ฆฟ ํ๊ทธ๋ช >
- ํ๋ผ๋ฏธํฐ๋ก ํน์ ํ๊ทธ๋ฅผ ์ฌ์ฉ
<ํ๊ทธ๋ช 1 : insert/replace "~{๊ฒฝ๋ก :: ํ ํ๋ฆฟ ์ด๋ฆ( ~{::๋์ฒดํ๊ทธ 1}, ~{๋์ฒดํ๊ทธ 2})}">
<๋์ฒดํ๊ทธ 1>
<๋์ฒดํ๊ทธ 2></๋์ฒดํ๊ทธ 2>
</๋์ฒดํ๊ทธ 1>
</ํ๊ทธ๋ช 1>
๊ฒฐ๊ณผ
ํ ํ๋ฆฟ ์ด๋ฆ์ ์ฝ๋๊ฐ ๋์ฒดํ๊ทธ ์์ฑ์ ๊ฐ์ผ๋ก ๋์ฒด๋์ด ๋๋๋ง ๋๋ค.
html ์์ฒด๋ฅผ ๋ ์ด์์์ผ๋ก ๋์ฒด
<html : insert/replace "~{๊ฒฝ๋ก :: ํ ํ๋ฆฟ ์ด๋ฆ( ~{::๋์ฒดํ๊ทธ1}, ~{๋์ฒดํ๊ทธ2})}">
<๋์ฒดํ๊ทธ 1>
<๋์ฒดํ๊ทธ 2></๋์ฒดํ๊ทธ 2>
</๋์ฒดํ๊ทธ 1>
</ํ๊ทธ๋ช 1>
Q ์ ๋ ์ด์์์ ์ฌ์ฉํ ๊น?
๋ ์ด์์์ ์ฌ์ฉํ๋ฉด, ๋ด์ฉ(์ ๋ชฉ, ์ฝํ ์ธ ๋ถ๋ถ)์ ๋ณดํธํ๊ณ ๋ฐ๋ ๋ถ๋ถ๋ง ๋์ ์ผ๋ก ํ ๋น์ด ๊ฐ๋ฅํ๋ค.(footer๋ฑ์ ์ผ๊ด์ ์ผ๋ก ๋ฐ๊พธ๋ ๋ฑ)
ํ์ด์ง๊ฐ ๋ง์ ๊ฒฝ์ฐ ์ฌ์ฉํ๊ธฐ ์ ๋ฆฌํ๋ค.(์ ์ฌํ ํ์ด์ง๊ฐ ๋ง์ ๊ฒฝ์ฐ ์ฌ์ฉํ์. ex ์ผ๊ธฐ์ฅ ๋ฑ)
'๋ฐฑ์๋ > Spring-boot' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Intellij] AWS RDS ์ฐ๊ฒฐ/์ฌ์ฉํ๊ธฐ (1) | 2023.11.25 |
---|