ํฐ์คํ ๋ฆฌ ๋ทฐ
๐น Thymeleaf (ํ์๋ฆฌํ)
1. ๊ฐ์
- Thymeleaf๋ ์๋ฒ ์ฌ์ด๋ ์๋ฐ ํ ํ๋ฆฟ ์์ง์ผ๋ก, HTML, XML, JavaScript, CSS, ํ ์คํธ ๋ฑ์ ํ ํ๋ฆฟ์ผ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค.
- ์ฃผ๋ก Spring MVC / Spring Boot์ ํจ๊ป ์ฌ์ฉ๋๋ฉฐ, JSP๋ฅผ ๋์ฒดํ๋ ๋ชฉ์ ์ผ๋ก ๋ง์ด ์ ํ๋ฉ๋๋ค.
2. ํต์ฌ ์ฒ ํ
๐ข Natural Template
- ์์ HTML ํ์ผ์ด ๋ธ๋ผ์ฐ์ ์์ ์ด๋ ค๋ ์ ์์ ์ผ๋ก ๋ณด์ ๋๋ค.
- ์๋ฅผ ๋ค์ด, JSP๋ <%= %> ๊ฐ์ ์ฝ๋ ๋๋ฌธ์ ๋์์ด๋๊ฐ HTML์ ์ง์ ์ด์ด๋ณด๋ฉด ๊นจ์ง์ง๋ง, Thymeleaf๋ th:text, th:if ๊ฐ์ ์์ฑ๋ง ์ถ๊ฐ๋๋ฏ๋ก ์ฌ์ ํ HTML๋ก ๋ ๋๋ง์ด ๊ฐ๋ฅํฉ๋๋ค.
→ ์ฆ, ๊ฐ๋ฐ์ + ๋์์ด๋ ํ์ ์ ์ ํฉํฉ๋๋ค.
3. ์ฃผ์ ๊ธฐ๋ฅ
(1) ํํ์(Expressions)
- ๋ณ์ ํํ: ${...}
- ์ ํ ํํ: *{...} (ํ์ฌ ๊ฐ์ฒด๋ฅผ ๊ธฐ์ค์ผ๋ก ์ ๊ทผ)
- URL ๋งํฌ ํํ: @{...}
์:
<p th:text="${user.name}">ํ๊ธธ๋</p>
<a th:href="@{/user/{id}(id=${user.id})}">์์ธ๋ณด๊ธฐ</a>
(2) ์กฐ๊ฑด ์ฒ๋ฆฌ
<p th:if="${user.active}">ํ์ฑ ์ฌ์ฉ์์
๋๋ค.</p>
<p th:unless="${user.active}">๋นํ์ฑ ์ฌ์ฉ์์
๋๋ค.</p>
(3) ๋ฐ๋ณต ์ฒ๋ฆฌ
<ul>
<li th:each="item : ${items}" th:text="${item}">์์ดํ
</li>
</ul>
(4) ์์ฑ ์นํ
HTML ํ๊ทธ ์์ฑ๋ ๋์ ์ผ๋ก ๋ฐ๊ฟ ์ ์์ต๋๋ค.
<img th:src="@{${user.profileImage}}" alt="ํ๋กํ"/>
(5) Fragment (๊ณตํต ๋ ์ด์์ ๊ด๋ฆฌ)
ํค๋/ํธํฐ ๊ฐ์ ๊ณตํต UI๋ฅผ ๋ฐ๋ก ์ ์ํ๊ณ ์ฌ์ฌ์ฉํ ์ ์์ต๋๋ค.
<!-- header.html -->
<div th:fragment="header">
<h1>์ฌ์ดํธ ํค๋</h1>
</div>
<!-- main.html -->
<html xmlns:th="http://www.thymeleaf.org">
<body>
<div th:replace="header :: header"></div>
<p>๋ฉ์ธ ํ์ด์ง ๋ด์ฉ</p>
</body>
</html>
์ฌ์ดํธ ํค๋
๋ฉ์ธ ํ์ด์ง ๋ด์ฉ
4. Spring Boot์์ ํตํฉ
- spring-boot-starter-thymeleaf ์์กด์ฑ ์ถ๊ฐ:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
- ๊ธฐ๋ณธ์ ์ผ๋ก src/main/resources/templates ํด๋์ ์๋ .html ํ์ผ์ View๋ก ์ฌ์ฉํฉ๋๋ค.
Controller ์์:
@Controller
public class HelloController {
@GetMapping("/hello")
public String hello(Model model) {
model.addAttribute("name", "ํ๊ธธ๋");
return "hello"; // → templates/hello.html ๋ ๋๋ง
}
}
5. ์ฅ์ ๊ณผ ๋จ์
โ ์ฅ์
- ์์ฐ์ค๋ฌ์ด HTML → ํ์ ํจ์จ์ฑ ↑
- Spring๊ณผ ๊ฐ๋ ฅํ ํตํฉ → Model ๋ฐ์ดํฐ ๋ฐ๋ก ๋ ๋๋ง
- JSP ๋๋น ๋ฌ๋์ปค๋ธ ๋ฎ์
- ๋ค์ํ ํ ํ๋ฆฟ ๊ธฐ๋ฅ (๋ฐ๋ณต, ์กฐ๊ฑด, ๋ ์ด์์ ๋ฑ)
โ ๋จ์
- ์๋ฒ ์ฌ์ด๋ ๋ ๋๋ง(SSR)์ด๋ฏ๋ก, SPA(React/Vue)์ ๊ฐ์ ๋์ ์ธ ํด๋ผ์ด์ธํธ ๋ ๋๋ง์ ๋นํด ์ ์ฐ์ฑ์ ๋จ์ด์ง
- ํ๋ฉด์ด ๋ง์ ๋ํ ์๋น์ค์์๋ ํ ํ๋ฆฟ ๊ด๋ฆฌ๊ฐ ๋ณต์กํด์ง ์ ์์
6. ์์ฝ
- Thymeleaf๋ ์๋ฒ์์ HTML์ ๋ง๋ค์ด ๋ณด๋ด๋ SSR ํ ํ๋ฆฟ ์์ง
- JSP๋ณด๋ค ์์ฐ์ค๋ฝ๊ณ ํ์ ์ ์ข์
- Spring Boot์ ๊ฒฐํฉ ์ Model → HTML ํ ํ๋ฆฟ ๋ ๋๋ง ๊ตฌ์กฐ๋ก ๋์
- ์ค์ ๊ท๋ชจ์ ๊ด๋ฆฌ์ ํ์ด์ง, ๊ธฐ์ ๋ด๋ถ ์์คํ , ์ ํต์ ์ธ ์น ์๋น์ค์์ ๋ง์ด ์ฌ์ฉ๋จ
'Skill > html js css' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| Invariant Violation: Expected drag drop context (0) | 2025.07.19 |
|---|---|
| ํด๋ผ์ด์ธํธ๊ฐ ์ ์ฅํ ์ฟ ํค๋ฅผ ์ฝ์ผ๋ ค๋ฉด (1) | 2025.07.17 |
| web worker (2) | 2025.07.14 |
| React.memo์ useMemo (0) | 2025.06.24 |
| react] typescript: field as keyof typeof updated[number] (1) | 2025.06.23 |
๋๊ธ
๊ณต์ง์ฌํญ
์ต๊ทผ์ ์ฌ๋ผ์จ ๊ธ
์ต๊ทผ์ ๋ฌ๋ฆฐ ๋๊ธ
- Total
- Today
- Yesterday
๋งํฌ
TAG
- ul li๋ก ํ ์ด๋ธ
- caniuse
- border-collapse
- Keycode
- object key
- $.extend
- sumifs
- getter
- ์ฌ๋ฌ ์ปฌ๋ผ update
- draw.io
- ์ ํ๋ฐฉํ์
- devtools
- ์ง์ด์ฌ๋
- @ExceptionHandler
- PostgreSQL
- $.each
- excel
- element์์น
- spring
- DatePicker
- Javascript
- JQuery
- CSS
- QueryDSL
- oracle
- lombok
- ํ๋ก์ ํธ๋ช ๋ณ๊ฒฝ
- springboot
- ์ ๊ท์
- setter
| ์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |
๊ธ ๋ณด๊ดํจ
