๐[Spring] Thymeleaf๋?
Thymeleaf๋?
Thymeleaf๋ Spring์์ ๊ฐ์ฅ ๋ฐ๊ณ ์๋ View Template(๋ทฐ ํ
ํ๋ฆฟ)
์ด๋ค.
๋ทฐ ํ
ํ๋ฆฟ์ ์ปจํธ๋กค๋ฌ๊ฐ ์ ๋ฌํ๋ ๋ฐ์ดํฐ๋ฅผ ์ด์ฉํด ๋์ ์ผ๋ก ํ๋ฉด์ ๊ตฌ์ฑํ ์ ์๊ฒ ํด์ค๋ค.
๊ธฐ์กด์๋ JSP + Spring์ ์กฐํฉ์ ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉํ์ง๋ง, ์์ฆ๋ค์ด Thymeleaf์ ์ ์ ์จ๋ ๋ง์์ง๊ณ ์๋ค.
Thymeleaf๋ ํ
ํ๋ฆฟ ์์ง ์ญํ ์ ์ํํด ๋์ ์ปจํ
์ธ ์๋ฆฌ ํ์์๋ฅผ ํตํด ํ
ํ๋ฆฟ(html ํ์ผ)์ ๋ง๋ค ์ ์๋ค.
์ด๋ฌํ ํํ์์ th:text
, th:if
, th:each
๋ฑ๊ณผ ๊ฐ์ ๊ธฐํธ๋ก ์ฌ์ฉ๋๋ค.
๋์ ์ผ๋ก ๊ตฌ์ฑ?
Thymeleaf๋ ํ๋ฉด์ ๋์ ์ผ๋ก ๊ตฌ์ฑํ๋ค๊ณ ํ๋๋ฐ ์ด๊ฒ ๋ญ๊น?
์น์ ์ ์ ์น๊ณผ ๋์ ์น์ผ๋ก ๋๋๋ค.
๋จผ์ ์ ์ ์น์ ๋ง๊ทธ๋๋ก ๋ณ๋ค๋ฅธ ๋์์ด ์๋ ์น์ด๋ค.
๋ํ์ ์ผ๋ก ํ์ฌ ์๊ฐ ํ์ด์ง๊ฐ ์๋ค.
๋ณ๋ค๋ฅธ ๋ก๊ทธ์ธ์ด ์๊ณ , ํ์ด์ง๋ ๋๋ฐ์ด์ค, ์ํฉ์ ์๊ด ์์ด ํญ์ ์ผ์ ํ ํ๋ฉด์ ์ ๊ณตํ๋ค.
๋ฐ๋ฉด ๋์ ์น์ ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ๋ฐ๋ผ ๋ค์ํ ํ๋ฉด์ ์ ๊ณตํ๋ค.
๋ก๊ทธ์ธ ํ ๋ง์ดํ์ด์ง๋ฅผ ๋ค์ด๊ฐ๋ฉด ๊ฐ๊ธฐ ๋ค๋ฅธ ์ ๋ณด๋ฅผ ํ์ธํ ์ ์๋ ๊ฒ ์ฒ๋ผ.
์ด๋ฐ ๊ฒ ์ฒ๋ผ ๋์ ์น์ ๊ฒฝ์ฐ์๋ ์น ์๋ฒ์์ ๋จ์ํ HTML, CSS, JavaScript ํ์ผ๋ง ์ ๊ณตํ๋ ๊ฒ์ด ์๋๋ผ, ์น ์ดํ๋ฆฌ์ผ์ด์
์๋ฒ(WAS)
์ ์ง์ ํต์ ์ ํด์ผํ๋ค.
์์กด์ฑ ์ถ๊ฐ
Thymeleaf๋ Spring์์ ๋ฐ๊ณ ์๋ ํ ํ๋ฆฟ์ด๊ธด ํ์ง๋ง, JSP์ ๋ฌ๋ฆฌ ์์กด์ฑ์ ๋ฐ๋ก ์ถ๊ฐํด์ค์ผ ํ๋ค.
[pom.xml]
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
[build.gradle]
dependencies {
...
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
}
์์
Thymeleaf๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ์์๋ 4๊ฐ์ง๊ฐ ์๋ค.
- ๋ณ์์: ${}
- ๋ฉ์์ง ๋ฐฉ์: #{}
- ๊ฐ์ฒด๋ณ์์: *{}
- ๋งํฌ ๋ฐฉ์: @{}
์๋์ ๊ฐ์ ์ปจํธ๋กค๋ฌ๊ฐ ์๋ค๊ณ ํด๋ณด์.
[WebController]
@RequestMapping("/test")
public String test(Model model) {
model.addAttribute("test","model๊ฐ");
return "test";
}
Model
์ ๊ฐ์ฒด์ ๋ณด๋ฅผ ๋ปํ๊ณ model์ addAttribute()๋ฅผ ํตํด ๊ฐ์ ์ถ๊ฐํด์ค๋ค.
์ด ๊ฐ์ key:value
์ ํ์์ผ๋ก, test:model๊ฐ
์ผ๋ก ๋ค์ด๊ฐ๊ฒ๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ด ๊ฐ์ html๋ณ์๋ก ๋๊ธธ ์ ์๋ค.
[test.html]
<!DOCTYPE html>
<html lang="ko" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<p th:text="${test}"></p>
</body>
</html>
์์ ๊ฐ์ด <html lang="ko" xmlns:th="http://www.thymeleaf.org">๋ฅผ ์ค์ ํด์ค๋ค.
์ด๋ โ์ด html ๋ฌธ์๋ Thymeleaf๋ฅผ ์ฌ์ฉํ๋คโ๋ผ๋ ์๋ฏธ์ด๋ค.
๊ทธ๋ฆฌ๊ณ th:text=${test}
์ ๊ฐ์ ํ๊ทธ๋ฅผ ์ฌ์ฉํ๊ณ , ์๊น ์์์ test:model๊ฐ
์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๊ธฐ ์ํด ํค ๊ฐ์ธ test
๋ฅผ ํ๊ทธ์ ๊ฐ์ธ์ฃผ๋ฉด๋๋ค.
์ฐธ๊ณ ์๋ฃ
https://lifere.tistory.com/entry/Spring-Boot-Thymeleaf-%ED%83%80%EC%9E%84%EB%A6%AC%ED%94%84-%EC%82%AC%EC%9A%A9%EB%B0%A9%EB%B2%95-%EB%B0%8F-%EC%8B%9C%EC%9E%91%ED%95%98%EA%B8%B0
https://m.blog.naver.com/PostView.naver?blogId=bgpoilkj&logNo=221982228705&categoryNo=20&proxyReferer=
https://maily.so/grabnews/posts/ce76c9
๋๊ธ๋จ๊ธฐ๊ธฐ