01. ์์ ๋ฒํผ ์์ฑ
์ ์ฅ์์ ํ๋ ์ญ์ ์ฒ๋ฆฌ์ ๋น์ทํ๊ฒ ๋ฒํผ์ ํด๋ฆญํ์ฌ ์์ ํ ์ ์๋๋ก ๋ง๋ ๋ค.
01-1. boardview.html์์ ๋ฒํผ์ ์ถ๊ฐ
view ํ์ผ์ ์์ ๋ฒํผ์ ์ถ๊ฐํ๊ณ , thymeleaf๋ฅผ ํตํด์ ์ ํํ ๊ฒ์๋ฌผ์ด ์์ ํ์ด์ง๋ก ๋์ด๊ฐ๊ฒ ํ๋ค.
button์ผ ๋
<button th:onclick="|location.href='@{/board/modify/{id}(id=${article.id})}'|">์์ ํ๊ธฐ</button>
a ํ๊ทธ์ผ ๋
<a th:href="@{/board/modify/{id}(id=${board.id})}">์์ ํ๊ธฐ</a>
01-2. ์์ ํ์ด์ง ์์ฑ(boardmodify.html)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>๊ฒ์๋ฌผ ์์ฑ ํผ</title>
</head>
<style>
.layout {
width : 500px;
margin : 0 auto;
margin-top : 40px;
}
.layout input {
width : 100%;
box-sizing : border-box;
}
.layout textarea {
width : 100%;
margin-top : 10px;
min-height : 300px;
}
</style>
<body>
<div class="layout">
<form action="/board/writedo" method="post">
<input name="title" type="text">
<textarea name="content"></textarea>
<button type="submit">์์ฑ</button>
</form>
</div>
</body></html>
board > src > main > resource > templates ์ ์์ ํ์ด์ง๋ฅผ ๋ง๋ ๋ค. (boardwrite์ ๊ฐ์์ ์ฝ๋๋ฅผ ๋ณต์ฌ/๋ถ์ฌ๋ฃ๊ธฐ ํจ)
01-3. BoardController์์ url Mapping

• path variable
- url์ ์ด์ฉํด ํ๋ผ๋ฏธํฐ ์ฒ๋ฆฌ๋ฅผ ํ ์ ์๋ค. Rest API ํธ์ถ ์ ์ฃผ๋ก ์ฌ์ฉํ๊ฒ ๋๋ค.
- @GetMapping path์ {๋ณ์} ๊ดํธ ์์ ๊ดํธ ๊ทธ๋ ์ด์ค๋ฅผ ์ด์ด URL์ ์ฌ์ฉ๋ ๋ณ์ ๋ช
์ ์
๋ ฅํ๋ค.
- GetMapping๋ฟ๋ง ์๋๋ผ ๋ค๋ฅธ Method๋ ๊ฐ๋ฅ(PostMapping, DeleteMapping, PutMapping ๋ฑ)
- PathVariable ์ด๋ ธํ ์ด์ ์ ์ด์ฉํด์ {ํ ํ๋ฆฟ ๋ณ์}์ ๋์ผํ ์ด๋ฆ์ ๊ฐ๋ ํ๋ผ๋ฏธํฐ๋ฅผ ์ถ๊ฐํ๋ฉด ๋๋ค.
๋ก์ง : url์ด ๋ค์ด์์ ๋, {id} ๋ถ๋ถ์ด @PathVariable์ ์ธ์์ด ๋ผ์ Integerํํ์ id๋ก ๋ค์ด์จ๋ค.
์คํํ๊ธฐ

html ํ์ผ์์ ์์ฑํ๋ ์์ ํ๊ธฐ ๋ฒํผ์ด ์๊ฒผ๊ณ , ๋ฒํผ์ ํด๋ฆญํ๋ฉด /board/modify ํ์ด์ง๋ก ์ด๋ํ ๊ฒ์ ๋ณผ ์ ์๋ค.
๋ํ, ์์ธ ํ์ด์ง์ url์ ?id=3์ผ๋ก ๋์ด ์์ง๋ง, ์์ ํ์ด์ง์ url์ ๋ณด๋ฉด 3์ผ๋ก ๋์ด ์๋ค. ์ด๋ @PathVariable๋ฅผ ์ฌ์ฉํด์ url์ด ๊น๋ํ๊ฒ ์ฒ๋ฆฌ๋ ๊ฒ์ด๋ค.
02. ์์ธ ํ์ด์ง์ ๊ธ์ด ์์ ํ์ด์ง์ ๊ทธ๋๋ก ๋์ด์ค๋๋ก ์ฒ๋ฆฌ
์์ ํ์ด์ง์๋ ๊ธฐ์กด์ ์ ํ์๋ ๊ธ์์ ์์ ํ ์ ์์ด์ผ ํ๋ค. ์์ ๋ฒํผ์ ํด๋ฆญํ๋ฉด ์์ธ ํ์ด์ง์ ์๋ ๊ธ์ด ์์ ํ์ด์ง์๋ ๋์ด์ค๊ฒ ํ๋ค. ( modify ํ์ผ์ ๊ธฐ์กด ๊ฐ์ด ๋์ด์์ผ ํ๋ค.)
02-1. BoardController ์์ (Model ์ถ๊ฐ)

• Model - JSP์ ์ปจํธ๋กค๋ฌ์์ ์์ฑ๋ ๋ฐ์ดํฐ๋ฅผ ๋ด์์ ์ ๋ฌํ๋ ์ญํ ์ ํ๋ ์กด์ฌ์ด๋ค. Model ๊ฐ์ฒด๋ Controller ์์ ์์ฑ๋ ๋ฐ์ดํฐ๋ฅผ ๋ด์ View ๋ก ์ ๋ฌํ ๋ ์ฌ์ฉํ๋ ๊ฐ์ฒด์ด๋ค.
- model.addAttribute(String name, Object value) : value ๊ฐ์ฒด๋ฅผ name ์ด๋ฆ์ผ๋ก ์ถ๊ฐํจ. ๋ทฐ ์ฝ๋์์๋ name์ผ๋ก ์ง์ ํ ์ด๋ฆ์ ํตํด์ value๋ฅผ ์ฌ์ฉํจ.
์๋๋ ์์์ ์์ฑํ๋ boardView ์ปจํธ๋กค๋ฌ์ธ๋ฐ boardModify ์ปจํธ๋กค๋ฌ์ ์ฝ๋๊ฐ ๊ฐ๋ค. ์ด๋ ์์ธ ํ์ด์ง์ ๋ด์ฉ์ด ์์ ํ์ด์ง์์๋ ๊ฐ์์ผ ํ๊ธฐ ๋๋ฌธ์ ๋์ผํ๊ฒ ์์ฑํด์ผ ํ๋ค.

02-2. boardmodify.html ์์ (thymeleaf ์ถ๊ฐ)
<!DOCTYPE html>
<html lang="en" xmlns:th="http://thymeleaf.org">
.
.
.
<body>
<div class="layout">
<form action="/board/writedo" method="post">
<input name="title" type="text" th:value="${article.title}">
<textarea name="content" th:text="${article.content}"></textarea>
<button type="submit">์์ </button>
</form>
</div>
</body></html>
• th:text ์์ฑ
- Thymeleaf์ th:text ์์ฑ์ ์์ ์ ํ ์คํธ ๋ด์ฉ์ ์ค์ ํ๋ ๋ฐ ์ฌ์ฉ๋๋ค.
- ๋ํ ์ด๋ ํ์ค HTML ํ ์คํธ ์์ฑ์ ๋์ฒดํ๋ค.
- ๋ฐ๋ผ์ ์ ๋ชฉ, ๋จ๋ฝ, ๋ ์ด๋ธ ๋ฑ๊ณผ ๊ฐ์ ํ ์คํธ ์ฝํ ์ธ ๋ฅผ ์ง์ํ๋ ๋ชจ๋ HTML ์์ ๋ด์ ์ด๋ฅผ ๋ฃ์ ์ ์๋ค.
- ๋ํ ์ด ์์ฑ์ ์ฌ์ฉํ์ฌ ์น ํ์ด์ง์ ์ ๋ชฉ๊ณผ ๊ฐ์ ๋์ ํ ์คํธ ์ฝํ ์ธ ๋ฅผ ํ์ํ ์ ์๋ค.
• th:value ์์ฑ
- ๋ฐ๋ฉด์ th:value ์์ฑ์ ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ์์ ์ ๋ ฅ์ด ํ์ํ ์์์ ๊ฐ์ ์ค์ ํ๋ ๋ฐ ์ฌ์ฉ๋๋ค . ์ ๋ ฅ ํ๋, ํ์ธ๋, ๋ผ๋์ค ๋ฒํผ, ๋๋กญ๋ค์ด๊ณผ ๊ฐ์ ์์๊ฐ ์ด ๋ฒ์ฃผ์ ์ํ๋ค.
- value ์์ฑ์ด ์๋ ๋ชจ๋ ์์์์ ํ์ค HTML value ์์ฑ ๋์ ์ด ์์ฑ์ ์ฌ์ฉํ ์ ์๋ค . ๋ฐ๋ผ์ ํด๋น ํน์ฑ์ ์ง์ํ์ง ์๋ ์์(์: ๋จ๋ฝ)์ ์ถ๊ฐํด๋ ์๋ฌด๋ฐ ํจ๊ณผ๊ฐ ์๋ค.
• ์ถ๊ฐ๋ก ๋ฒํผ ์ด๋ฆ๋ '์์ '์ผ๋ก ๋ฐ๊ฟ์ฃผ์๋ค.
์ฐธ๊ณ ๋งํฌ โ https://www.baeldung.com/java-thymeleaf-text-vs-value
์คํํ๊ธฐ

์คํ ๊ฒฐ๊ณผ, '์์ ํ๊ธฐ' ๋ฒํผ์ ํด๋ฆญํ๋๋ ์์ธ ํ์ด์ง(/board/view?id=3)์ ์ ๋ชฉ๊ณผ ๋ด์ฉ์ด ์์ ํ์ด์ง(/board/modify/3)์์๋ ๋์ผํ๊ฒ ๋์ค๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
03. ์์ ๋ฒํผ์ ํด๋ฆญํ๋ฉด ๊ธ์ด ๋ณ๊ฒฝ๋๋๋ก ์ฒ๋ฆฌ
03-1. boardmodify.html์์ <form> ํ๊ทธ ์์
<form th:action="@{/board/update/{id}(id=${article.id})}" method="post">
ํ์๋ฆฌํ๋ฅผ ๊ฑธ๊ณ , ๋ด์ฉ์ ์์ ํ๋ฉด ์์ ํ์ด์ง๋ก ์ด๋ํ๊ฒ๋ ํ๋ค.
03-2. BoardController์์ url Mapping

์ง๊ธ๊น์ง ์์์๋ GetMapping์ ์ผ๋๋ฐ ์ฌ๊ธฐ์๋ ์ PostMapping์ ์ฌ์ฉํ ๊น?
• @PostMapping์ HTTP Post Method์ ํด๋นํ๋ ๋จ์ถ ํํ์ผ๋ก ์๋ฒ์ ๋ฆฌ์์ค๋ฅผ ๋ฑ๋ก(์ ์ฅ)ํ ๋ ์ฌ์ฉํ๋ค.
- POST ๋ฐฉ์์ ๋ฆฌ์์ค๋ฅผ ์์ฑ ๋ฐ ์์ ํ๊ธฐ ์ํด ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ผ ๋ ์ฃผ๋ก ์ฌ์ฉ๋๋ค.
- POST ๋ฐฉ์์ GET ๋ฐฉ์๊ณผ ๋ค๋ฅด๊ฒ Http Body์ ๋ฆฌ์์ค๊ฐ ๋ด๊ฒจ ์ ์ก๋๊ธฐ ๋๋ฌธ์ ๋ฐ์ดํฐ์ ์ ํ๋ ์๊ณ , ๋น๊ต์ ๋ฐ์ดํฐ ์ ์ถ๋ก๋ถํฐ ์์ ํ๋ค.
• @GetMapping ์ HTTP Get Method์ ํด๋นํ๋ ๋จ์ถ ํํ์ผ๋ก ์๋ฒ์ ๋ฆฌ์์ค๋ฅผ ์กฐํํ ๋ ์ฌ์ฉํ๋ค.
- GET ๋ฐฉ์์ ํด๋ผ์ด์ธํธ์์ ์๋ฒ๋ก ์ด๋ ํ ๋ฆฌ์์ค๋ก ๋ถํฐ ์ ๋ณด๋ฅผ ์์ฒญํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ ๋ฉ์๋์ด๋ค.
- ๊ฐ์ ๋ฆฌ์์ค๋ก๋ถํฐ ์ ๋ณด๋ฅผ ์์ฒญํ๋ฉด ๊ทธ ๊ฐ์ ๋์ผํ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ์์ค๊ธฐ ๋๋ฌธ์ ์กฐํํ๋ ๋ฐ ์์ฃผ ์ฌ์ฉ๋๋ค.
- ๋์ฉ๋ ๋ฐ์ดํฐ์ ์ฌ์กฐํ๋ฅผ ๋ง๊ธฐ ์ํด ์ฒซ ์์ฒญ์ ์บ์๋ฅผ ํด๋๊ณ ์ฌ์กฐํ์ ์๋ฒ ์์ฒญ ์์ด ์บ์ ๋ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ๋ค.
- GET ๋ฐฉ์์ ์ฟผ๋ฆฌ์คํธ๋ง์ผ๋ก ์ ์ก๋๊ธฐ ๋๋ฌธ์ POST ๋ฐฉ์๊ณผ ๋ฌ๋ฆฌ ๋ฐ์ดํฐ์ ๊ธธ์ด๊ฐ ์ ํ๋๋ฉฐ, ๋ณด์์๋ ์ทจ์ฝํ๋ค๋ ๋จ์ ์ด ์๋ค.
์คํํ๊ธฐ

3๋ฒ ๊ธ์ ์ ๋ชฉ๊ณผ ๋ด์ฉ์ ๋ณ๊ฒฝํ๊ณ ๋ฒํผ์ ๋๋ฅด๋, ๋ฆฌ์คํธ ํ์ด์ง๋ก ๋์ด๊ฐ๊ณ ์ ๋ชฉ์ด ๋ณ๊ฒฝ๋๋ค. ๋ณ๊ฒฝ๋ ๊ฒ์๋ฌผ์ ์ ํํ๋ฉด ์๋์ ๊ฐ์ด, ์๋ก ์์ฑํ ๋ด์ฉ๋ค์ ๊ธฐ์กด์ ์๋ ๋ด์ฉ์ ๋ฎ์ด์์ฐ๊ณ , ์์ ๋ ๋ด์ฉ์ด ์ ์ฉ๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
์์ ๋ ๊ฒ์๋ฌผ

โป IntelliJ ๋จ์ถํค
Shift๋ฅผ ๋ ๋ฒ ์ฐ์ํด์ ๋๋ฅด๋ฉด ํ์ผ ์ด๋ฆ, ์ค์ , ํ๋ ์ด๋ฆ ๋ฑ ๋ค์ํ๊ฒ ๊ฒ์ํด์ ์ํ๋ ๊ฑธ ์ฐพ์ ์ ์๋ค.
'๐ป PROJECT > [์คํ๋ง ๋ถํธ] ๊ฒ์ํ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [์คํ๋ง ๋ถํธ] 9. ๊ฒ์ํ ๋ง๋ค๊ธฐ ํ์ด์ง ์ฒ๋ฆฌ (2) | 2023.10.27 |
|---|---|
| [์คํ๋ง ๋ถํธ] 8. ๊ฒ์ํ ๋ง๋ค๊ธฐ ๋ฉ์์ง ์ฐฝ ๋์ฐ๊ธฐ (0) | 2023.10.26 |
| [์คํ๋ง ๋ถํธ] 6. ๊ฒ์ํ ๋ง๋ค๊ธฐ ์ญ์ ์ฒ๋ฆฌ (0) | 2023.10.25 |
| [์คํ๋ง ๋ถํธ] 5. ๊ฒ์ํ ๋ง๋ค๊ธฐ ๊ฒ์๋ฌผ ๋ฆฌ์คํ (0) | 2023.10.24 |
| [์คํ๋ง ๋ถํธ] 4. ๊ฒ์ํ ๋ง๋ค๊ธฐ ๊ฒ์๊ธ ์์ฑํผ ์์ฑ๊ณผ ์ฒ๋ฆฌ (1) | 2023.10.23 |