DAO(๋ฐ์ดํ„ฐ ์•ก์„ธ์Šค ๊ฐœ์ฒด)๋Š” ํŠนํžˆ ๋ฐ์ดํ„ฐ ์•ก์„ธ์Šค ๋ฐ ์กฐ์ž‘ ํ”„๋กœ์„ธ์Šค์˜ ์ถ”์ƒํ™” ๋ฐ ์บก์Аํ™”๋ฅผ ์šฉ์ดํ•˜๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด ์†Œํ”„ํŠธ์›จ์–ด ์•„ํ‚คํ…์ฒ˜ ๋ฐ ํŒจํ„ด ์˜์—ญ์—์„œ ๋„๋ฆฌ ์ฑ„ํƒ๋˜๋Š” ๋””์ž์ธ ํŒจํ„ด์ž…๋‹ˆ๋‹ค. ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ๋งฅ๋ฝ์—์„œ ์‚ฌ์šฉ๋˜๋Š” DAO ํŒจํ„ด์˜ ์ฃผ์š” ๋ชฉํ‘œ๋Š” ๊ธฐ๋ณธ ๋ฐ์ดํ„ฐ ์ €์žฅ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ๋ถ„๋ฆฌํ•˜๊ณ  ์ด๋ฅผ ๋” ๋†’์€ ์ˆ˜์ค€์˜ ๊ฐ์ฒด ์ง€ํ–ฅ ํ‘œํ˜„์— ๋งคํ•‘ํ•จ์œผ๋กœ์จ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์—์„œ ๋ฐ์ดํ„ฐ ์•ก์„ธ์Šค ๋กœ์ง์„ ๋ถ„๋ฆฌํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ผ๋ฐ˜์ ์œผ๋กœ DAO๋Š” ๊ธฐ๋ณธ ๋ฐ์ดํ„ฐ ์†Œ์Šค(์˜ˆ: ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค, XML ํŒŒ์ผ ๋˜๋Š” ๊ธฐํƒ€ ์ €์žฅ ์‹œ์Šคํ…œ)์™€ ํ•ต์‹ฌ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋„๋ฉ”์ธ ํด๋ž˜์Šค(๋น„์ฆˆ๋‹ˆ์Šค ๊ฐ์ฒด ๋˜๋Š” ์—”ํ„ฐํ‹ฐ๋ผ๊ณ ๋„ ํ•จ) ์‚ฌ์ด์˜ ์ค‘๊ฐœ ๊ณ„์ธต ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜. ์ด๋Ÿฌํ•œ ๋ถ„๋ฆฌ๋ฅผ ํ†ตํ•ด ๊ฐœ๋ฐœ์ž๋Š” ์ „์ฒด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋…ผ๋ฆฌ์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๊ณ  ๋ฐ์ดํ„ฐ ์ €์žฅ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์œ ์ง€ ๊ด€๋ฆฌ ๊ฐ€๋Šฅ์„ฑ, ํ…Œ์ŠคํŠธ ๊ฐ€๋Šฅ์„ฑ ๋ฐ ํ™•์žฅ์„ฑ์ด ํ–ฅ์ƒ๋ฉ๋‹ˆ๋‹ค.

DAO ๋””์ž์ธ ํŒจํ„ด์€ ๋ช‡ ๊ฐ€์ง€ ์ฃผ์š” ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.

  • ์ธํ„ฐํŽ˜์ด์Šค: ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ํ•„์š”ํ•œ ๋‹ค์–‘ํ•œ ๋ฐ์ดํ„ฐ ์•ก์„ธ์Šค ๋ฐ ์กฐ์ž‘ ๋ฐฉ๋ฒ•์„ ์ •์˜ํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค์ž…๋‹ˆ๋‹ค. ์ด๋Š” ๋ฐ์ดํ„ฐ ์•ก์„ธ์Šค ๊ตฌํ˜„๊ณผ ๋‚˜๋จธ์ง€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐ„์˜ ๊ณ„์•ฝ์„ ํ˜•์„ฑํ•ฉ๋‹ˆ๋‹ค.
  • ๊ตฌํ˜„: ํŠน์ • ๋ฐ์ดํ„ฐ ์ €์žฅ ๋ฉ”์ปค๋‹ˆ์ฆ˜๊ณผ ์ธํ„ฐํŽ˜์ด์Šคํ•˜๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ๋„๋ฉ”์ธ ํด๋ž˜์Šค๊ฐ€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ํ˜•์‹์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ํฌํ•จํ•˜๋Š” DAO ์ธํ„ฐํŽ˜์ด์Šค์˜ ๊ตฌ์ฒด์ ์ธ ๊ตฌํ˜„์ž…๋‹ˆ๋‹ค. ๋‹ค์–‘ํ•œ ๋ฐ์ดํ„ฐ ์ €์žฅ ๊ธฐ์ˆ ์„ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค์–‘ํ•œ ๊ตฌํ˜„์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋ฐ์ดํ„ฐ ์†Œ์Šค: ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋˜๋Š” NoSQL ์‹œ์Šคํ…œ๊ณผ ๊ฐ™์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์•ก์„ธ์Šคํ•˜๊ณ  ์กฐ์ž‘ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ์‹ค์ œ ๋ฐ์ดํ„ฐ ์ €์žฅ ๋ฉ”์ปค๋‹ˆ์ฆ˜์ž…๋‹ˆ๋‹ค.
  • ๋„๋ฉ”์ธ(๋น„์ฆˆ๋‹ˆ์Šค) ๊ฐœ์ฒด: DAO ๊ณ„์ธต๊ณผ ์ƒํ˜ธ ์ž‘์šฉํ•˜์—ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํ•ต์‹ฌ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์ง€์›ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ์— ์•ก์„ธ์Šคํ•˜๊ณ  ์กฐ์ž‘ํ•˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋น„์ฆˆ๋‹ˆ์Šค ๊ฐœ์ฒด์ž…๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ฐœ์ฒด๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ๊ธฐ๋ณธ ๋ฐ์ดํ„ฐ ์›๋ณธ์˜ ํŠน์ • ํ…Œ์ด๋ธ”์ด๋‚˜ ์ปฌ๋ ‰์…˜์— ๋งคํ•‘๋ฉ๋‹ˆ๋‹ค.

AppMasterno-code ํ”Œ๋žซํผ์˜ ๋งฅ๋ฝ์—์„œ DAO๋Š” ๊ฐœ๋ฐœ์ž์™€ ์ผ๋ฐ˜ ๊ฐœ๋ฐœ์ž ๋ชจ๋‘๊ฐ€ ๊ด‘๋ฒ”์œ„ํ•œ ์ฝ”๋”ฉ ์ง€์‹ ์—†์ด๋„ ํ™•์žฅ ๊ฐ€๋Šฅํ•˜๊ณ  ์œ ์ง€ ๊ด€๋ฆฌ ๊ฐ€๋Šฅํ•˜๋ฉฐ ํ…Œ์ŠคํŠธ ๊ฐ€๋Šฅํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹ ์†ํ•˜๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๋ฐ ์ค‘์š”ํ•œ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์ž๋Š” ๋น„์ฆˆ๋‹ˆ์Šค ํ”„๋กœ์„ธ์Šค(BP) ๋””์ž์ด๋„ˆ๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ ๋ชจ๋ธ(๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์Šคํ‚ค๋งˆ)๊ณผ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์‹œ๊ฐ์ ์œผ๋กœ ์ƒ์„ฑํ•จ์œผ๋กœ์จ DAO์˜ ๊ธฐ๋Šฅ์„ ํ™œ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ ์•ก์„ธ์Šค ๋ฐ ์กฐ์ž‘ ํ”„๋กœ์„ธ์Šค๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฑ์—”๋“œ REST API ๋ฐ WSS endpoints ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ตœ์ข… ์‚ฌ์šฉ์ž๋Š” ์‹œ๊ฐ์ ์œผ๋กœ ์„ค๊ณ„๋œ ์›น ๋˜๋Š” ๋ชจ๋ฐ”์ผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ”„๋ŸฐํŠธ ์—”๋“œ๋ฅผ ํ†ตํ•ด ์ด๋Ÿฌํ•œ ์ถ”์ƒํ™”๋œ ๋ฐ์ดํ„ฐ ์•ก์„ธ์Šค ์„œ๋น„์Šค์™€ ์ƒํ˜ธ ์ž‘์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์™„์ „ํžˆ ๋Œ€ํ™”ํ˜•์œผ๋กœ ๋งŒ๋“ค์–ด์ง€๊ณ  ์ž๋™ ์ƒ์„ฑ๋œ REST API์™€ ์ง์ ‘ ์ธํ„ฐํŽ˜์ด์Šคํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ”Œ๋žซํผ์—์„œ ์ƒ์„ฑ๋œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์š”๊ตฌ ์‚ฌํ•ญ์ด ๋ณ€๊ฒฝ๋  ๋•Œ๋งˆ๋‹ค ์ง€์†์ ์œผ๋กœ ์žฌ์ƒ์„ฑ๋  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๊ธฐ์ˆ  ๋ถ€์ฑ„๋ฅผ ์ตœ์†Œํ™”ํ•˜๊ณ  ์ผ๊ด€๋œ ์ฝ”๋“œ ํ’ˆ์งˆ์„ ๋ณด์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ AppMaster PostgreSQL ํ˜ธํ™˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ํฌํ•จํ•œ ๊ด‘๋ฒ”์œ„ํ•œ ๋ฐ์ดํ„ฐ ์Šคํ† ๋ฆฌ์ง€ ์˜ต์…˜์„ ์ง€์›ํ•˜๋ฏ€๋กœ ์‚ฌ์šฉ์ž๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ๊ณ„์ธต์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๊ณ  ๋‹ค์–‘ํ•œ ์Šคํ† ๋ฆฌ์ง€ ๋ฉ”์ปค๋‹ˆ์ฆ˜ ๊ฐ„์— ์›ํ™œํ•˜๊ฒŒ ์ „ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

AppMaster ๋ฐฑ์—”๋“œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฝ”๋“œ ์ƒ์„ฑ์„ ์œ„ํ•œ Go(Golang)์™€ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฝ”๋“œ์šฉ JavaScript/TypeScript์™€ ํ•จ๊ป˜ Vue3 ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋†’์€ ์ˆ˜์ค€์˜ ํ™•์žฅ์„ฑ๊ณผ ์œ ์—ฐ์„ฑ์„ ๋‹ฌ์„ฑํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋ฐ”์ผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ฒฝ์šฐ AppMaster Android์šฉ Kotlin ๋ฐ Jetpack Compose, iOS์šฉ SwiftUI ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์ƒ์„ฑ๋œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ํ”Œ๋žซํผ์— ๊ตฌ์• ๋ฐ›์ง€ ์•Š๊ณ  ํŠน์ • ๋Œ€์ƒ ํ”Œ๋žซํผ์— ๋งž๊ฒŒ ์‰ฝ๊ฒŒ ํ™•์žฅ๋˜๊ฑฐ๋‚˜ ์ˆ˜์ •๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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