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

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

Command Pattern์˜ ์ผ๋ฐ˜์ ์ธ ๊ตฌํ˜„์—๋Š” Command ์ธํ„ฐํŽ˜์ด์Šค, ConcreteCommand ํด๋ž˜์Šค, Receiver ํด๋ž˜์Šค ๋ฐ Invoker ํด๋ž˜์Šค์˜ ๋„ค ๊ฐ€์ง€ ๊ธฐ๋ณธ ๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. Command ์ธํ„ฐํŽ˜์ด์Šค๋Š” ๋ช…๋ น ๊ฐœ์ฒด๊ฐ€ ์ˆ˜ํ–‰ํ•  ์ž‘์—…์„ ์บก์Аํ™”ํ•˜๊ณ  ์ •์˜ํ•˜๊ธฐ ์œ„ํ•œ ๊ธฐ๋ณธ ๊ตฌ์กฐ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ConcreteCommand ํด๋ž˜์Šค๋Š” Command ์ธํ„ฐํŽ˜์ด์Šค์—์„œ ์ƒ์†๋˜๋ฉฐ, ์ ์ ˆํ•œ ๊ธฐ๋Šฅ์œผ๋กœ ์‹คํ–‰() ๋ฉ”์„œ๋“œ๋ฅผ ์žฌ์ •์˜ํ•˜์—ฌ ํŠน์ • ์ž‘์—…์„ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค. Receiver ํด๋ž˜์Šค๋Š” ์š”์ฒญ๋œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์—ญํ• ์„ ๋‹ด๋‹นํ•˜๋ฉฐ ๊ฐ ConcreteCommand ํด๋ž˜์Šค๋Š” Receiver ์ธ์Šคํ„ด์Šค์— ๋Œ€ํ•œ ์ฐธ์กฐ๋ฅผ ์œ ์ง€ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ๋งˆ์ง€๋ง‰์œผ๋กœ Invoker ํด๋ž˜์Šค๋Š” ๋ช…๋ น ๊ฐœ์ฒด๋ฅผ ๋ณด์œ ํ•˜๊ณ  ๊ด€๋ฆฌํ•˜์—ฌ ์›ํ•˜๋Š” ์ˆœ์„œ๋กœ ์‹คํ–‰ํ•˜๊ฑฐ๋‚˜ ๋‚˜์ค‘์— ์‹คํ–‰ ์ทจ์†Œ/๋‹ค์‹œ ์‹คํ–‰ ๊ธฐ๋Šฅ์„ ์œ„ํ•ด ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ์‚ฌ์šฉ์ž๊ฐ€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๋ ˆ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€, ํŽธ์ง‘, ์‚ญ์ œํ•  ์ˆ˜ ์žˆ๋Š” ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ตฌ์ถ•ํ•˜๋Š” AppMaster ๊ณ ๊ฐ์„ ์ƒ๊ฐํ•ด ๋ณด์‹ญ์‹œ์˜ค. ๊ณ ๊ฐ์€ ๋ช…๋ น ํŒจํ„ด์„ ๊ตฌํ˜„ํ•˜์—ฌ ๋ณด๋‹ค ๋ชจ๋“ˆํ™”๋˜๊ณ  ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ์‹œ์Šคํ…œ์„ ์„ค๊ณ„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ Command ์ธํ„ฐํŽ˜์ด์Šค๋Š” ์ง€์ •๋œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•œ Execute() ๋ฉ”์„œ๋“œ๋ฅผ ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ AddRecordCommand, EditRecordCommand ๋ฐ DeleteRecordCommand์™€ ๊ฐ™์€ ConcreteCommand ํด๋ž˜์Šค๋Š” ์‹คํ–‰() ๋ฉ”์„œ๋“œ๋ฅผ ๊ตฌํ˜„ํ•˜์—ฌ ํ•ด๋‹น ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ช…๋ น ๊ฐœ์ฒด๋Š” ์‹ค์ œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” DatabaseReceiver ์ธ์Šคํ„ด์Šค์— ๋Œ€ํ•œ ์ฐธ์กฐ๋ฅผ ์œ ์ง€ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ๋งˆ์ง€๋ง‰์œผ๋กœ ApplicationInvoker ํด๋ž˜์Šค๋Š” ๋ช…๋ น ๊ฐœ์ฒด๋ฅผ ๊ด€๋ฆฌํ•˜์—ฌ ๊ณ ๊ฐ์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์ž ์žฌ์ ์ธ ์‹คํ–‰ ์ทจ์†Œ/๋‹ค์‹œ ์‹คํ–‰ ๊ธฐ๋Šฅ์— ๋Œ€ํ•ด ์‹คํ–‰๋œ ๋ช…๋ น์„ ์ถ”์ ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

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

AppMaster ์˜ no-code ํ”Œ๋žซํผ์„ ํ†ตํ•ด ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ์ž๋Š” ๋ณธ์งˆ์ ์œผ๋กœ ๋ช…๋ น ํŒจํ„ด ๋‚ด์—์„œ ๋ฐœ๊ฒฌ๋˜๋Š” ๋ชจ๋“ˆ์„ฑ, ํ™•์žฅ์„ฑ, ๋ฌธ์ œ ๋ถ„๋ฆฌ ๋ฐ ์œ ์ง€ ๊ด€๋ฆฌ ๊ฐ€๋Šฅ์„ฑ์˜ ์›์น™์„ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. AppMaster ์˜ ์‹œ๊ฐ์  ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐœ๋ฐœ์ž๋Š” ๋ฐ์ดํ„ฐ ๋ชจ๋ธ, ๋น„์ฆˆ๋‹ˆ์Šค ํ”„๋กœ์„ธ์Šค, REST API ๋ฐ WSS ์—”๋“œํฌ์ธํŠธ๋ฅผ ์„ค๊ณ„ํ•˜๋Š” ๋™์‹œ์— drag-and-drop ๊ธฐ๋Šฅ์„ ํ†ตํ•ด ์›น ๋ฐ ๋ชจ๋ฐ”์ผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์šฉ UI ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ํ”„๋กœ์„ธ์Šค๋Š” ๊ถ๊ทน์ ์œผ๋กœ ๊ธฐ์ˆ  ๋ถ€์ฑ„๋ฅผ ์ตœ์†Œํ™”ํ•˜๋ฉด์„œ ๊ณ ํ’ˆ์งˆ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ƒ์„ฑํ•จ์œผ๋กœ์จ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ ๋…ธ๋ ฅ์˜ ํšจ์œจ์„ฑ, ํšจ๊ณผ ๋ฐ ํ™•์žฅ์„ฑ์„ ๊ฐ•ํ™”ํ•ฉ๋‹ˆ๋‹ค.

๊ฒฐ๋ก ์ ์œผ๋กœ, ๋ช…๋ น ํŒจํ„ด์€ ์š”์ฒญ์„ ๊ฐ์ฒด๋กœ ์บก์Аํ™”ํ•˜์—ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋”์šฑ ๋ชจ๋“ˆํ™”ํ•˜๊ณ  ํ™•์žฅ ๊ฐ€๋Šฅํ•˜๋ฉฐ ์œ ์ง€ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด ์•„ํ‚คํ…์ฒ˜์˜ ํ•„์ˆ˜ ๋””์ž์ธ ํŒจํ„ด์ž…๋‹ˆ๋‹ค. ์›น, ๋ชจ๋ฐ”์ผ ๋ฐ ๋ฐฑ์—”๋“œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์— Command Pattern์„ ํ™œ์šฉํ•˜๋ฉด ๊ฐœ๋ฐœ์ž์™€ ์†Œํ”„ํŠธ์›จ์–ด ์„ค๊ณ„์ž์—๊ฒŒ ๋งค์šฐ ํšจ์œจ์ ์ด๊ณ  ํ™•์žฅ ๊ฐ€๋Šฅํ•˜๋ฉฐ ์ ์‘ ๊ฐ€๋Šฅํ•œ ์‹œ์Šคํ…œ์„ ๋งŒ๋“œ๋Š” ๋ฐ ์œ ์šฉํ•œ ๋„๊ตฌ์™€ ํ†ต์ฐฐ๋ ฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. AppMaster ์˜ ํ”Œ๋žซํผ์„ ํ™œ์šฉํ•จ์œผ๋กœ์จ ๊ฐœ๋ฐœ์ž๋Š” Command Pattern์˜ ํ•ต์‹ฌ ์›์น™์„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ํ†ตํ•ฉํ•˜์—ฌ ํ’ˆ์งˆ์„ ์ €ํ•˜ํ•˜๊ฑฐ๋‚˜ ์žฅ๊ธฐ์ ์ธ ์ง€์† ๊ฐ€๋Šฅ์„ฑ์„ ์ง€์—ฐ์‹œํ‚ค์ง€ ์•Š๊ณ  ๋” ๋น ๋ฅด๊ณ  ๋น„์šฉ ํšจ์œจ์ ์ธ ๊ฐœ๋ฐœ ๊ฒฐ๊ณผ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.