๐Ÿ’ป PROJECT/[์Šคํ”„๋ง ๋ถ€ํŠธ] ๊ฒŒ์‹œํŒ

[์Šคํ”„๋ง ๋ถ€ํŠธ] 4. ๊ฒŒ์‹œํŒ ๋งŒ๋“ค๊ธฐ ๊ฒŒ์‹œ๊ธ€ ์ž‘์„ฑํผ ์ƒ์„ฑ๊ณผ ์ฒ˜๋ฆฌ

devCloud 2023. 10. 23. 13:14
728x90

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์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.

728x90