์นดํ…Œ๊ณ ๋ฆฌ ์—†์Œ

[JPA] ์Šคํ”„๋ง ๋ถ€ํŠธ์˜ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ตฌ์กฐ ์–ด๋–ป๊ฒŒ ๋งŒ๋“ค์–ด์ ธ ์žˆ์„๊นŒ?

๋ฏธ๋กœ910 2024. 9. 26. 16:37
๐Ÿ’ก
1. MVC ํŒจํ„ด์ด๋ž€?
2. ๋ ˆ์ด์–ด๋“œ ์•„ํ‚คํ…์ฒ˜๋ž€?

 

1. MVC ํŒจํ„ด (Model-View-Controller)

MVC ํŒจํ„ด์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ธฐ๋Šฅ์„ ์„ธ ๊ฐ€์ง€ ์—ญํ• ๋กœ ๋ถ„๋ฆฌํ•˜๋Š” ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค:

  • Model (๋ชจ๋ธ): ๋ฐ์ดํ„ฐ์™€ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
  • View (๋ทฐ): ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ์‹œ๊ฐ์ ์œผ๋กœ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.
  • Controller (์ปจํŠธ๋กค๋Ÿฌ): ์‚ฌ์šฉ์ž์˜ ์š”์ฒญ์„ ๋ฐ›์•„ ๋ชจ๋ธ์„ ํ†ตํ•ด ์ฒ˜๋ฆฌํ•˜๊ณ , ๊ฒฐ๊ณผ๋ฅผ ๋ทฐ์— ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.

์ด ํŒจํ„ด์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ UI ๋กœ์ง๊ณผ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ๋กœ์ง์„ ๋ถ„๋ฆฌํ•˜์—ฌ ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ์„ ๋†’์ด๊ณ , ์œ ์ง€๋ณด์ˆ˜๋ฅผ ์‰ฝ๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.

 

2. ๋ ˆ์ด์–ด๋“œ ์•„ํ‚คํ…์ฒ˜ (๊ณ„์ธต ๊ตฌ์กฐ)

๋ ˆ์ด์–ด๋“œ ์•„ํ‚คํ…์ฒ˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์„ธ ๊ฐ€์ง€ ์ฃผ์š” ๊ณ„์ธต์œผ๋กœ ๋‚˜๋ˆ„์–ด ๊ฐ๊ฐ์˜ ์ฑ…์ž„์„ ๋ช…ํ™•ํžˆ ํ•˜๋Š” ๊ตฌ์กฐ๋ฅผ ๋งํ•ฉ๋‹ˆ๋‹ค.

  1. ํ”„๋ ˆ์  ํ…Œ์ด์…˜ ๊ณ„์ธต (Presentation Layer):
    • ์—ญํ• : ์‚ฌ์šฉ์ž์™€ ์ƒํ˜ธ์ž‘์šฉํ•˜๋Š” ๊ณ„์ธต์œผ๋กœ, HTTP ์š”์ฒญ์„ ๋ฐ›์•„ ์ด๋ฅผ ๋น„์ฆˆ๋‹ˆ์Šค ๊ณ„์ธต์œผ๋กœ ์ „๋‹ฌํ•˜๊ณ , ๋น„์ฆˆ๋‹ˆ์Šค ๊ณ„์ธต์—์„œ ์ฒ˜๋ฆฌ๋œ ๊ฒฐ๊ณผ๋ฅผ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ฐ˜ํ™˜ํ•˜๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.
    • ๊ตฌ์„ฑ ์š”์†Œ: ์ด ๊ณ„์ธต์—๋Š” View์™€ Controller๊ฐ€ ์†ํ•˜๋ฉฐ, ์‚ฌ์šฉ์ž์˜ ์š”์ฒญ์„ ๋ฐ›์•„ ์ฒ˜๋ฆฌํ•˜๊ณ , ์ฒ˜๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ํ™”๋ฉด์— ์ถœ๋ ฅํ•˜๊ฑฐ๋‚˜ API ์‘๋‹ต์œผ๋กœ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  2. ๋น„์ฆˆ๋‹ˆ์Šค ๊ณ„์ธต (Business Layer):
    • ์—ญํ• : ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํ•ต์‹ฌ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ณ„์ธต์œผ๋กœ, ์„œ๋น„์Šค์˜ ํ•ต์‹ฌ ๊ทœ์น™๊ณผ ์ฒ˜๋ฆฌ๋ฅผ ๋‹ด๋‹นํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์ฃผ๋ฌธ ์„œ๋น„์Šค์—์„œ ์ฃผ๋ฌธ ๊ฐœ์ˆ˜ ๊ณ„์‚ฐ, ๊ฐ€๊ฒฉ ์ฒ˜๋ฆฌ, ์˜ˆ์™ธ ์ฒ˜๋ฆฌ, ์ฃผ๋ฌธ ์ทจ์†Œ ๋“ฑ์˜ ๋กœ์ง์„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
    • ๊ตฌ์„ฑ ์š”์†Œ: ์ด ๊ณ„์ธต์—์„œ๋Š” ์ฃผ๋กœ ์„œ๋น„์Šค ํด๋ž˜์Šค๊ฐ€ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์ˆ˜ํ–‰ํ•˜๋ฉฐ, ๋ฐ์ดํ„ฐ์˜ ํ๋ฆ„์„ ์ œ์–ดํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ, MVC ํŒจํ„ด์˜ Model์ด ์ด ๊ณ„์ธต์— ํฌํ•จ๋˜์–ด, ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ , ํ•„์š”ํ•œ ๊ฒฝ์šฐ ํผ์‹œ์Šคํ„ด์Šค ๊ณ„์ธต๊ณผ ์ƒํ˜ธ์ž‘์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ฑฐ๋‚˜ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค.
  3. ํผ์‹œ์Šคํ„ด์Šค ๊ณ„์ธต (Persistence Layer):
    • ์—ญํ• : ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ์ƒํ˜ธ์ž‘์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ฑฐ๋‚˜ ์กฐํšŒํ•˜๋Š” ๊ณ„์ธต์œผ๋กœ, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ด€๋ จ ๋กœ์ง์„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
    • ๊ตฌ์„ฑ ์š”์†Œ: ์ด ๊ณ„์ธต์—์„œ๋Š” DAO(Data Access Object) ๊ฐ์ฒด๋‚˜ Repository๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ์ง์ ‘ ์ƒํ˜ธ์ž‘์šฉํ•˜๋ฉฐ, ๋ฐ์ดํ„ฐ๋ฅผ ์˜๊ตฌ์ ์œผ๋กœ ์ €์žฅํ•˜๊ฑฐ๋‚˜ ๋ถˆ๋Ÿฌ์˜ค๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.

 

์Šคํ”„๋ง ๋ถ€ํŠธ ๋Œ€ํ‘œ ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ

 

main

์‹ค์ œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ณต๊ฐ„์ž…๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ ์‹คํ–‰์— ํ•„์š”ํ•œ ๋ชจ๋“  ์†Œ์Šค ์ฝ”๋“œ์™€ ๋ฆฌ์†Œ์Šค ํŒŒ์ผ์ด ์ด ํด๋” ์•ˆ์— ์œ„์น˜ํ•ฉ๋‹ˆ๋‹ค.

๊ตฌ์„ฑ ์š”์†Œ

  • java: ์ž๋ฐ” ์†Œ์Šค ์ฝ”๋“œ๊ฐ€ ๋“ค์–ด๊ฐ€๋Š” ๋””๋ ‰ํ† ๋ฆฌ์ž…๋‹ˆ๋‹ค. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํŒจํ‚ค์ง€ ๊ตฌ์กฐ์— ๋งž๊ฒŒ ํด๋ž˜์Šค ํŒŒ์ผ๋“ค์ด ์ด๊ณณ์— ์œ„์น˜ํ•ฉ๋‹ˆ๋‹ค.
  • resources: ๋ฆฌ์†Œ์Šค ํŒŒ์ผ(์˜ˆ: ์„ค์ • ํŒŒ์ผ, HTML, CSS, ์ด๋ฏธ์ง€ ๋“ฑ)์ด ์œ„์น˜ํ•˜๋Š” ๋””๋ ‰ํ† ๋ฆฌ์ž…๋‹ˆ๋‹ค. ์ฃผ๋กœ application.properties ๋˜๋Š” application.yml ๊ฐ™์€ ์„ค์ • ํŒŒ์ผ, ํ…œํ”Œ๋ฆฟ ์—”์ง„ ํŒŒ์ผ(์˜ˆ: Thymeleaf ํ…œํ”Œ๋ฆฟ) ๋“ฑ์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

test

  • ํ”„๋กœ์ ํŠธ์˜ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ํ…Œ์ŠคํŠธํ•  ๋ชฉ์ ์˜ ์ฝ”๋“œ๋‚˜ ๋ฆฌ์†Œ์Šค ํŒŒ์ผ์ด ๋“ค์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ํด๋”๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ธฐ๋Šฅ์„ ๊ฒ€์ฆํ•˜๊ณ , ์˜ค๋ฅ˜๋ฅผ ๋ฐœ๊ฒฌํ•˜๊ธฐ ์œ„ํ•œ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.
  • ๊ตฌ์„ฑ ์š”์†Œ:
    • java: ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•œ ์ž๋ฐ” ์†Œ์Šค ์ฝ”๋“œ๊ฐ€ ๋“ค์–ด๊ฐ€๋Š” ๋””๋ ‰ํ† ๋ฆฌ์ž…๋‹ˆ๋‹ค. main/java ์™€ ๋น„์Šทํ•œ ํŒจํ‚ค์ง€ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง€๋ฉฐ, ๊ฐ ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ๋ฐ ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ๋ฅผ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.
    • resources: ํ…Œ์ŠคํŠธ ์‹œ ํ•„์š”ํ•œ ๋ฆฌ์†Œ์Šค ํŒŒ์ผ์ด ์œ„์น˜ํ•ฉ๋‹ˆ๋‹ค. ํ…Œ์ŠคํŠธ ์ „์šฉ ์„ค์ • ํŒŒ์ผ์ด๋‚˜ ๋ชจ์˜ ๋ฐ์ดํ„ฐ ํŒŒ์ผ์ด ํฌํ•จ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

build.gradle

  • ๋นŒ๋“œ ์„ค์ • ํŒŒ์ผ๋กœ, Gradle์„ ์‚ฌ์šฉํ•œ ํ”„๋กœ์ ํŠธ์—์„œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ด ํŒŒ์ผ์—์„œ ํ”„๋กœ์ ํŠธ์˜ ์˜์กด์„ฑ, ํ”Œ๋Ÿฌ๊ทธ์ธ ์„ค์ •, ๋นŒ๋“œ ์Šคํฌ๋ฆฝํŠธ ๋“ฑ์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์Šคํ”„๋ง ๋ถ€ํŠธ ์Šคํƒ€ํ„ฐ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋“œ๋ผ์ด๋ฒ„, ํ…Œ์ŠคํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋“ฑ์„ ์˜์กด์„ฑ์œผ๋กœ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.plugins: ํ”„๋กœ์ ํŠธ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์„ ์–ธํ•˜๋Š” ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์Šคํ”„๋ง ๋ถ€ํŠธ ํ”Œ๋Ÿฌ๊ทธ์ธ ๋“ฑ์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • dependencies: ํ”„๋กœ์ ํŠธ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์˜์กด์„ฑ์„ ์„ ์–ธํ•˜๋Š” ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค.

settings.gradle

  • Gradle ํ”„๋กœ์ ํŠธ์˜ ์„ค์ • ํŒŒ์ผ์ž…๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ์˜ ์ด๋ฆ„์„ ์„ค์ •ํ•˜๊ณ , ํ•˜์œ„ ๋ชจ๋“ˆ(์„œ๋ธŒํ”„๋กœ์ ํŠธ)์ด ์žˆ๋Š” ๊ฒฝ์šฐ ์ด๋“ค์„ ํฌํ•จ์‹œํ‚ค๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ ๋ชจ๋“ˆ๋กœ ๊ตฌ์„ฑ๋œ ๋ฉ€ํ‹ฐ ํ”„๋กœ์ ํŠธ์˜ ๊ฒฝ์šฐ ๊ฐ ๋ชจ๋“ˆ์„ ์„ค์ •ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
  • ์ถ”๊ฐ€ ์ •๋ณด:
    • rootProject.name: ํ”„๋กœ์ ํŠธ์˜ ๋ฃจํŠธ ์ด๋ฆ„์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ) rootProject.name = 'my-spring-boot-app'
    • include: ๋ฉ€ํ‹ฐ ๋ชจ๋“ˆ ํ”„๋กœ์ ํŠธ์—์„œ ํ•˜์œ„ ํ”„๋กœ์ ํŠธ๋ฅผ ํฌํ•จ์‹œํ‚ค๋Š” ์„ค์ •์ž…๋‹ˆ๋‹ค.

์—ฐ์Šต ๋ฌธ์ œ

 

๋ฌธ์ œ 1)

MVC ํŒจํ„ด์—์„œ Model์ด ๋‹ด๋‹นํ•˜๋Š” ์—ญํ• ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

  1. ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ์‹œ๊ฐ์ ์œผ๋กœ ๋ณด์—ฌ์ฃผ๋Š” ์—ญํ• 
  2. ์‚ฌ์šฉ์ž์˜ ์š”์ฒญ์„ ๋ฐ›์•„ ์ฒ˜๋ฆฌํ•˜๋Š” ์—ญํ• 
  3. ๋ฐ์ดํ„ฐ์™€ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ๊ด€๋ฆฌํ•˜๋Š” ์—ญํ• 
  4. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ์ƒํ˜ธ์ž‘์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ์—ญํ• 

 

๋ฌธ์ œ 2)

๋ ˆ์ด์–ด๋“œ ์•„ํ‚คํ…์ฒ˜์—์„œ ๋น„์ฆˆ๋‹ˆ์Šค ๊ณ„์ธต์˜ ์ฃผ์š” ์—ญํ• ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

  1. ์‚ฌ์šฉ์ž์™€ ์ƒํ˜ธ์ž‘์šฉํ•˜๋Š” ์—ญํ• 
  2. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํ•ต์‹ฌ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์ฒ˜๋ฆฌํ•˜๋Š” ์—ญํ• 
  3. ๋ฐ์ดํ„ฐ๋ฅผ ์‹œ๊ฐ์ ์œผ๋กœ ํ‘œํ˜„ํ•˜๋Š” ์—ญํ• 
  4. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ์ƒํ˜ธ์ž‘์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ์—ญํ• 

 

๋ฌธ์ œ 3)

์Šคํ”„๋ง ๋ถ€ํŠธ ํ”„๋กœ์ ํŠธ์˜ main ๋””๋ ‰ํ† ๋ฆฌ์—์„œ ์ž๋ฐ” ์†Œ์Šค ์ฝ”๋“œ๊ฐ€ ๋“ค์–ด๊ฐ€๋Š” ๋””๋ ‰ํ† ๋ฆฌ์˜ ์ด๋ฆ„์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

  1. bin
  2. src
  3. java
  4. resources

 

๋ฌธ์ œ 4)

Gradle ํ”„๋กœ์ ํŠธ์˜ settings.gradle ํŒŒ์ผ์—์„œ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋Š” ๋‚ด์šฉ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

  1. ํ”„๋กœ์ ํŠธ์˜ ๋ฃจํŠธ ์ด๋ฆ„๊ณผ ํ•˜์œ„ ๋ชจ๋“ˆ ํฌํ•จ
  2. ํ…Œ์ŠคํŠธ ํŒŒ์ผ๊ณผ ๋ฆฌ์†Œ์Šค ํŒŒ์ผ ์„ค์ •
  3. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ HTTP ์š”์ฒญ ์ฒ˜๋ฆฌ ๋ฐฉ์‹
  4. ํ”„๋กœ์ ํŠธ์˜ ์˜์กด์„ฑ ๊ด€๋ฆฌ

 

๋ฌธ์ œ 5)

build.gradle ํŒŒ์ผ์—์„œ ์„ค์ •ํ•  ์ˆ˜ ์—†๋Š” ํ•ญ๋ชฉ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

  1. ํ”„๋กœ์ ํŠธ ์˜์กด์„ฑ
  2. ํ”Œ๋Ÿฌ๊ทธ์ธ ์„ค์ •
  3. ๋นŒ๋“œ ์Šคํฌ๋ฆฝํŠธ
  4. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ฟผ๋ฆฌ

 

 

๋‹ต: 1-3, 2-2, 3-3, 4-1, 5-4