01. ํ ์คํธ ํ๋ก์์
ํ ์คํธ ๋ฐ์ดํฐ๋ฅผ ๋ง๋๋ ๊ฒ๊ณผ ๊ฐ๋ค. ๊ฒ์๊ธ ๋ฆฌ์คํธ๋ฅผ ๋ณด๋ ค๋ฉด ์ด๋ ์ ๋์ ๊ธ์ด ์์ด์ผ ํ๋๋ฐ ๋ฐ์ดํฐ๊ฐ ์์ผ๋ฉด ๊ฐ๋ฐํ๋๋ฐ ๋ถํธํ๋ค. ์ฆ, ์ง๊ด์ ์ผ๋ก ๋ณด๊ณ ๊ฐ๋ฐํ๊ธฐ ์ํ ๊ฒ์ด๋ค.

์คํ ๊ฒฐ๊ณผ

120๊ฐ๊น์ง ์์ฑ๋๊ฒ ํ๋๋ฐ ํ ์ด๋ธ์ ๊ฒฐ๊ณผ๋ฅผ ๋ณด๋ฉด 120๊ฐ์ ๋ฐ์ดํฐ ์์ฑ๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
02. ๋ฆฌ์คํธ ํ์ด์ง ์์ฑ

board > main > resource > templates์ ๊ฒ์๋ฌผ ๋ฆฌ์คํธ๋ฅผ ๋ง๋ค์ด์ค html ํ์ผ์ ์์ฑํ๋ค. (boardlist)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>๊ฒ์๊ธ ๋ฆฌ์คํธ ํ์ด์ง</title>
</head>
<style>
.layout {
width : 500px;
margin : 0 auto;
margin-top : 40px;
}
table, th, td {
border: 1px solid #bcbcbc;
}
td {
text-align: center;
}
</style>
<body>
<div class="layout">
<table border=1>
<thead>
<tr>
<th>๊ธ๋ฒํธ</th>
<th>์ ๋ชฉ</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>์ ๋ชฉ์
๋๋ค.</td>
</tr>
</tbody>
</table>
</div>
</body>
</html>
html ์ฝ๋๋ ์ค์ํ ๊ฒ ์๋๋ฏ๋ก ๋์์ธ์ ์ ๊ฒฝ์ฐ์ง ์๋๋ค.
02-1. BoardController์ ๋ฉ์๋ ์ถ๊ฐ

BoardController์ List๋ฉ์๋๋ฅผ ์ถ๊ฐํ๋ค. ์์์ ๋ง๋ค์๋ html ํ์ผ์ ์ด๋ฆ๊ณผ ๋์ผํ๊ฒ url์ ์ง์ ํด์ค๋ค.
์คํํ๊ธฐ(http://localhost:8080/board/list)

์คํ ๊ฒฐ๊ณผ ๋ฆฌ์คํธ ํ์ด์ง๊ฐ ๋์จ ๊ฑธ ๋ณผ ์ ์๋ค.
02-2. BoardService์ ์ถ๊ฐ
๋ค์์ผ๋ก ๊ธ์ ๋ถ๋ฌ์ฌ ๋ฉ์๋๊ฐ ํ์ํ๋ฐ ์ด๋ ์๋น์ค์์ ์ฒ๋ฆฌ๋ฅผ ํด์ค๋ค.

• Board - Entity ํด๋์ค
• boardRepository - JPA Repository ์ธํฐํ์ด์ค๋ฅผ ์์๋ฐ์๋ ์ธํฐํ์ด์ค์ด๋ค.
• findAll - JpaRepository ๊ธฐ๋ณธ์ ์ธ CRUD ๋ฉ์๋๋ฅผ ์ ๊ณตํ๋๋ฐ ๊ทธ ์ค์ findAll() ๋ฉ์๋๊ฐ ์๋ค. ์กฐ๊ฑด ์์ด ํ ์ด๋ธ์ ์ ์ฒด ๋ ์ฝ๋๋ฅผ ์กฐํํ๋ค.
์ฌ๊ธฐ์ Board๋ผ๋ ํด๋์ค๊ฐ ๋ด๊ธด ๋ฆฌ์คํธ๋ฅผ ๋ฐํํด์ค๋ค.
02-3. BoardController ์์
๋ฐ์ดํฐ๋ฅผ ๋ด์์ ์ฐ๋ฆฌ๊ฐ ๋ณด๋ ํ์ด์ง๋ก ๋ณด๋ด์ค์ผ ํ๋๋ฐ ์ด๋ ์ฐ๋ ๊ฒ์ด Model์ด๋ค.

• Model - JSP์ ์ปจํธ๋กค๋ฌ์์ ์์ฑ๋ ๋ฐ์ดํฐ๋ฅผ ๋ด์์ ์ ๋ฌํ๋ ์ญํ ์ ํ๋ ์กด์ฌ์ด๋ค. Model ๊ฐ์ฒด๋ Controller ์์ ์์ฑ๋ ๋ฐ์ดํฐ๋ฅผ ๋ด์ View ๋ก ์ ๋ฌํ ๋ ์ฌ์ฉํ๋ ๊ฐ์ฒด์ด๋ค.
- model.addAttribute(String name, Object value) : value ๊ฐ์ฒด๋ฅผ name ์ด๋ฆ์ผ๋ก ์ถ๊ฐํจ. ๋ทฐ ์ฝ๋์์๋ name์ผ๋ก ์ง์ ํ ์ด๋ฆ์ ํตํด์ value๋ฅผ ์ฌ์ฉํจ.
ํด์ํ๋ฉด, "List"๋ผ๋ ์ด๋ฆ์ผ๋ก ๋ณด๋ผ๊ฑด๋ฐ boardService์ boardList๋ฅผ ๋ด์์ ๋ณด๋ผ๊ฑฐ๋ผ๋ ๋ง์ด๋ค. boardService์ boardList๋ฅผ ์คํํ๋ฉด ๋ฐํ๋ ๋ฆฌ์คํธ๋ฅผ "List"๋ผ๋ ์ด๋ฆ์ผ๋ก ๋ฐ์์ ๋๊ธด๋ค.
03. Thymeleaf
์ด์ ๋ฐ์์จ ๋ฐ์ดํฐ๋ค์ ์ผ์ผ์ด ์ถ๋ ฅํด์ค์ผ ํ๋ค. ์ด๋ ์ฐ๋ ๊ฒ์ด thymleaf์ธ๋ฐ, ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์์ ์ฒ๋ฆฌํด์ฃผ๋ ์ญํ ์ ํ๋ค.
03-1. boardlist.html ์์
<!DOCTYPE html>
<html lang="en" xmlns:th="http://thymeleaf.org">
.
.
.
<tbody>
<tr th:each="board : ${List}">
<td th:text="${board.id}">1</td>
<td th:text="${board.title}">์ ๋ชฉ์
๋๋ค.</td>
</tr>
</tbody>
</table>
</div>
</body></html>
ํ์๋ฆฌํ๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ thyeleaf๋ฅผ ์ฌ์ฉํ html ํ์ผ์ ํ์๋ฆฌํ url ์ถ๊ฐํด์ค์ผ ํ๋ค. (๊ทธ ์ ์ ํ์๋ฆฌํ ์์กด์ฑ ์ฃผ์ ํ์ธ)
• xmlns:th - ํ์๋ฆฌํ์ th์์ฑ์ ์ฌ์ฉํ๊ธฐ ์ํด ์ ์ธ๋ ๋ค์์คํ์ด์ค์ด๋ค.
• th : each - ๋ฐ๋ณต ์ถ๋ ฅ
• th : text
- ์ปจํธ๋กค๋ฌ์์ ์ ๋ฌ๋ฐ์ ๋ฐ์ดํฐ์ ์ ๊ทผํ ์ ์๋ค.
- ํด๋น ์์ฑ์ ์ผ๋ฐ์ ์ธ ํ ์คํธ ํ์์ผ๋ก ํ๋ฉด์ ์ถ๋ ฅํ๋ค.
์คํํ๊ธฐ(http://localhost:8080/board/list)

์คํ ๊ฒฐ๊ณผ, DB์์ ๋ฃ์ด์คฌ๋ ํ ์คํธ ๋ฐ์ดํฐ 120๊ฐ๊ฐ ๋ฆฌ์คํธ ํ์ด์ง์์๋ ๋ณด์ด๊ฒ ๋๋ค.
04. ์์ธ ํ์ด์ง ์์ฑ
๋ฆฌ์คํธ ํ์ด์ง๊น์ง ๊ตฌํ์ด ์๋ฃ ๋์์ผ๋ ์ด์ ์ ๋ชฉ์ ๋๋ฅด๋ฉด ์์ธ ํ์ด์ง๋ก ๋์ด๊ฐ๋๋ก ๊ตฌํํ๋ค.

board > main > resource > templates์ ์์ธ ํ์ด์ง๋ฅผ ๋ณด์ฌ์ค html ํ์ผ์ ์์ฑํ๋ค. (boardview)
04-1. boardview.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>๊ฒ์๊ธ ์์ธ ํ์ด์ง</title>
</head>
<body>
<h1>์ ๋ชฉ์
๋๋ค.</h1>
<p>๋ด์ฉ์ด ๋ค์ด๊ฐ ๋ถ๋ถ์
๋๋ค.</p>
</body>
</html>
04-2. BoardController์ ๋ฉ์๋ ์ถ๊ฐ

์คํํ๊ธฐ(http://localhost:8080/board/view)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>๊ฒ์๊ธ ์์ธ ํ์ด์ง</title>
</head>
<body>
<h1>์ ๋ชฉ์
๋๋ค.</h1>
<p>๋ด์ฉ์ด ๋ค์ด๊ฐ ๋ถ๋ถ์
๋๋ค.</p>
</body>
</html>

์ปจํธ๋กค๋ฌ๋ฅผ ํตํด์ ๋ง๋ค์๋ ์์ธ ํ์ด์ง๊ฐ ๋ณด์ด๋ ๊ฒ์ ์ ์ ์๋ค. ์ด์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์์ ์ฒ๋ฆฌํด์ฃผ๋ ์์ ์ ํด์ผ ํ๋ค.
04-3. BoardService์ ๋ฉ์๋ ์ถ๊ฐ
๊ธ๋ง๋ค ๋์ด์ค๋ ๋ฐ์ดํฐ๊ฐ ๊ฐ๊ฐ ๋ฌ๋ผ์ผ ํ๋ค.

• findById
- ์ค์ DB ์ ์์ฒญํด์ ์ํฐํฐ๋ฅผ ๊ฐ์ ธ์จ๋ค.
- ์ ํํ ๋งํ๋ฉด ์์์ฑ ์ปจํ ์คํธ์ 1์ฐจ ์บ์๋ฅผ ๋จผ์ ํ์ธํ๊ณ ๋ฐ์ดํฐ๊ฐ ์์ผ๋ฉด ์ค์ DB ์ ๋ฐ์ดํฐ๊ฐ ์๋์ง ํ์ธํ๋ค.
• get
- optional์ด๋ค. ๋ฐํํ์ ์ ๊ฐ์ธ์ฃผ๋๋ฐ Optional ๋ด๋ถ์ ๋ด๊ธด ๊ฐ์ฒด๋ฅผ ๋ฐํํ๋ค.
- null์ผ ์๋ ์๋ ๊ฐ์ฒด๋ ๋ค๋ฃฐ ์ ์๋๋ก ๋๋๋ค.
โป JPA ๋ฅผ ์ฌ์ฉํ ๋ ID ๊ฐ์ผ๋ก ์ํฐํฐ๋ฅผ ๊ฐ์ ธ์ค๋ ๋ ๊ฐ์ง ๋ฉ์๋๊ฐ ์กด์ฌํ๋ค. getById์ findById๊ฐ ์๋ค.
04-4. BoardController ์์

localhost:8080/board/view?id=1 url๋ก ๊ฐ๋ฉด url์ ์๋ 1์ด Integer id์ชฝ์ 1์ด ๋ค์ด๊ฐ๊ณ , ๋ค์ด๊ฐ 1์ด boardview๋ฉ์๋์ id๋ก ๋ค์ ๋ค์ด๊ฐ์ ๊ฒ์๊ธ์ ๋ถ๋ฌ์จ๋ค.
get ๋ฐฉ์์ ์ ๋ ฅํ ๋ฐ์ดํฐ ๊ฐ์ URL์ ๋ถ์ฌ์ ์ ์กํ๋ ๊ฒ์ด๋ค. url์์ ? ๋ค์๋ ํ๋ผ๋ฏธํฐ๋ผ๊ณ ํ๋ค. ๋ค์ ๋งํด ํ๋ผ๋ฏธํฐ ๊ฐ์ ๊ฐ์ ธ์์ id์ ์ง์ด๋ฃ์ ํ์ ๋ค์ ์น์ ๋ณด์ฌ์ฃผ๋ ๋ฐฉ์์ด๋ค. (์ ํํ ์ค๋ช ์ ์๋๋ค.)
04-5. boardView.html์ Thyeleaf ์ถ๊ฐ
๊ทธ๋ฌ๋ ๋๊ฒจ์ฃผ๊ธฐ๋ง ํ๊ณ ์ถ๋ ฅํ๋ ๋ถ๋ถ์ด ์์ผ๋ฏ๋ก thymeleaf ์ถ๊ฐ
<!DOCTYPE html>
<html lang="en" xmlns:th="http://thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>๊ฒ์๊ธ ์์ธ ํ์ด์ง</title>
</head>
<body>
<h1 th:text="${article.title}">์ ๋ชฉ์
๋๋ค.</h1>
<p th:text="${article.content}">๋ด์ฉ์ด ๋ค์ด๊ฐ ๋ถ๋ถ์
๋๋ค.</p>
</body>
</html>
์คํํ๊ธฐ(localhost:8080/board/view?id=1)



1 ์๋ฆฌ์ ๋ค๋ฅธ ์ซ์๋ฅผ ๋ฃ์ผ๋ฉด ๊ฐ์ ๋ง๋ ๊ฒ์๋ฌผ์ด ๋ฌ๋ค.
04-6. boardview.html ์์
์ ๋ชฉ์ ๋๋ ์ ๋ ํด๋น ํ์ด์ง๋ก ๋์ด๊ฐ๊ฒ ํ๊ธฐ ์ํด์ ์๋์ ๊ฐ์ด ์์ ํ๋ค.
<!DOCTYPE html>
.
.
.
<tbody>
<tr th:each="board : ${List}">
<td th:text="${board.id}">1</td>
<td>
<a th:text="${board.title}" th:href="@{/board/view(id=${board.id})}"></a>
</td>
</tr>
</tbody>
</table>
</div>
</body></html>
์คํํ๊ธฐ(localhost:8080/board/list)

์ด์ ๊ณผ ๋ค๋ฅด๊ฒ ์ ๋ชฉ์ ํด๋ฆญํ ์ ์๊ฒ ๋ง๋ค์ด์ก๋ค. "์ ๋ชฉ ์์ฑ ํ ์คํธ" ์ ๋ชฉ์ ํด๋ฆญํ๋ฉด ํด๋น ์์ธ ํ์ด์ง๋ก ๋์ด๊ฐ๋ ๊ฒ์ ๋ณผ ์ ์๋ค.

'๐ป PROJECT > [์คํ๋ง ๋ถํธ] ๊ฒ์ํ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [์คํ๋ง ๋ถํธ] 7. ๊ฒ์ํ ๋ง๋ค๊ธฐ ์์ ์ฒ๋ฆฌ (1) | 2023.10.26 |
|---|---|
| [์คํ๋ง ๋ถํธ] 6. ๊ฒ์ํ ๋ง๋ค๊ธฐ ์ญ์ ์ฒ๋ฆฌ (0) | 2023.10.25 |
| [์คํ๋ง ๋ถํธ] 4. ๊ฒ์ํ ๋ง๋ค๊ธฐ ๊ฒ์๊ธ ์์ฑํผ ์์ฑ๊ณผ ์ฒ๋ฆฌ (1) | 2023.10.23 |
| [์คํ๋ง ๋ถํธ] 3. ๊ฒ์ํ ๋ง๋ค๊ธฐ ํ ์ด๋ธ ์์ฑ (0) | 2023.10.22 |
| [์คํ๋ง ๋ถํธ] 2. ๊ฒ์ํ ๋ง๋ค๊ธฐ ํ๋ก์ ํธ ์์ฑ (1) | 2023.10.22 |