์„œ ๋ก 

ํ•™์›์—์„œ ๊ทธ๋ฃน์Šคํ„ฐ๋””๋ฅผ ๋ณ‘ํ–‰ํ•˜๋ฉฐ ํ•™์Šต์ค‘์ด๋‹ค. ๋‚˜๋Š” ํ”„๋กœ์ ํŠธ ๊ฒฝํ—˜์ด ๋งŽ์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ ์‹ค๋ ฅ์„ ๋Š˜๋ฆฌ๊ณ ์ž ์‚ฌ์ด๋“œํ”„๋กœ์ ํŠธ์— ์ง€์›ํ•ด์„œ ํŒ€์ด ๊ตฌ์„ฑ๋˜์—ˆ๋‹ค.!!  ์šด์ด ์ข‹๊ฒŒ๋‘,, ํŒ€์žฅ๋‹˜์ด๋ž‘ ํŒ€์›๋“ค ๋„ˆ๋ฌด ์ž˜๋งŒ๋‚˜์„œ ๋Œ€๋งŒ์กฑ,, 
๋‚˜๋งŒ ์ž˜ํ•˜๋ฉด ๋œ๋‹ค..^^ ๋ฏผํ๋ผ์น˜์ง€ ๋ง์ž,, ~ 

> ์ €๋ฒˆ์ฃผ๊นŒ์ง€๋Š” Spring์˜ ์ฃผ์ œ๋ฅผ ๋งก์•„ ํ•™์Šตํ•ด์˜ค๊ณ  ํŒ€์›๋“ค์—๊ฒŒ ์„ค๋ช…ํ•ด์ฃผ๋Š” ๋ฐฉ์‹์œผ๋กœ ์ง„ํ–‰ํ–ˆ๋‹ค๋ฉด 
์ด๋ฒˆ์ฃผ๋ถ€ํ„ฐ๋Š” ๋ฌด์ž‘์ • ๊ฒŒ์‹œํŒ ํ•˜๋‚˜ ๋งŒ๋“ค์–ด๋ณด๊ธฐ ! Spring Boot๋กœ ๊ฐ€์žฅ ๊ธฐ์ดˆ์ ์ธ JPA๋ฐฉ์‹์œผ๋กœ CRUD๊ฒŒ์‹œํŒ์„ ๋งŒ๋“ค์–ด ๋ณด๊ธฐ๋กœ ํ–ˆ๋‹ค. 

๋ง๋กœ๋Š” ์—„์ฒญ ์‰ฌ์šด ๊ฒƒ ๊ฐ™์•˜๋Š”๋ฐ ๋ง‰์ƒ ํ•ด๋ณด๋‹ˆ ๋„ˆ๋ฌด ์–ด๋ ค์› ๋‹ค.. ใ…œ ใ…œ 
์ด๋ก ์œผ๋กœ๋Š” MVCํŒจํ„ด ์งˆ๋ฆฌ๋„๋ก ๋“ค์—ˆ๊ณ  ์ž˜์•ˆ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋Š”๋ฐ ๋ง‰์ƒ ์ฝ”๋“œ๋ฅผ ์“ฐ๋ ค๊ณ  ํ•˜๋‹ค๋ณด๋‹ˆ ๋ญ”์ง€ ํ•˜๋‚˜๋„ ๋ชจ๋ฅด๊ฒ ์–ด์„œ OMG,,.. ๋‚ด ์‹ค๋ ฅ์ด ์–ผ๋งˆ๋‚˜ ๋ณ„๋กœ์ธ์ง€ ๋‹ค์‹œ ํ•œ ๋ฒˆ ๋Š๋ผ๊ฒŒ ๋˜์—ˆ๋‹ค.. ๋…ธ๋ ฅํ•˜์ž 

๋จผ์ € ๋‚ด๊ฐ€ ํ—ท๊ฐˆ๋ฆฌ๊ณ  ์–ด๋ ค์›Œํ–ˆ๋˜ ์ด๋ก ? ํŒจํ„ด ๋ถ€๋ถ„๋ถ€ํ„ฐ ์งš๊ณ  ๋„˜์–ด๊ฐ€๋ณด์ž.

MVCํŒจํ„ด์ด๋ž€?

Model, View, Controller์˜ ์•ฝ์ž์ด๋‹ค.

  1. ๋ชจ๋ธ: ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜, ์ •๋ณด, ๋ฐ์ดํ„ฐ DB
  2. ๋ทฐ: ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ณด์—ฌ์ง€๋Š” ํ™”๋ฉด, UI
  3. ์ปจํŠธ๋กค๋Ÿฌ: ๋ฐ์ดํ„ฐ์™€ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์‚ฌ์ด ์ƒํ˜ธ๋™์ž‘๊ด€๋ฆฌ, ๋ชจ๋ธ๊ณผ ๋ทฐ ํ†ต์ œ,View โ†”ย Model ์ง์ ‘์†Œํ†ต XX ๊ด€๋ฆฌ

Controller ๋ž€?

์ฃผ๋กœ ์‚ฌ์šฉ์ž์˜ ์š”์ฒญ์„ ์ฒ˜๋ฆฌ ํ•œ ํ›„ ์ง€์ •๋œ ๋ทฐ์— ๋ชจ๋ธ ๊ฐ์ฒด๋ฅผ ๋„˜๊ฒจ์ฃผ๋Š” ์—ญํ• 

โ†’ ์‚ฌ์šฉ์ž์˜ ์š”์ฒญ์ด ์ง„์ž…ํ•˜๋Š” ์ง€์ ์œผ๋กœ ์š”์ฒญ์— ๋”ฐ๋ผ ์–ด๋–ค ์ฒ˜๋ฆฌ๋ฅผ ํ• ์ง€ ๊ฒฐ์ •์„ Service์— ๋„˜๊ฒจ์ค€๋‹ค. ๊ทธ ํ›„ Service์—์„œ ์‹ค์งˆ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•œ ๋‚ด์šฉ์„ View์—๊ฒŒ ๋„˜๊ฒจ์ค€๋‹ค.

Service ๋ž€?

์ž Service๋ฅผ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด ํฐ ํ‹€์„ ๋ณด์ž๋ฉด

  1. Client๊ฐ€ Request๋ฅผ ๋ณด๋‚ธ๋‹ค.(Ajax, Axios, fetch๋“ฑ..)
  2. Request URL์— ์•Œ๋งž์€ Controller๊ฐ€ ์ˆ˜์‹  ๋ฐ›๋Š”๋‹ค. (@Controller , @RestController)
  3. Controller ๋Š” ๋„˜์–ด์˜จ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด Service ๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.
  4. Service๋Š” ์•Œ๋งž์€ ์ •๋ณด๋ฅผ ๊ฐ€๊ณตํ•˜์—ฌ Controller์—๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ๋„˜๊ธด๋‹ค.
  5. Controller ๋Š” Service ์˜ ๊ฒฐ๊ณผ๋ฌผ์„ Client ์—๊ฒŒ ์ „๋‹ฌํ•ด์ค€๋‹ค.

Service๊ฐ€ ์•Œ๋งž์€ ์ •๋ณด๋ฅผ ๊ฐ€๊ณตํ•˜๋Š” ๊ณผ์ •์„ '๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.' ๋ผ๊ณ  ํ•œ๋‹ค.

Service๊ฐ€ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ ‘๊ทผํ•˜๋Š” DAO๋ฅผ ์ด์šฉํ•ด์„œ ๊ฒฐ๊ณผ๊ฐ’์„ ๋ฐ›์•„ ์˜จ๋‹ค.

Reposity ๋ž€?

  • Entity์— ์˜ํ•ด ์ƒ์„ฑ๋œ DB์— ์ ‘๊ทผํ•˜๋Š” ๋ฉ”์„œ๋“œ(ex) findAll()) ๋“ค์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ ์ธํ„ฐํŽ˜์ด์Šค์ด๋‹ค. ์œ„์—์„œ ์—”ํ‹ฐํ‹ฐ๋ฅผ ์„ ์–ธํ•จ์œผ๋กœ์จ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ตฌ์กฐ๋ฅผ ๋งŒ๋“ค์—ˆ๋‹ค๋ฉด, ์—ฌ๊ธฐ์— ์–ด๋–ค ๊ฐ’์„ ๋„ฃ๊ฑฐ๋‚˜, ๋„ฃ์–ด์ง„ ๊ฐ’์„ ์กฐํšŒํ•˜๋Š” ๋“ฑ์˜ CRUD(Create, Read, Update, Delete)๋ฅผ ํ•ด์•ผ ์“ธ๋ชจ๊ฐ€ ์žˆ๋Š”๋ฐ, ์ด๊ฒƒ์„ ์–ด๋–ป๊ฒŒ ํ•  ๊ฒƒ์ธ์ง€ ์ •์˜ํ•ด์ฃผ๋Š” ๊ณ„์ธต์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.

JpaRepository๋ฅผ ์ƒ์†๋ฐ›๋„๋ก ํ•จ์œผ๋กœ์จ ๊ธฐ๋ณธ์ ์ธ ๋™์ž‘์ด ๋ชจ๋‘ ๊ฐ€๋Šฅํ•ด์ง„๋‹ค! JpaRepository๋Š” ์–ด๋–ค ์—”ํ‹ฐํ‹ฐ๋ฅผ ๋ฉ”์„œ๋“œ์˜ ๋Œ€์ƒ์œผ๋กœ ํ• ์ง€๋ฅผ ๋‹ค์Œ ํ‚ค์›Œ๋“œ๋กœ ์ง€์ •ํ•œ๋‹ค.

์–ด๋…ธํ…Œ์ด์…˜์ด๋ž€?

@Entityย : ํด๋ž˜์Šค ์œ„์— ์„ ์–ธํ•˜์—ฌ ์ด ํด๋ž˜์Šค๊ฐ€ ์—”ํ‹ฐํ‹ฐ์ž„์„ ์•Œ๋ ค์ค€๋‹ค. ์ด๋ ‡๊ฒŒ ๋˜๋ฉด JPA์—์„œ ์ •์˜๋œ ํ•„๋“œ๋“ค์„ ๋ฐ”ํƒ•์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ํ…Œ์ด๋ธ”์„ ๋งŒ๋“ค์–ด์ค€๋‹ค.

@Builderย : ํ•ด๋‹น ํด๋ž˜์Šค์— ํ•ด๋‹นํ•˜๋Š” ์—”ํ‹ฐํ‹ฐ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค ๋•Œ ๋นŒ๋” ํŒจํ„ด์„ ์ด์šฉํ•ด์„œ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋„๋ก ์ง€์ •ํ•ด์ฃผ๋Š” ์–ด๋…ธํ…Œ์ด์…˜์ด๋‹ค. ์ด๋ ‡๊ฒŒ ์„ ์–ธํ•ด๋†“์œผ๋ฉด ๋‚˜์ค‘์— ๋‹ค๋ฅธ ๊ณณ์—์„œ Board.builder(). {์—ฌ๋Ÿฌ๊ฐ€์ง€ ํ•„๋“œ์˜ ์ดˆ๊ธฐ๊ฐ’ ์„ ์–ธ }. build() ํ˜•ํƒœ๋กœ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

@AllArgsConstructorย : ์„ ์–ธ๋œ ๋ชจ๋“  ํ•„๋“œ๋ฅผ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๊ฐ–๋Š” ์ƒ์„ฑ์ž๋ฅผ ์ž๋™์œผ๋กœ ๋งŒ๋“ค์–ด์ค€๋‹ค.

@NoArgsConstructorย : ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ์•„์˜ˆ์—†๋Š” ๊ธฐ๋ณธ์ƒ์„ฑ์ž๋ฅผ ์ž๋™์œผ๋กœ ๋งŒ๋“ค์–ด์ค€๋‹ค.

@Getterย : ๊ฐ ํ•„๋“œ๊ฐ’์„ ์กฐํšŒํ•  ์ˆ˜ ์žˆ๋Š” getter๋ฅผ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•ด์ค€๋‹ค. ์˜ˆ๋ฅผ๋“ค์–ด ๋‹ค๋ฅธ ํŒŒ์ผ์—์„œ Board ๊ฐ์ฒด์˜ title๊ฐ’์„ ์–ป๊ณ  ์‹ถ๋‹ค๋ฉด getTitle() ๋ฉ”์„œ๋“œ๋ฅผ ์ •์˜ํ•ด์„œ ํ•ด๋‹น ๊ฐ์ฒด์˜ title๊ฐ’์„ ์–ป์–ด์˜ค๊ฒŒ ๋˜๋Š”๋ฐ, ํ•ด๋‹น ๋ฉ”์„œ๋“œ๋ฅผ ๊ตณ์ด ์ž‘์„ฑํ•˜์ง€ ์•Š์•„๋„ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•ด์ฃผ๋Š” ๊ฒƒ์ด๋‹ค.๋ณ€์ˆ˜๋Š” ๋ณดํ†ต ์ง์ ‘ ์ ‘๊ทผ ๋ฐ ๋ณ€๊ฒฝ์ด ์•ˆ๋˜๋„๋ก private ์„ ์–ธ์ž๋ฅผ ํ†ตํ•ด ์ง€์ •ํ•œ๋‹ค. title ์ด๋ผ๋Š” ๋ณ€์ˆ˜๋ฅผ ์กฐํšŒํ•˜๊ธฐ ์œ„ํ•ด์„œ getTitle() ์ด๋ผ๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ์„ ์–ธํ•˜๊ณ , title์„ ๋ฆฌํ„ดํ•˜๋„๋ก ํ•ด์ค€๋‹ค. ์ด ๋ฉ”์„œ๋“œ๋ฅผย getter๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

๐Ÿ’ป ๋งˆ๋ฌด๋ฆฌ

์‚ฌ์‹ค ์ง€๊ธˆ๋„ 100% ์ดํ•ด๊ฐ€ ๊ฐ€๋Š” ๊ฑด ์•„๋‹ˆ์ง€๋งŒ ์ฒ˜์Œ์— ๋น„ํ•˜๋ฉด ๋งŽ์ด ๋‚˜์•„์กŒ๋‹ค.

์ •๋ฆฌํ•˜์ž๋ฉด, Controller์—์„œ ์‚ฌ์šฉ์ž์˜ ์š”์ฒญ์„ ๋ฐ›์œผ๋ฉด ex)GET๋ฐฉ์‹ ๋“ฑ์œผ๋กœ ์š”์ฒญ
Service์— ์žˆ๋Š” ๋ฉ”์†Œ๋“œ๋กœ DTO์— ์žˆ๋Š” ๋ฐ์ดํ„ฐํ˜•์‹์„ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋ณด๋‚ด์ค€๋‹ค
๊ธฐ๋ณธ์œผ๋กœ ์ •์˜๋˜์–ด์žˆ๋Š” Jap Repositpoy์ƒ์†๋ฐ›์•„ ๊ธฐ๋ณธ์ ์ธ ๋™์ž‘์ธ Save, find๋“ฑ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค
๋„๋ฉ”์ธ์— ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์—”ํ„ฐํ‹ฐ๋ฅผ ์ •์˜ํ•ด ๊ฐ์ฒด๋ฐฉ์‹์œผ๋กœ ๊บผ๋‚ด์“ธ ์ˆ˜ ์žˆ๋‹ค
๋จธ๋ฆฌ๋กœ๋Š” ๋Œ€์ถฉ ์ดํ•ดํ–ˆ๋Š”๋ฐ ๊ธ€๋กœ ์“ฐ๋ ค๋‹ˆ ์–ด๋ ต๋‹ค. ๋‹ค์Œ ํฌ์ŠคํŒ…์—์„œ๋Š” ๋ณด๋‹ค ๋” ์ž์„ธํ•˜๊ฒŒ ์จ๋ณด๊ฒ ๋‹ค !

๋„ˆ๋ฌด๋„ˆ๋ฌด๋„ˆ๋ฌด ์–ด๋ ต๋‹ค ํ‘ํ‘

๐Ÿ’กย Reference

Controller, Service, Repository ๊ฐ€ ๋ฌด์—‡์ผ๊นŒ?

https://whitepro.tistory.com/265

0๊ฐœ์˜ ๋Œ“๊ธ€