01. HTML ํ์ผ ์์ฑ

board > src > main > resources > templates์ HTML ํ์ผ์ ์์ฑํ๋ค.
๊ทธ๋ฆฌ๊ณ ์๋์ ๊ฐ์ด ์์ฑํด์ค๋ค.

ํ๊ทธ ํด์
• <title> - ํ์ดํ ๋ช ์ '๊ฒ์๋ฌผ ์์ฑ ํผ'์ด๋ผ๊ณ ํ๋ค.
• <div> - ๋ถํ ํ๋ค๋ ๋ป์ Division์ ์ค๋ง๋ก, HTML๋ฌธ์ ๋ด์์ ํ ๊ฐ์ ๊ฐ๋ก ๊ณต๊ฐ(Block)์ ๋ง๋๋ ํ๊ทธ์ด๋ค.
- id, class ์์ฑ
๋ชจ๋ ํ๊ทธ์๋ id ์์ฑ๊ณผ class ์์ฑ์ ์ง์ ํด ์ค ์ ์๋๋ฐ, ์ด๋ฅผ ์ด์ฉํ๋ฉด CSS๋ JavaScript์์ ํ๊ทธ๋ฅผ ์ข๋ ์ฝ๊ฒ ๋ค๋ฃฐ ์ ์๋ค. id๋ ์์น์ ํ๋์ id๋น ํ๋์ ํ๊ทธ์๋ง ์ ์ฉ ํ ์ ์์ผ๋ฉฐ, class๋ ํ๋์ class๋ฅผ ์ฌ๋ฌ ํ๊ทธ์ ์ ์ฉ ํ ์ ์๋ค.
• <textarea> - ์ฌ์ฉ์๊ฐ ์ฌ๋ฌ ์ค์ ํ ์คํธ๋ฅผ ์ ๋ ฅํ ์ ์๋ ํ ์คํธ ์ ๋ ฅ ์์ญ์ ์ ์ํ ๋ ์ฌ์ฉํ๋ค.
• <input> - <textarea>์ ๊ฐ์ด ๋ฐ์ดํฐ๋ฅผ ๋ฐ๋ ํ๊ทธ์ด๋ค.
• <button> - ํด๋ฆญํ ์ ์๋ ๋ฒํผ์ ์ ์ํ ๋ ์ฌ์ฉํ๋ค.
01-1. BoardController
์ปจํธ๋กค๋ฌ์์ html๋ก ์ด๋ํ๋ ์ฃผ์๊ฐ ํ์ํ๋ฏ๋ก ์ปจํธ๋กค๋ฌ์ url ์ฐ๊ฒฐ

ํด์ : localhost:8080/board/write์ ์ ์ํ๋ฉด boardwrite.html์ ๋ณด์ฌ์ฃผ๊ฒ ๋ค.
์คํํ๊ธฐ - http://localhost:8080/board/write๋ก ์ ์

์ ์ํ ๊ฒฐ๊ณผ html์์ ์์ฑํ๋๋ก ๋ง๋ค์ด์ง ๊ฒ์ ๋ณผ ์ ์๋ค.
์ข ๋ ์ ํํ ๋ ๋ชจ์์ผ๋ก ๋ฐ๊พธ๊ณ ์ถ์ผ๋ฉด ์๋์ ๊ฐ์ด htmlํ์ผ์์ ๋ณ๊ฒฝํ๋ฉด ๋๋ค.


๋ณ๊ฒฝํ ํ์ ์ฌ์คํ ํ ๊ฒฐ๊ณผ ์ข ๋๊ณ ๊น๋ํ๊ฒ ์ ๋ฆฌ๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
์ ๋ฆฌํ๋ฉด, html์์ ์์ฑํ ๊ฒ์ controller์ url์ ์ง์ ํ๊ณ ํด๋น url์ ๊ฒ์ํ๋ฉด, ์คํ๋ง ๋ถํธ๊ฐ controller์์ ๋งคํ๋ ๊ฒ์ ์ฐพ์ html ํ์ผ์ ๋ณด์ฌ์ค๋ค. (์๋ฒฝํ ๊ฐ๋ ์ ์๋์ง๋ง ์ฝ๊ฒ ๋งํ๋ฉด)
02. ๊ฒ์๋ฌผ ์์ฑ ์ฒ๋ฆฌ

์ ๋ชฉ๊ณผ ๊ฒ์๋ฌผ์ ๊ธ์ ์ ๊ณ ์์ฑ ๋ฒํผ์ ๋๋ฌ๋ ์๋ฌด ์ผ๋ ์ผ์ด๋์ง ์๋๋ค. ๋ฐ๋ผ์ ์ด๋ฐ ๊ฑธ ์ฒ๋ฆฌํ๊ธฐ ์ํด์ ์ถ๊ฐ๋ก ์์ ์ด ํ์ํ๋ค.
02-1. boardwrite.html

• <form> - ์ ์ฒด ์์์ ์๋ฏธํ๋ฉฐ, ํ๋ฉด์ ๋ณด์ด์ง ์๋ ์ถ์์ ์ธ ํ๊ทธ์ด๋ค. ์ค์ ๋ก ์ฌ์ฉ์๊ฐ ์์์ ์ ๋ ฅํ๊ธฐ ์ํ ํ๊ทธ๋ <input> ํ๊ทธ ๋ฑ์ด ์ฌ์ฉ๋๋ค.
- <form> ํ๊ทธ์ action ์์ฑ์ ํผ ๋ฐ์ดํฐ(form data)๋ฅผ ์๋ฒ๋ก ๋ณด๋ผ ๋ ํด๋น ๋ฐ์ดํฐ๊ฐ ๋์ฐฉํ URL์ ๋ช ์ํ๋ค.
- <form> ํ๊ทธ์ method ์์ฑ์ ํผ ๋ฐ์ดํฐ(form data)๊ฐ ์๋ฒ๋ก ์ ์ถ๋ ๋ ์ฌ์ฉ๋๋ HTTP ๋ฉ์๋๋ฅผ ๋ช ์ํ๋ค.
- method์ ์์ฑ ์ค post๋ ํผ ๋ฐ์ดํฐ๋ฅผ HTTP POST ๋ฉ์๋๋ก ์ ์กํ๋ค.
• <textarea> ํ๊ทธ์ name ์์ฑ์ <textarea> ์์์ ์ด๋ฆ์ ๋ช ์ํ๋ค.
• <button> ํ๊ทธ์ type ์์ฑ์ ํด๋น ๋ฒํผ์ ํ์ (type)์ ๋ช ์ํ๋ค. ๋ธ๋ผ์ฐ์ ๋ณ๋ก <button> ์์์ ๋ํ ์๋ก ๋ค๋ฅธ ๊ธฐ๋ณธ ํ์ ์ ์ฌ์ฉํ ์ ์์ผ๋ฏ๋ก, <button> ์์์๋ ์ธ์ ๋ type ์์ฑ์ ๋ช ์ํด์ผ ํ๋ค.
- type์ ์์ฑ ์ค submit์ ํด๋น ๋ฒํผ์ด ํผ ๋ฐ์ดํฐ(form data)๋ฅผ ์ ์ถํ๋ ์ ์ถ ๋ฒํผ(submit button)์์ ๋ช ์ํ๋ค.
์ ๋ฆฌํ๋ฉด, button์ ๋๋ ์ ๋ form ๋ด์ ์๋ input๊ณผ textarea์ ๋ฐ์ดํฐ๊ฐ /board/writedo ์ฃผ์๋ก ๋์ด๊ฐ๊ฒ ๋๋ค.
02-2. style ์ฌ์์

์์ ๊ฐ์ด style์ ์ฌ์์ ํ๋ค. '>' ๊บฝ์ ๋ผ๊ณ ํ๋๋ฐ, ์ผ์ชฝ ํผ์ฐ์ฐ์๋ฅผ ๋ถ๋ชจ๋ผ๊ณ ํ๊ณ ์ค๋ฅธ์ชฝ ํผ์ฐ์ฐ์๋ฅผ ์์์ด๋ผ๊ณ ํ๋ค.
๊บฝ์ ๊ฐ ์์ ๋ ํด๋์ค๊ฐ layout์ธ ํ๊ทธ ๋ด์ ๋ชจ๋ input ํ๊ทธ ์ค์์ ์์์ธ inputํ๊ทธ์ ๋ํด์๋ง ์ ์ฉ์ด ๋๋ค. ์ด๊ฑธ ์์ ์ ํ์๋ผ๊ณ ํ๋ค.
๋ฐ๋๋ก, ๊บฝ์ ๊ฐ ์์ ๋ ํด๋์ค๊ฐ layout์ธ ํ๊ทธ ๋ด์ ๋ชจ๋ input ํ๊ทธ๊ฐ ์์ฑ ๊ฐ๋๋ก ์ ์ฉ์ด ๋๋ค. ์ด๊ฑธ ํ์ ์ ํ์๋ผ๊ณ ํ๋ค.
์ฌ์คํ(์ฌ์คํ ํ ๋๋ ์๋จ์ ๋นจ๊ฐ์ ์ ์ง ๋ฒํผ์ ๋๋ฅด๊ณ ๋ ํ ์ฌ์คํ์ ํด์ผ ํ๋ค.)

์์ฑ ๋ฒํผ์ ๋๋ฌ๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ์ 404 ํ์ด์ง๊ฐ ๋ฌ๋ค.

writedo ํ์ด์ง๋ฅผ ๋ง๋ค์ง ์์์ ์์ ๊ฐ์ด ๋ฌ ๊ฒ์ด๋ค. ์ค์ํ ๊ฒ์ ์์ฑ ๋ฒํผ์ ๋๋ ์ ๋ writedo ์ฃผ์๋ก ๋์ด๊ฐ๋์ง ํ์ธํ๋ ๊ฒ์ด๋ค.
02-3. BoardController ์์
๊ฒ์๊ธ ์์ฑ ์ฒ๋ฆฌ๋ฅผ ํ๊ธฐ ์ ์ ๋ฐ์ดํฐ๊ฐ ๋์ด์ค๋์ง ํ์ธ์ ํด์ค๋ค.

@PostMapping : ์ฃผ์ด์ง URL ํํ์๊ณผ ์ผ์นํ๋ HTTP POST ์์ฒญ์ ์ฒ๋ฆฌํ๋ ์ญํ ์ ํ๋ค. htmlํ์ผ์์ ์ค์ ํ๋ url๊ณผ ์ผ์นํด์ผ ํ๋ค. ๊ทธ๋ผ ์ปจํธ๋กค๋ฌ์์ ์ ๋ชฉ๊ณผ ๋ด์ฉ์ ๋ฟ๋ ค์ค๋ค.
ํ์ธ(localhost:8080/board/write์์ ์ ๋ชฉ๊ณผ ๊ธ์ ์ฐ๊ณ ๋ฒํผ์ ๋๋ฌ๋ณด๊ธฐ)

๊ทธ๋ฌ๋ฉด ์๊น์ ๊ฐ์ ์๋ฌ ํ์ด์ง๊ฐ ๋จ๋๋ฐ return์ ๋์ด๊ฐ ํ์ด์ง๋ฅผ ์ ๋ฃ์ด์ค์ ๊ทธ๋ฐ ๊ฒ์ด๋ค. ์ผ๋จ์ ๋ฐ์ดํฐ๊ฐ ๋์ด๊ฐ๋์ง ํ์ธ๋ง ํด๋ณธ๋ค.

/board/write์์ ์์ฑํ ๋ฐ์ดํฐ๊ฐ ๊ทธ๋๋ก ์ ํ ์๋ค. ์ ์์ ์ผ๋ก ๋ฐ์ดํฐ๊ฐ ๋์ด๊ฐ ๊ฒ์ ๋ณผ ์ ์๋ค.
03. Entity ์์ฑ
์์์ ์์ฑํ ์ ๋ชฉ๊ณผ ๋ด์ฉ์ด DB์ ์ ์ฅ์ด ๋์ด์ผ ํ๋๋ฐ ์ด๋ ํ์ํ ๊ฑด repository(์ ์ฅ์)์ด๋ค. ๋จผ์ ํจํค๊ธฐ์ ํด๋์ค๋ฅผ ์์ฑํ๋ค.
03-1. ํจํค์ง์ ํด๋์ค ์์ฑ

Board > src > main > java > com.study.board ํจํค์ง ๋ด์ repository์ entity๋ผ๋ ํจํค์ง๋ฅผ ์์ฑํ๊ณ , entity๋ด์๋ Board๋ผ๋ ํด๋์ค๋ฅผ ์์ฑํ๋ค.
03-2. Board ํด๋์ค

ํ๋ ํ์ ๊ณผ ์ด๋ฆ์ MySQL์์ Boardํ ์ด๋ธ์ ๋ง๋ค๊ณ ์ปฌ๋ผ์ ๋ง๋ค์์ ๋์ ๊ฐ์ด ํ์์ ๋ง๊ฒ ์ ์ด์ค๋ค.
• @Entity : ํ ์ด๋ธ์ ์๋ฏธํ๋ ๊ฒ์ผ๋ก, ํ ์ด๋ธ๊ณผ ๋งคํ์ด ๋๋ค. @Entity๊ฐ ๋ถ์ ํด๋์ค๋ JPA๊ฐ ๊ด๋ฆฌํ๋ค.
• @Id : ๊ธฐ๋ณธํค๋ฅผ ๋ํ๋ด๊ธฐ ์ํ ์ด๋ ธํ ์ด์ ์ด๋ค. ํด๋น ํ๋๋ฅผ ๊ธฐ๋ณธํค๋ก ๋งคํํ๋ค.
• @GeneratedValue : ๊ธฐ๋ณธํค๋ฅผ ์๋์ผ๋ก ์์ฑํ ๋ @Id์ ํจ๊ป ์ฌ์ฉ๋์ด์ผ ํ๋ ์ด๋ ธํ ์ด์ ์ด๋ค.
- strategy = GenerateType.IDENTITY : ๊ธฐ๋ณธํค ์์ฑ์ DB์๊ฒ ์์ํ๋ ๋ฐฉ์์ผ๋ก id๊ฐ์ ๋ฐ๋ก ํ ๋นํ์ง ์์๋ DB๊ฐ ์๋์ผ๋ก AUTO_INCREMENT๋ฅผ ํ์ฌ ๊ธฐ๋ณธํค๋ฅผ ์์ฑํด์ค๋ค.
์์ ๊ฐ์ด @Entity๋ผ๋ ์ด๋ ธํ ์ด์ ์ ์ ์ด์ฃผ๋ฉด JPA๊ฐ Board ํด๋์ค๋ฅผ ์ฝ์ด๋ค์ด๊ณ ์ฒ๋ฆฌํด์ค๋ค.
03-3. BoardController ์์

html์ ๋ณด๋ฉด ์์ฑ ํผ์์ ์์ฑ ๋ฒํผ์ ๋๋ ์ ๋, title์ ์ ๋ชฉ์ ์์ฑํ ๊ฒ๊ณผ content์ ์ ์ ๋ด์ฉ์ด Controller์์์ ๋งค๊ฐ๋ณ์ title๊ณผ content์ ๋ด๊ฒจ์ ๋ค์ด์ค๊ฒ ๋๋ค. ๊ทธ๋ฌ๋ ์ด๊ฒ ๋ง์์ง๋ค ๋ณด๋ฉด ๋ฒ๊ฑฐ๋กญ๊ธฐ ๋๋ฌธ์ ์์ ํ๋ค.

board๋ด์ ์๋ title์ ๋ฐ์์ผ ํ๋๋ฐ ์ด๋ ํ์ํ ๊ฒ lombok์ด๋ค. Board Entity์์ @Data ์ด๋ ธํ ์ด์ ์ ์ถ๊ฐํ๋ค.

• @Data : @Getter / @Setter, @ToString, @EqualsAndHashCode์ @RequiredArgsConstructor, @Value ๋ฅผ ํ๊บผ๋ฒ์ ์ค์ ํด์ฃผ๋ ์ด๋ ธํ ์ด์ ์ด๋ค.
์ ๋ชฉ์ด Entity๋ก ๋์ด๊ฐ๋ ์ง ํ์ธ

์ ๋ชฉ๋ง ๋ฐ๋ ๊ฑธ๋ก ํ์ผ๋๊น ์ ๋ชฉ๋ง ์ ๋ ฅํด์ฃผ๊ณ ์ ์ก ๋ฒํผ์ ๋๋ฌ์ฃผ๋ฉด ์๊น์ ๊ฐ์ ์ค๋ฅ ํ์ด์ง๊ฐ ๋ฌ๋ค.

๋ฐ์ดํฐ๊ฐ ์ ์์ ์ผ๋ก ๋์ด๊ฐ๋ ๊ฒ๋ง ๋ณผ ๊ฑฐ๊ธฐ ๋๋ฌธ์ ์ค๋ฅ๋ ๋ฌด์ํ๋ค. ์ ๋ชฉ์ ์ ์ ๋ฐ์ดํฐ ๊ทธ๋๋ก ๋์ด๊ฐ ๊ฒ์ ๋ณผ ์ ์๋ค.
04. repository ์์ฑ

board > src > main > java > com.study.board > repository์ Interface๋ฅผ ์์ฑํ๋ค.
04-1. BoardRepository

• @Repository : ์๋์ผ๋ก ์คํ๋ง ๋น์ผ๋ก ๋ฑ๋กํ๋ค. @Component์ ๊ตฌ์ฒดํ๋ ํํ ์ค ํ๋๋ก DB์ ์ ๊ทผํ๋ค.
• extends : ์์์ ๋ฐ๊ณ ์ ํ ๋ ์ฌ์ฉํ๋ค.
• JPARepository : JPARepository ์ธํฐํ์ด์ค๋ฅผ ์์๋ฐ๋ ์ธํฐํ์ด์ค๋ฅผ ์ ์ํ๋ฉด, ํด๋น ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ ํด๋์ค๋ JPA์์ ์ ๊ณตํ๋ ๋ฉ์๋๋ค์ ์ฌ์ฉํ ์ ์๋ค.
- ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ถ๊ฐ, ์กฐํ, ์์ , ์ญ์ ์ findAll(), findById(), save() ๋ฑ์ ๋ฉ์๋๋ค์ ์ฌ์ฉํ ์ ์๋ค.
- ์ ๊ณต๋๋ ๋ฉ์๋๋ค ์ด์ฉํ์ฌ ์ฝ๊ณ ๊ฐํธํ๊ฒ CRUD ์กฐ์์ ํ ์ ์๋ค.
- ์ฆ, JpaRepository๋ฅผ ์ฌ์ฉํ๋ฉด, ๋ณต์กํ JDBC(Java DataBase Connectivity) ์ฝ๋๋ฅผ ์์ฑํ์ง ์์๋ ๊ฐ๋จํ๊ฒ DB์์ ๋ฐ์ดํฐ ์ ๊ทผ ์์ ์ ์ฒ๋ฆฌํ ์ ์๋ค.
- ํ์์ JpaRepository<T, ID> ์ด๊ณ , Entity ๋ช ๊ณผ ๊ธฐ๋ณธํค๋ก ์ง์ ํ ํ๋์ ํ์ ์ ๋ฃ์ด์ค๋ค.
04-2. Service ์์ฑ

board > src > main > java > com.study.board ์ serviceํจํค์ง๋ฅผ ์์ฑํ๊ณ service ํจํค์ง ๋ด์ ํด๋์ค๋ฅผ ํ๋ ์์ฑํ๋ค.
โป Service๋ฅผ ์์ฑํ๋ ์ด์ - Service๋ Controller์ Repository๋ฅผ ์๋ ์ญํ ์ ํ๋ค. ๋ง์ฝ Service๊ฐ ์๋ค๋ฉด Controller์์ ์ง์ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ ๊ฐ๊ณตํ๊ณ ์ฒ๋ฆฌํ์ฌ View์ ๋๊ฒจ์ฃผ์ด์ผ ํ๋ฏ๋ก Controller์๋ ์ฝ๋๊ฐ ๊ธธ์ด์ง๊ณ , ์ค๋ณต๋๋ ์ฝ๋๊ฐ ๋ง์์ง ๊ฒ์ด๋ค.
04-3. BoardService

• @Service : ์๋์ผ๋ก ์คํ๋ง ๋น์ผ๋ก ๋ฑ๋กํ๋ค. @Component์ ๊ตฌ์ฒดํ๋ ํํ ์ค ํ๋์ด๋ค.
• @Autowired : DI(Dependency Injection) (DI์ ๊ด๋ จ๋ ๋ด์ฉ์ ์ถํ์)
• save() : jpa์ save๋ผ๋ ๋ฉ์๋๊ฐ ์๋๋ฐ, ํ๋ผ๋ฏธํฐ๋ก ๋๊ฒจ์ค ์ํฐํฐ๋ฅผ ์ง์ ์ ๋ฐ์ดํธ ํ๋ค.
04-4. BoardController ์์

์ปจํธ๋กค๋ฌ์๋ ์๋น์ค ๊ฐ์ฒด๋ฅผ ์ถ๊ฐํ๊ณ , ์ญ์ @Autowired๋ฅผ DIํด์ค๋ค. ์๋น์ค์์ ์ถ๊ฐํด์ค write๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ค.
05. DB์ ๋ฐ์ดํฐ๊ฐ ๋ค์ด๊ฐ๋์ง ํ์ธํ๊ธฐ
์ด์ ๋ฐ์ดํฐ๊ฐ DB์ ์ ์์ ์ผ๋ก ๋ค์ด๊ฐ๋์ง ํ์ธ์ ํด๋ณธ๋ค.


MySQL Workbench์์ ํ ์ด๋ธ์ ํ์ธํ๋ฉด ํ์ฌ ๋ฐ์ดํฐ๊ฐ ์๋ ๊ฒ์ ๋ณผ ์ ์๋ค. ์์ฑ ํผ์์ ์ ๋ชฉ๊ณผ ๋ด์ฉ์ ์ ์ด์ฃผ๊ณ ํ์ธํด๋ณด์.

์์ฑ ํผ์์ ์์ ๊ฐ์ด ์ ์ด์ฃผ๊ณ ๋ฒํผ์ ๋๋ฅด๋ฉด ์ค๋ฅ ํ์ด์ง๊ฐ ๋ฌ๋ค. ๊ทธ๋ฌ๋ ์ฐ๋ฆฌ๊ฐ ํ์ธํ ๊ฒ์ ํ ์ด๋ธ์ด๋ค.

์๋ก๊ณ ์นจ ๋ฒํผ์ ๋๋ฅด๊ณ ํ ์ด๋ธ์ ํ์ธํด๋ณด๋ฉด ์์์ ์ ์๋ ๋ฐ์ดํฐ๊ฐ ์ ์์ ์ผ๋ก ๋ค์ด๊ฐ ๊ฒ์ ๋ณผ ์ ์๋ค.
์ด์ฒ๋ผ JPA๋ฅผ ์ฌ์ฉํด์ DB์ ์ ๊ทผํ ์ ์๋ค.
'๐ป PROJECT > [์คํ๋ง ๋ถํธ] ๊ฒ์ํ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [์คํ๋ง ๋ถํธ] 6. ๊ฒ์ํ ๋ง๋ค๊ธฐ ์ญ์ ์ฒ๋ฆฌ (0) | 2023.10.25 |
|---|---|
| [์คํ๋ง ๋ถํธ] 5. ๊ฒ์ํ ๋ง๋ค๊ธฐ ๊ฒ์๋ฌผ ๋ฆฌ์คํ (0) | 2023.10.24 |
| [์คํ๋ง ๋ถํธ] 3. ๊ฒ์ํ ๋ง๋ค๊ธฐ ํ ์ด๋ธ ์์ฑ (0) | 2023.10.22 |
| [์คํ๋ง ๋ถํธ] 2. ๊ฒ์ํ ๋ง๋ค๊ธฐ ํ๋ก์ ํธ ์์ฑ (1) | 2023.10.22 |
| [์คํ๋ง ๋ถํธ] ๊ฒ์ํ ๋ง๋ค๊ธฐ ๊ฐ๋ฐ ํ๊ฒฝ ์ธํ (0) | 2023.10.22 |