1 ๋ถ„ ์†Œ์š”

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๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค.

  1. ๋ณ€์ˆ˜์‹: ${}
  2. ๋ฉ”์‹œ์ง€ ๋ฐฉ์‹: #{}
  3. ๊ฐ์ฒด๋ณ€์ˆ˜์‹: *{}
  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

ํƒœ๊ทธ: ,

์นดํ…Œ๊ณ ๋ฆฌ:

์—…๋ฐ์ดํŠธ:

๋Œ“๊ธ€๋‚จ๊ธฐ๊ธฐ