[Etc] ๐Ÿค– Layered Architecture & MVC pattern

๋ ˆ์ด์–ด๋“œ ์•„ํ‚คํ…์ณ์™€ MVC ํŒจํ„ด์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž.


๋ ˆ์ด์–ด๋“œ ์•„ํ‚คํ…์ณ(Layered Architecture)๋ž€?

  • ์—ฌ๋Ÿฌ ์ˆ˜ํ‰ ๋ ˆ์ด์–ด๊ฐ€ ์ˆ˜์ง์ ์œผ๋กœ ์Œ“์ธ ๊ตฌ์กฐ (์ƒ์œ„ ๋ ˆ์ด์–ด์—์„œ ํ•˜์œ„ ๋ ˆ์ด์–ด๋กœ ๋‹จ๋ฐฉํ–ฅ ์˜์กด์„ฑ)
  • ๊ฐ ๊ณ„์ธต์ด ๋ช…ํ™•ํ•œ ์—ญํ• ์„ ๊ฐ€์ง€๋ฉฐ, ํ•˜์œ„ ๊ณ„์ธต๋งŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„ํ•˜์—ฌ ์œ ์ง€๋ณด์ˆ˜์„ฑ๊ณผ ํ™•์žฅ์„ฑ์„ ๋†’์ด๋Š” ๊ฒƒ์ด ๋ชฉ์ 

    1. Presentation Layer (ํ”„๋ ˆ์  ํ…Œ์ด์…˜ ๊ณ„์ธต) : 1์ธต๋กœ๋น„, ๋ฐฉ๋ฌธ๊ฐ ๋งž์ดํ•˜๊ณ  ์•ˆ๋‚ด

      ์˜ˆ์‹œ: Spring Boot์˜ Controller

      • ์‚ฌ์šฉ์ž์™€ ์ง์ ‘ ์ƒํ˜ธ์ž‘์šฉํ•˜๋Š” ๊ณ„์ธต (์˜ˆ: ์›น UI, API ์ปจํŠธ๋กค๋Ÿฌ)
      • ์‚ฌ์šฉ์ž์˜ ์ž…๋ ฅ์„ ๋ฐ›์•„ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ํ˜ธ์ถœํ•˜๊ณ , ์‘๋‹ต์„ ๋ฐ˜ํ™˜
    2. Business Logic Layer (๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ๊ณ„์ธต) : ์‹ค์ œ ํšŒ์‚ฌ ์—…๋ฌด ์„ค๊ณ„ ๋ฐ ๊ทœ์น™ ์ˆ˜๋ฆฝ

      ์˜ˆ์‹œ: Spring Boot์˜ Service

      • ํ•ต์‹ฌ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ณ„์ธต
      • ๋„๋ฉ”์ธ ๊ทœ์น™์„ ์ ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ ๊ฒ€์ฆ ๋ฐ ๊ฐ€๊ณต ์ˆ˜ํ–‰
    3. Data Access Layer (๋ฐ์ดํ„ฐ ์ ‘๊ทผ ๊ณ„์ธต) : ๋น„์ฆˆ๋‹ˆ์Šค ๋ ˆ์ด์–ด์˜ ๋ช…๋ น ์‹คํ–‰

      ์˜ˆ์‹œ: Spring Boot์˜ Repository

      • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ์ง์ ‘ ์ƒํ˜ธ์ž‘์šฉํ•˜๋Š” ๊ณ„์ธต
      • DAO(Repository)๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  ์กฐํšŒํ•˜๋Š” ์—ญํ• 
    4. Database Layer (๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ณ„์ธต) : ํ•„์š”ํ•œ ์ •๋ณด ์ €์žฅ ๋ฐ ๊ฒ€์ƒ‰
      • ์‹ค์ œ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฌผ๋ฆฌ์  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค (MySQL, PostgreSQL ๋“ฑ)
  • ๋ฐ์ดํ„ฐ ํ๋ฆ„
    • ์š”์ฒญ โ†’ ์ปจํŠธ๋กค๋Ÿฌ โ†’ ์„œ๋น„์Šค โ†’ ๋ ˆํฌ์ง€ํ† ๋ฆฌ
  • ์‚ฌ์šฉ ์ด์œ 
    • ๋ชจ๋“ˆํ™”: ๊ฐ ๋ ˆ์ด์–ด๊ฐ€ ๋…๋ฆฝ์ ์ด๋ผ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์˜ํ–ฅ์„ ์ตœ์†Œํ™”
    • ์œ ์ง€๋ณด์ˆ˜์„ฑ: ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง(Service)๊ณผ DB ์ ‘๊ทผ(Repository)์„ ๋ถ„๋ฆฌ
    • ํ…Œ์ŠคํŠธ ์šฉ์ด: ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ์ž‘์„ฑ์ด ์‰ฌ์›€ (ex: Service ๋ ˆ์ด์–ด๋งŒ Mock ํ…Œ์ŠคํŠธ ๊ฐ€๋Šฅ)

๋ ˆ์ด์–ด ๊ฐ„ ๊ด€๊ณ„

[ํด๋ผ์ด์–ธํŠธ]
    โ†“
[Presentation Layer]  โ†’  Controller
    โ†“
[Business Logic Layer]  โ†’  Service
    โ†“
[Data Access Layer]  โ†’  Repository (DAO)
    โ†“
[Database Layer]  โ†’  DB (MySQL, PostgreSQL)
  • ์ƒ์œ„ ๊ณ„์ธต(Presentation)์€ ํ•˜์œ„ ๊ณ„์ธต(Business Logic)๋งŒ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ์Œ.
  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ด€๋ จ ๋กœ์ง์ด ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง๊ณผ ๋ถ„๋ฆฌ๋˜์–ด ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์‰ฌ์›€.

MVC๋ž€?

  • Model-View-Controller
    • Model : ์š”๋ฆฌ์‚ฌ๊ฐ€ ์‹ค์ œ ์Œ์‹์„ ์ค€๋น„ํ•˜๊ณ  ๋งŒ๋“œ๋Š” ์ž‘์—…
    • View : ์Œ์‹์˜ ํ”Œ๋ ˆ์ดํŒ…
    • Controller : ๊ณ ๊ฐ์˜ ์ฃผ๋ฌธ์„ ๋ฐ›๊ณ , ์š”๋ฆฌ์‚ฌ์—๊ฒŒ ์ „๋‹ฌํ•˜์—ฌ ์™„์„ฑ๋œ ์š”๋ฆฌ๋ฅผ ํ…Œ์ด๋ธ”์— ์„œ๋น™ (๋ฐฑ์—”๋“œ)
    • 3๊ฐœ์˜ ์š”์†Œ๊ฐ€ ์œ ๊ธฐ์ ์œผ๋กœ ํ˜‘๋ ฅ
  • ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค์™€ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ๋ถ„๋ฆฌ
  • ๋ฐ์ดํ„ฐ ํ๋ฆ„
    • ์š”์ฒญ โ†’ ์ปจํŠธ๋กค๋Ÿฌ โ†’ ๋ชจ๋ธ โ†’ ๋ทฐ
  • ์‚ฌ์šฉ ์ด์œ 
    • ์—ญํ•  ๋ถ„๋ฆฌ: View, Model, Controller๊ฐ€ ๋…๋ฆฝ์ ์œผ๋กœ ๋™์ž‘ํ•˜์—ฌ ์œ ์ง€๋ณด์ˆ˜ ์šฉ์ด
    • ์œ ์—ฐํ•œ ํ™•์žฅ: UI ๋ณ€๊ฒฝ(View)์ด๋‚˜ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง(Model)์„ ๋”ฐ๋กœ ์ˆ˜์ • ๊ฐ€๋Šฅ
    • ์žฌ์‚ฌ์šฉ์„ฑ ์ฆ๊ฐ€: ๊ฐ™์€ Model์„ ์—ฌ๋Ÿฌ View์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅ

Layered Architecture & MVC pattern

๋ ˆ์ด์–ด๋“œ ์•„ํ‚คํ…์ณ์™€ MVC๋ฅผ ํ•จ๊ป˜ ์‚ฌ์šฉ

  • ๋‘˜์„ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋ฉด ์œ ์ง€๋ณด์ˆ˜์„ฑ๊ณผ ํ™•์žฅ์„ฑ์ด ์ข‹์•„์ง„๋‹ค.
    • Controller๋Š” ์ตœ๋Œ€ํ•œ ๊ฐ€๋ณ๊ฒŒ (Thin Controller, Fat Service)
    • ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์€ Service Layer์—์„œ ์ฒ˜๋ฆฌ (SRP ์›์น™ ์ค€์ˆ˜)

๋‘˜์„ ํ•จ๊ป˜ ์‚ฌ์šฉํ–ˆ์„ ๋•Œ ๊ด€๊ณ„ ํ๋ฆ„ (์š”์ฒญ โ†’ ์‘๋‹ต)

  1. ์‚ฌ์šฉ์ž (Client) ๊ฐ€ ์š”์ฒญ์„ ๋ณด๋ƒ„
  2. Controller (์ž…๋ ฅ ์ฒ˜๋ฆฌ, ์š”์ฒญ ๋งคํ•‘)
  3. Service (๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ์ฒ˜๋ฆฌ)
  4. Repository (๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ ‘๊ทผ)
  5. Service โ†’ Controller ๋กœ ์‘๋‹ต ๋ฐ˜ํ™˜
  6. Controller โ†’ View (๋˜๋Š” JSON)
  • MVC๋Š” ์—ญํ• ์„ ๋ถ„๋ฆฌํ•˜๊ณ , ๋ ˆ์ด์–ด๋“œ ์•„ํ‚คํ…์ฒ˜๋Š” ๊ฐ ๊ณ„์ธต์„ ๋” ์ฒด๊ณ„์ ์œผ๋กœ ์กฐ์งํ™”ํ•˜์—ฌ ์œ ์ง€๋ณด์ˆ˜์„ฑ๊ณผ ํ™•์žฅ์„ฑ์„ ๋†’์ธ๋‹ค