ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํŒจ๋Ÿฌ๋‹ค์ž„ ์˜์—ญ์—์„œ DSL(Domain-Specific Language)์€ ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ์˜ ์ค‘์š”ํ•œ ์ธก๋ฉด์„ ์ฐจ์ง€ํ•ฉ๋‹ˆ๋‹ค. DSL์€ ํŠน์ • ๋„๋ฉ”์ธ์ด๋‚˜ ์‚ฐ์—…์˜ ๊ณ ์œ ํ•œ ์š”๊ตฌ์™€ ์ œ์•ฝ์„ ์ˆ˜์šฉํ•˜๋„๋ก ํŠน๋ณ„ํžˆ ์„ค๊ณ„๋œ ๋งž์ถคํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์ž…๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ „๋ฌธ ์–ธ์–ด๋Š” ์˜๋„๋œ ๋„๋ฉ”์ธ๋ณ„ ์‘์šฉ ๋ถ„์•ผ์˜ ๋ฒ”์œ„ ๋‚ด์—์„œ ์†”๋ฃจ์…˜์„ ๊ฐ„์†Œํ™”ํ•˜๊ณ  ๋‹จ์ˆœํ™”ํ•˜์—ฌ ๊ฐœ๋ฐœ ํ”„๋กœ์„ธ์Šค๋ฅผ ์‹ค์งˆ์ ์œผ๋กœ ์ตœ์ ํ™”ํ•ฉ๋‹ˆ๋‹ค. Java, Python ๋ฐ C++์™€ ๊ฐ™์€ ๋ฒ”์šฉ ์–ธ์–ด(GPL)์™€ ๋‹ฌ๋ฆฌ DSL์˜ ์ดˆ์ ์€ ์ง๊ด€์ ์ธ ๊ตฌ๋ฌธ, ๊ณ ๊ธ‰ ์˜๋ฏธ ํ‘œํ˜„ ๋ฐ ๋…์ ์ ์ธ ๋นŒ๋“œ ๋•๋ถ„์— ๋Œ€์ƒ ๋„๋ฉ”์ธ์—์„œ ๋” ๋†’์€ ์ˆ˜์ค€์˜ ์ƒ์‚ฐ์„ฑ์„ ๋ณด์žฅํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. -๊ธฐ๋Šฅ์ƒ.

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

๋„๋ฉ”์ธ ํŠน์ • ์–ธ์–ด๋Š” ๋งž์ถคํ˜• ๊ธฐ๋Šฅ๊ณผ ํ–ฅ์ƒ๋œ ์ƒ์‚ฐ์„ฑ ์ด์ ์œผ๋กœ ์ธํ•ด ์‚ฐ์—… ์ „๋ฐ˜์— ๊ฑธ์ณ ๋„๋ฆฌ ์ฑ„ํƒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ฑ„ํƒ์€ ํŠนํžˆ UI ๋””์ž์ธ, ๋ฐ์ดํ„ฐ ์กฐ์ž‘, ๋ณด์•ˆ ์ •์ฑ…, ๋„คํŠธ์›Œํ‚น ๊ตฌ์„ฑ, ๊ฒŒ์ž„ ๋ฐ ํ…Œ์ŠคํŠธ ํ”„๋ ˆ์ž„์›Œํฌ์™€ ๊ฐ™์€ ๋‹ค์–‘ํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์˜์—ญ์„ ์ง€์›ํ•˜๋Š” DSL์˜ ํญ๋ฐœ์ ์ธ ์ฆ๊ฐ€๋กœ ์ž…์ฆ๋ฉ๋‹ˆ๋‹ค. ์ž˜ ์•Œ๋ ค์ง„ DSL์˜ ์˜ˆ๋กœ๋Š” ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ฟผ๋ฆฌ๋ฅผ ์œ„ํ•œ SQL, ์›น ๊ธฐ๋ฐ˜ UI ๋งˆํฌ์—…์„ ์œ„ํ•œ HTML, ๋นŒ๋“œ ์ž๋™ํ™”๋ฅผ ์œ„ํ•œ Gradle, ์›น ํŽ˜์ด์ง€ ์Šคํƒ€์ผ ์ง€์ •์„ ์œ„ํ•œ CSS ๋“ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

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

์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ์ด ๋ฐœ์ „ํ•จ์— ๋”ฐ๋ผ ๋„๋ฉ”์ธ๋ณ„ ์–ธ์–ด์˜ ์žฅ์ ์„ ์ตœ๋Œ€ํ•œ ํ™œ์šฉํ•˜๊ธฐ ์œ„ํ•ด AppMaster ์™€ ๊ฐ™์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ ํ”Œ๋žซํผ์ด ๋“ฑ์žฅํ–ˆ์Šต๋‹ˆ๋‹ค. AppMasterno-code ํ”Œ๋žซํผ์€ ์‹œ๊ฐ์ ์œผ๋กœ ์ง๊ด€์ ์ธ ๋ฐ์ดํ„ฐ ๋ชจ๋ธ, ๋น„์ฆˆ๋‹ˆ์Šค ํ”„๋กœ์„ธ์Šค ๋ฐ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฐ ์žˆ์–ด DSL์˜ ์—„์ฒญ๋‚œ ์ž ์žฌ๋ ฅ์„ ์บก์Аํ™”ํ•˜์—ฌ ๋ฐฑ์—”๋“œ, ์›น ๋ฐ ๋ชจ๋ฐ”์ผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์›ํ™œํ•˜๊ณ  ๋ฏผ์ฒฉํ•œ ๊ฐœ๋ฐœ์„ ์ด‰์ง„ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ฐ•๋ ฅํ•œ ํ”Œ๋žซํผ์€ ์›น ๊ธฐ๋ฐ˜ UI ๋งˆํฌ์—… ๋ฐ ์Šคํƒ€์ผ๋ง์„ ์œ„ํ•ด HTML ๋ฐ CSS์™€ ๊ฐ™์€ ๋›ฐ์–ด๋‚œ DSL์˜ ๊ธฐ๋Šฅ์„ ํ™œ์šฉํ•˜๊ณ  ํ™•์žฅํ•˜๋Š” ๋™์‹œ์— AppMaster์—์„œ ์ƒ์„ฑ๋œ Vue3 ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ปจํ…์ŠคํŠธ์—์„œ ๋„๋ฉ”์ธ๋ณ„ ๋…ผ๋ฆฌ ๊ตฌํ˜„์„ ์œ„ํ•ด ๋‚ด๋ถ€ DSL์„ ํ†ตํ•ฉํ•ฉ๋‹ˆ๋‹ค.

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ƒ์„ฑ์— ๋Œ€ํ•œ AppMaster ์˜ ํ˜์‹ ์ ์ธ ๋””์ž์ธ ์ค‘์‹ฌ ์ ‘๊ทผ ๋ฐฉ์‹์€ ์ง€์†์ ์ธ ํ™•์žฅ์„ฑ๊ณผ ์œ ์ง€ ๊ด€๋ฆฌ์„ฑ์„ ๋ฐ”ํƒ•์œผ๋กœ ์‹ ์†ํ•œ ์•„์ด๋””์–ด ๊ตฌ์ƒ, ํ”„๋กœํ† ํƒ€์ž… ์ œ์ž‘, ํ…Œ์ŠคํŠธ ๋ฐ ๋ฐฐํฌ๋ฅผ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค. AppMaster์—์„œ ์ƒ์„ฑ๋œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ๋ชจ๋“  Postgresql ํ˜ธํ™˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ์ƒํ˜ธ ์šด์šฉ ๊ฐ€๋Šฅํ•˜๋ฉฐ ์ƒํƒœ ์—†์ด ์ปดํŒŒ์ผ๋œ Go(golang) ๋ฐฑ์—”๋“œ ๋•๋ถ„์— ๋กœ๋“œ๊ฐ€ ๋งŽ์€ ์‚ฌ์šฉ ์‚ฌ๋ก€์— ๋Œ€ํ•ด ๋›ฐ์–ด๋‚œ ํ™•์žฅ์„ฑ์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. DSL์˜ ์ „๋žต์  ํ™œ์šฉ์— ๋Œ€ํ•œ ์ฆ๊ฑฐ๋กœ AppMaster ํ”Œ๋žซํผ์€ ๊ฐœ๋ฐœ ํ”„๋กœ์„ธ์Šค๋ฅผ 10๋ฐฐ ๊ฐ€์†ํ™”ํ•˜๊ณ  ๋น„์šฉ์„ 3๋ฐฐ ์ ˆ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ AppMaster ์ˆ˜์ •๋œ ์š”๊ตฌ ์‚ฌํ•ญ์— ๋”ฐ๋ผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋‹ค์‹œ ์ƒ์„ฑํ•˜์—ฌ ๊ธฐ์ˆ  ๋ถ€์ฑ„ ๋ถ€๋‹ด์„ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ฐ˜ ๊ฐœ๋ฐœ์ž๋„ ์ด ๊ณ ๊ธ‰ ํ”Œ๋žซํผ์„ ํ™œ์šฉํ•˜์—ฌ ์„œ๋ฒ„ ๋ฐฑ์—”๋“œ, ์›น ์‚ฌ์ดํŠธ, ๊ณ ๊ฐ ํฌํ„ธ ๋ฐ ๊ธฐ๋ณธ ๋ชจ๋ฐ”์ผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ž๋ž‘ํ•˜๋Š” ํ™•์žฅ ๊ฐ€๋Šฅํ•˜๊ณ  ํฌ๊ด„์ ์ธ ์†Œํ”„ํŠธ์›จ์–ด ์†”๋ฃจ์…˜์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฒฐ๋ก ์ ์œผ๋กœ, Domain-Specific Languages๋Š” ๋งž์ถคํ˜• ์†”๋ฃจ์…˜์— ๋Œ€ํ•œ ์†Œํ”„ํŠธ์›จ์–ด ์—…๊ณ„์˜ ์š”๊ตฌ๋ฅผ ๋’ท๋ฐ›์นจํ•จ์œผ๋กœ์จ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํŒจ๋Ÿฌ๋‹ค์ž„์˜ ๊ธฐ์ˆ ์  ์ตœ์ „์„ ์—์„œ ์ž…์ง€๋ฅผ ํ™•๊ณ ํžˆ ํ–ˆ์Šต๋‹ˆ๋‹ค. AppMaster ์™€ ๊ฐ™์€ ์ตœ์‹  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ ํ”Œ๋žซํผ๊ณผ DSL์˜ ๊ฒฐํ•ฉ์€ ํšจ์œจ์„ฑ, ํ™•์žฅ์„ฑ ๋ฐ ๋น„์šฉ ํšจ์œจ์„ฑ ์ธก๋ฉด์—์„œ ๋น„๊ตํ•  ์ˆ˜ ์—†๋Š” ํŒจ๋Ÿฌ๋‹ค์ž„์„ ํ™•๋ฆฝํ–ˆ์Šต๋‹ˆ๋‹ค. DSL์„ ํšจ๊ณผ์ ์œผ๋กœ ํ†ตํ•ฉํ•จ์œผ๋กœ์จ ๊ฐœ๋ฐœ์ž๋Š” ์ด๋Ÿฌํ•œ ์–ธ์–ด์˜ ์ž ์žฌ๋ ฅ์„ ์ตœ๋Œ€ํ•œ ํ™œ์šฉํ•˜์—ฌ ์ตœ์ข… ์‚ฌ์šฉ์ž, ์ดํ•ด๊ด€๊ณ„์ž ๋ฐ ๊ธฐ์ˆ  ์ƒํƒœ๊ณ„ ์ „๋ฐ˜์— ๋” ๋‚˜์€ ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.