MVC(Model-View-Controller) ๋””์ž์ธ ํŒจํ„ด์€ ์†Œํ”„ํŠธ์›จ์–ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„ค๊ณ„์— ๋„๋ฆฌ ์ฑ„ํƒ๋˜๋Š” ์•„ํ‚คํ…์ฒ˜ ์ ‘๊ทผ ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. ์ด๋Š” ์ฝ”๋“œ๋ฅผ ๋ชจ๋“ˆ์‹ ๋ฐฉ์‹์œผ๋กœ ๊ตฌ์„ฑํ•˜์—ฌ ๋ฌธ์ œ ๋ถ„๋ฆฌ๋ฅผ ์ด‰์ง„ํ•˜๊ณ  ์‹œ์Šคํ…œ์˜ ์œ ์ง€ ๊ด€๋ฆฌ์„ฑ, ํ™•์žฅ์„ฑ ๋ฐ ํ…Œ์ŠคํŠธ ๊ฐ€๋Šฅ์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚ค๋Š” ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. MVC ํŒจ๋Ÿฌ๋‹ค์ž„์€ ๋ชจ๋“ˆ์‹ ๋ฐ ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•˜๋Š” AppMaster ํ”Œ๋žซํผ์˜ ์›์น™๊ณผ ์ž˜ ์ผ์น˜ํ•˜๋ฏ€๋กœ ๊ฐ•๋ ฅํ•˜๊ณ  ์œ ์ง€ ๊ด€๋ฆฌ ๊ฐ€๋Šฅํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ตฌ์ถ•ํ•˜๋Š” ๋ฐ ์ด์ƒ์ ์ธ ์ ‘๊ทผ ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.

MVC ์•„ํ‚คํ…์ฒ˜์—์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋กœ์ง์€ ์„ธ ๊ฐ€์ง€ ์ƒํ˜ธ ์—ฐ๊ฒฐ๋œ ๊ตฌ์„ฑ ์š”์†Œ๋กœ ๋‚˜๋‰ฉ๋‹ˆ๋‹ค.

  • ๋ชจ๋ธ - ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ๋ฐ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ๋‹ด๋‹นํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋ฐ์ดํ„ฐ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ, ๊ฒ€์ƒ‰, ์ €์žฅ ๋ฐ ์กฐ์ž‘๊ณผ ๊ฐ™์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋„๋ฉ”์ธ๋ณ„ ๋ฐ์ดํ„ฐ, ๊ทœ์น™ ๋ฐ ๊ธฐ๋Šฅ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ๋ชจ๋ธ ๊ตฌ์„ฑ ์š”์†Œ๋Š” ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค์™€ ๋…๋ฆฝ์ ์ด๋ฉฐ API ๋˜๋Š” ์ด๋ฒคํŠธ๋ฅผ ํ†ตํ•ด ๋‹ค๋ฅธ ๊ตฌ์„ฑ ์š”์†Œ์™€ ํ†ต์‹ ํ•ฉ๋‹ˆ๋‹ค.
  • ๋ณด๊ธฐ - ๋ชจ๋ธ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ํ‘œ์‹œํ•˜๊ณ  ์‚ฌ์šฉ์ž ์ž…๋ ฅ์„ ์บก์ฒ˜ํ•˜๋Š” ์—ญํ• ์„ ๋‹ด๋‹นํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌ์„ฑํ•˜๋ฉฐ ํ”„๋ ˆ์  ํ…Œ์ด์…˜ ๋ฐ ์‚ฌ์šฉ์ž ์ƒํ˜ธ ์ž‘์šฉ์— ์ค‘์ ์„ ๋‘ก๋‹ˆ๋‹ค. View ๊ตฌ์„ฑ ์š”์†Œ๋Š” ์‚ฌ์šฉ์ž์™€ ์ง์ ‘ ์ƒํ˜ธ ์ž‘์šฉํ•˜๊ณ  ์ž…๋ ฅ์„ ์บก์ฒ˜ํ•œ ๋‹ค์Œ ์ฒ˜๋ฆฌํ•  ์ปจํŠธ๋กค๋Ÿฌ๋กœ ๋‹ค์‹œ ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค.
  • ์ปจํŠธ๋กค๋Ÿฌ - ๋ชจ๋ธ๊ณผ ๋ทฐ ์‚ฌ์ด์˜ ์ค‘๊ฐœ์ž ์—ญํ• ์„ ํ•˜๋ฉฐ, ๋ชจ๋ธ๊ณผ ๋ทฐ ๊ฐ„์˜ ํ†ต์‹ ์„ ์ด‰์ง„ํ•˜๊ณ  ์‚ฌ์šฉ์ž ์ž…๋ ฅ ์ด๋ฒคํŠธ๋ฅผ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ๋ทฐ์—์„œ ์บก์ฒ˜ํ•œ ์‚ฌ์šฉ์ž ์ƒํ˜ธ ์ž‘์šฉ์— ๋Œ€ํ•œ ์‘๋‹ต์œผ๋กœ ์ปจํŠธ๋กค๋Ÿฌ๋Š” ์ž…๋ ฅ์„ ์ฒ˜๋ฆฌํ•˜๊ณ  ๊ทธ์— ๋”ฐ๋ผ ๋ชจ๋ธ์„ ์—…๋ฐ์ดํŠธํ•˜์—ฌ ๋ฐ์ดํ„ฐ๊ฐ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ „์ฒด์—์„œ ์ผ๊ด€๋˜๊ฒŒ ์œ ์ง€๋˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ์ปจํŠธ๋กค๋Ÿฌ๋Š” ๋ทฐ๋ฅผ ์—…๋ฐ์ดํŠธ๋œ ๋ชจ๋ธ ๋ฐ์ดํ„ฐ์™€ ๋™๊ธฐํ™”ํ•˜์—ฌ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ตœ์‹  ์ƒํƒœ๋กœ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.

MVC(Model-View-Controller)๋Š” ๋‹ค์–‘ํ•œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด ๋ฐ ํ”Œ๋žซํผ์—์„œ ๋„๋ฆฌ ์‚ฌ์šฉ๋˜์–ด ์กฐ์งํ™”๋˜๊ณ  ์œ ์ง€ ๊ด€๋ฆฌ ๊ฐ€๋Šฅํ•œ ์ฝ”๋“œ ๊ฐœ๋ฐœ์„ ์ด‰์ง„ํ•˜๋Š” ๋ฐ ์ค‘์š”ํ•œ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. ์‹œ๊ฐ์  ๋ฐ์ดํ„ฐ ๋ชจ๋ธ๋ง, ๋น„์ฆˆ๋‹ˆ์Šค ํ”„๋กœ์„ธ์Šค ๋””์ž์ธ, ์›น ๋ฐ ๋ชจ๋ฐ”์ผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์šฉ UI ๊ตฌ์„ฑ ์š”์†Œ ๋“ฑ AppMaster ํ”Œ๋žซํผ์˜ no-code ๋„๊ตฌ๋Š” MVC ์•„ํ‚คํ…์ฒ˜ ์›์น™์„ ์—ผ๋‘์— ๋‘๊ณ  ๊ตฌ์ถ•๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์ƒ์„ฑ๋œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํ™•์žฅ์„ฑ, ์œ ์ง€ ๊ด€๋ฆฌ ๋ฐ ๊ฒฌ๊ณ ์„ฑ์ด ๋ณด์žฅ๋ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, AppMaster ์—์„œ ์ƒ์„ฑ๋œ ๋ฐฑ์—”๋“œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ๋‹จ์ˆœ์„ฑ, ๋ชจ๋“ˆ์„ฑ ๋ฐ ๊ฐ•๋ ฅํ•œ ๋™์‹œ์„ฑ ์ง€์›์œผ๋กœ ์•Œ๋ ค์ง„ ์†Œํ”„ํŠธ์›จ์–ด ์—…๊ณ„์—์„œ ๋„๋ฆฌ ์ฑ„ํƒ๋˜๋Š” ์–ธ์–ด์ธ Go ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋ฅผ ํ™œ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ƒ์„ฑ๋œ Go ์ฝ”๋“œ๋Š” MVC ์•„ํ‚คํ…์ฒ˜์˜ ๋ชจ๋ธ ๋ฐ ์ปจํŠธ๋กค๋Ÿฌ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ์บก์Аํ™”ํ•˜์—ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์œ ์ง€ํ•˜๊ณ  API ํ˜ธ์ถœ์„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ๋ฐ˜๋ฉด, ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ƒ์„ฑ์— ์‚ฌ์šฉ๋˜๋Š” Vue3 ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ๋ฐ˜์‘ํ˜• ๋ฐ ๋Œ€ํ™”ํ˜• ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณตํ•˜์—ฌ View ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ํ‘œํ˜„ํ•ฉ๋‹ˆ๋‹ค. ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋ชจ๋ฐ”์ผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ AppMasterJetpack Compose (Android) ๋ฐ SwiftUI (iOS)์™€ ํ•จ๊ป˜ Kotlin์„ ํ™œ์šฉํ•˜์—ฌ MVC ํŒจํ„ด์˜ ์›์น™์„ ๋”ฐ๋ฅด๋Š” View ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

Model-View-Controller ์•„ํ‚คํ…์ฒ˜๋ฅผ ์ค€์ˆ˜ํ•จ์œผ๋กœ์จ AppMaster ํ™•์žฅ ๊ฐ€๋Šฅํ•˜๊ณ  ์œ ์ง€ ๊ด€๋ฆฌ ๊ฐ€๋Šฅํ•œ ๋ชจ๋“ˆ์‹ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์ค‘์†Œ๊ธฐ์—…๋ถ€ํ„ฐ ๋Œ€๊ธฐ์—…๊นŒ์ง€ ๊ด‘๋ฒ”์œ„ํ•œ ๊ณ ๊ฐ์—๊ฒŒ ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ์ ์œผ๋กœ AppMaster ํ”Œ๋žซํผ์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ ์†๋„๋ฅผ ํฌ๊ฒŒ ๋†’์ด๊ณ  ๋น„์šฉ์„ ์ ˆ๊ฐํ•˜๋ฉฐ ๊ธฐ์ˆ  ๋ถ€์ฑ„๋ฅผ ์—†์•จ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

MVC ์•„ํ‚คํ…์ฒ˜ ์‚ฌ์šฉ์˜ ๋˜ ๋‹ค๋ฅธ ์ฃผ์š” ์ด์ ์€ ๋ชจ๋ธ์„ ๋ทฐ์—์„œ ๋ถ„๋ฆฌํ•˜์—ฌ ๊ฐ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ๊ฐœ๋ณ„์ ์œผ๋กœ ๋ณด๋‹ค ํšจ์œจ์ ์œผ๋กœ ๊ฐœ๋ฐœ, ํ…Œ์ŠคํŠธ ๋ฐ ๋””๋ฒ„๊น…ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋˜ํ•œ ์ด๋Ÿฌํ•œ ๊ด€์‹ฌ์‚ฌ ๋ถ„๋ฆฌ๋ฅผ ํ†ตํ•ด ๊ธฐ๋ณธ ๋น„์ฆˆ๋‹ˆ์Šค ๋…ผ๋ฆฌ์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๊ณ  ์„ค๊ณ„ ๋ณ€๊ฒฝ์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ƒˆ๋กœ์šด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ๊ฐ€๋Šฅ์„ฑ์ด ์ค„์–ด๋“ญ๋‹ˆ๋‹ค.

REST API์šฉ Swagger(OpenAPI) ๋ฌธ์„œ์™€ ๊ฐ™์€ AppMaster ์˜ ๋ฌธ์„œ ์ž๋™ ์ƒ์„ฑ์€ MVC ํŒจํ„ด์ด ์ œ๊ณตํ•˜๋Š” ๋ชจ๋“ˆ์‹ ์„ค๊ณ„ ๋•๋ถ„์— ๋‹ค๋ฅธ ์‹œ์Šคํ…œ๊ณผ์˜ ์›ํ™œํ•œ ํ†ตํ•ฉ์„ ์šฉ์ดํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ๊ธฐ๋ณธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋กœ์„œ์˜ PostgreSQL ํ˜ธํ™˜์„ฑ์€ ๋ฐ์ดํ„ฐ ์ผ๊ด€์„ฑ๊ณผ ๋ฌด๊ฒฐ์„ฑ์„ ๋ณด์žฅํ•˜๋Š” ๋ฐ˜๋ฉด, ์ƒ์„ฑ๋œ Go ๋ฐฑ์—”๋“œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ƒํƒœ ๋น„์ €์žฅ ํŠน์„ฑ์€ ๋›ฐ์–ด๋‚œ ํ™•์žฅ์„ฑ๊ณผ ๊ณ ์„ฑ๋Šฅ์„ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค.

๊ฒฐ๋ก ์ ์œผ๋กœ MVC(Model-View-Controller) ๋””์ž์ธ ํŒจํ„ด์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ตฌ์ถ•์„ ์œ„ํ•œ ๊ฐ•๋ ฅํ•˜๊ณ  ์œ ์—ฐํ•œ ์•„ํ‚คํ…์ฒ˜ ์ ‘๊ทผ ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. ์ด๋Š” AppMaster ์˜ no-code ํ”Œ๋žซํผ์ด ๊ตฌ์ถ•๋œ ์›์น™์— ํฌ๊ฒŒ ๊ณต๊ฐํ•˜๋Š” ์†์„ฑ์ธ ์šฐ๋ ค ์‚ฌํ•ญ์˜ ๋ถ„๋ฆฌ, ๋ชจ๋“ˆ์„ฑ ๋ฐ ์œ ์ง€ ๊ด€๋ฆฌ ๊ฐ€๋Šฅ์„ฑ์„ ์ด‰์ง„ํ•ฉ๋‹ˆ๋‹ค. AppMaster MVC ํŒจํ„ด์„ ํ™œ์šฉํ•˜์—ฌ ๊ณ ๊ฐ์ด ๋ณต์žกํ•œ ์ฝ”๋“œ๋ฅผ ์ฒ˜๋ฆฌํ•  ํ•„์š” ์—†์ด ์›น, ๋ชจ๋ฐ”์ผ ๋ฐ ๋ฐฑ์—”๋“œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ํฌ๊ด„ํ•˜๋Š” ํฌ๊ด„์ ์ด๊ณ  ํ™•์žฅ ๊ฐ€๋Šฅํ•˜๋ฉฐ ์œ ์ง€ ๊ด€๋ฆฌ ๊ฐ€๋Šฅํ•œ ์†Œํ”„ํŠธ์›จ์–ด ์†”๋ฃจ์…˜์„ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ๋Š” ํšจ์œจ์ ์ด๊ณ  ๋น„์šฉ ํšจ๊ณผ์ ์ธ ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.