ETL ํ”„๋กœ์„ธ์Šค(์ถ”์ถœ, ๋ณ€ํ™˜, ๋กœ๋“œ)๋Š” ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ฐ ๋ฐ์ดํ„ฐ ํ†ตํ•ฉ์˜ ๋งฅ๋ฝ์—์„œ ์ค‘์š”ํ•œ ๊ตฌ์„ฑ ์š”์†Œ์ž…๋‹ˆ๋‹ค. ์ด ํ”„๋กœ์„ธ์Šค๋Š” ๊ฐœ๋ฐœ์ž์™€ ๋ฐ์ดํ„ฐ ๋ถ„์„๊ฐ€๊ฐ€ ๋‹ค์–‘ํ•œ ์†Œ์Šค์—์„œ ์ •๋ณด๋ฅผ ์ˆ˜์ง‘ํ•˜๊ณ  ์ฒ˜๋ฆฌํ•˜๋ฉฐ ์ถ”๊ฐ€ ๋ถ„์„ ๋ฐ ๋ณด๊ณ ๋ฅผ ์œ„ํ•ด ๊ตฌ์กฐํ™”๋˜๊ณ  ํ†ตํ•ฉ๋œ ๋ฐฉ์‹์œผ๋กœ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ์„ธ ๊ฐ€์ง€ ํ•„์ˆ˜ ๋‹จ๊ณ„๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค.

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

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

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

AppMaster ํ”Œ๋žซํผ์˜ ๋งฅ๋ฝ์—์„œ ETL ํ”„๋กœ์„ธ์Šค๋Š” ๊ณ ๊ฐ์ด ๋น ๋ฅด๊ณ  ์•ˆ์ •์ ์ด๋ฉฐ ๊ฐ•๋ ฅํ•œ ๋ฐ์ดํ„ฐ ํ†ตํ•ฉ โ€‹โ€‹์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ๋‹ฌ์„ฑํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ํ›จ์”ฌ ๋” ์ค‘์š”ํ•ด์ง‘๋‹ˆ๋‹ค. ETL ํ”„๋กœ์„ธ์Šค์˜ ๋งŽ์€ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ์ž๋™ํ™”ํ•จ์œผ๋กœ์จ ์‚ฌ์šฉ์ž๋Š” ๋น„์ฆˆ๋‹ˆ์Šค ๋…ผ๋ฆฌ ์ •์˜, ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค ๋””์ž์ธ ๋ฐ ๋ณต์žกํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ตฌ์กฐ ๊ตฌ์„ฑ์˜ ํ•„์ˆ˜ ์ธก๋ฉด์— ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

๋˜ํ•œ AppMaster ์˜ ์ž๋™ํ™”๋œ ๋ฌธ์„œ ์ƒ์„ฑ ๊ธฐ๋Šฅ์„ ํ†ตํ•ด ๊ฐœ๋ฐœ์ž๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ฐฑ์—”๋“œ ํ”„๋กœ์„ธ์Šค์— ๋Œ€ํ•œ ์ตœ์‹ ์˜ ํฌ๊ด„์ ์ธ ์ดํ•ด๋ฅผ ์œ ์ง€ํ•˜์—ฌ ํŒ€ ๊ฐ„์˜ ํ˜‘์—…์„ ์ง€์›ํ•˜๊ณ  ๊ฐœ๋ฐœ ์‹œ๊ฐ„์„ ๋‹จ์ถ•ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ”Œ๋žซํผ์€ ์„œ๋ฒ„ endpoints ๋ฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์Šคํ‚ค๋งˆ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ์Šคํฌ๋ฆฝํŠธ์— ๋Œ€ํ•œ Swagger(OpenAPI) ๋ฌธ์„œ๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฐ์ดํ„ฐ ํ†ตํ•ฉ โ€‹โ€‹์›Œํฌํ”Œ๋กœ์šฐ์˜ ๋ชจ๋“  ์ธก๋ฉด์— ๋Œ€ํ•œ ์ฒ ์ €ํ•œ ๊ฐœ์š”๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

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