์ปดํŒŒ์ผ ๊ตฌ์„ฑ

์ด ๋ฌธ์„œ์—์„œ๋Š” Dataform์—์„œ ๋‹ค์Œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

์‹œ์ž‘ํ•˜๊ธฐ ์ „์—

  1. Google Cloud ์ฝ˜์†”์—์„œ Dataform ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.

    Dataform์œผ๋กœ ์ด๋™

  2. ์ €์žฅ์†Œ๋ฅผ ์„ ํƒํ•˜๊ฑฐ๋‚˜ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

  3. ๊ฐœ๋ฐœ ์ž‘์—…๊ณต๊ฐ„์„ ์„ ํƒํ•˜๊ฑฐ๋‚˜ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

  4. ์„ ํƒ์‚ฌํ•ญ: ์ถœ์‹œ ๊ตฌ์„ฑ์—์„œ ๊ธฐ๋ณธ Google Cloud ํ”„๋กœ์ ํŠธ๋ฅผ ์žฌ์ •์˜ํ•˜๋ ค๋ฉด ์‚ฌ์šฉํ•˜๋ ค๋Š” ํ”„๋กœ์ ํŠธ์— ๋Œ€ํ•ด Dataform ์„œ๋น„์Šค ๊ณ„์ •์— ์•ก์„ธ์Šค ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•ฉ๋‹ˆ๋‹ค.

ํ•„์š”ํ•œ ์—ญํ• 

์ด ๋ฌธ์„œ์˜ ์ž‘์—…์„ ์™„๋ฃŒํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๊ถŒํ•œ์„ ์–ป์œผ๋ ค๋ฉด ๊ด€๋ฆฌ์ž์—๊ฒŒ ์ €์žฅ์†Œ์— ๋Œ€ํ•œ Dataform ๊ด€๋ฆฌ์ž (roles/dataform.admin) IAM ์—ญํ• ์„ ๋ถ€์—ฌํ•ด ๋‹ฌ๋ผ๊ณ  ์š”์ฒญํ•˜์„ธ์š”. ์—ญํ•  ๋ถ€์—ฌ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ํ”„๋กœ์ ํŠธ, ํด๋”, ์กฐ์ง์— ๋Œ€ํ•œ ์•ก์„ธ์Šค ๊ด€๋ฆฌ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

์ปค์Šคํ…€ ์—ญํ• ์ด๋‚˜ ๋‹ค๋ฅธ ์‚ฌ์ „ ์ •์˜๋œ ์—ญํ• ์„ ํ†ตํ•ด ํ•„์š”ํ•œ ๊ถŒํ•œ์„ ์–ป์„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

์—„๊ฒฉํ•œ act-as ๋ชจ๋“œ๊ฐ€ ์‚ฌ์šฉ ์„ค์ •๋œ ๊ฒฝ์šฐ Dataform ์ €์žฅ์†Œ์˜ ์ถœ์‹œ ๊ตฌ์„ฑ ์ถœ์‹œ ๋ฒ„์ „์„ ์—…๋ฐ์ดํŠธํ•˜๋ ค๋ฉด ์ด ์ถœ์‹œ ๊ตฌ์„ฑ์„ ์‚ฌ์šฉํ•˜๋Š” ์›Œํฌํ”Œ๋กœ ๊ตฌ์„ฑ์˜ ๋ชจ๋“  ์„œ๋น„์Šค ๊ณ„์ •์— iam.serviceAccounts.actAs ๊ถŒํ•œ์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ถŒํ•œ์€ ์„œ๋น„์Šค ๊ณ„์ • ์‚ฌ์šฉ์ž(roles/iam.serviceAccountUser) ์—ญํ• ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Dataform์˜ ์›Œํฌํ”Œ๋กœ ์ˆ˜๋ช… ์ฃผ๊ธฐ ์†Œ๊ฐœ

์ด ์„น์…˜์—์„œ๋Š” Dataform์˜ ์›Œํฌํ”Œ๋กœ ์ˆ˜๋ช… ์ฃผ๊ธฐ์™€ Dataform ๋‚ด์—์„œ ์ปดํŒŒ์ผ ๋ฐ ์‹คํ–‰์„ ๊ตฌ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

Dataform ์›Œํฌํ”Œ๋กœ ์ˆ˜๋ช… ์ฃผ๊ธฐ๋Š” ๋‹ค์Œ ๋‹จ๊ณ„๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค.

๊ฐœ๋ฐœ
Dataform ์ž‘์—…๊ณต๊ฐ„์—์„œ ์›Œํฌํ”Œ๋กœ๋ฅผ ๊ฐœ๋ฐœํ•ฉ๋‹ˆ๋‹ค.
์ปดํŒŒ์ผ

Dataform์€ ์ž‘์—…๊ณต๊ฐ„์˜ ์›Œํฌํ”Œ๋กœ ์ฝ”๋“œ๋ฅผ ์‹ค์‹œ๊ฐ„์œผ๋กœ SQL๋กœ ์ปดํŒŒ์ผํ•˜์—ฌ BigQuery์—์„œ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์ž‘์—…๊ณต๊ฐ„์˜ ์ปดํŒŒ์ผ ๊ฒฐ๊ณผ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค. Dataform์€ ์›Œํฌํ”Œ๋กœ ์„ค์ • ํŒŒ์ผ์— ์ •์˜๋œ ์„ค์ •์„ ์‚ฌ์šฉํ•˜์—ฌ ์ปดํŒŒ์ผ ๊ฒฐ๊ณผ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

Dataform ์ปดํŒŒ์ผ์€ ์ปดํŒŒ์ผ ์ผ๊ด€์„ฑ์„ ์œ„ํ•ด ๊ธฐ๋ณธ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค. ์ฆ‰, ๋™์ผํ•œ ์ฝ”๋“œ๊ฐ€ ๋งค๋ฒˆ ๋™์ผํ•œ SQL ์ปดํŒŒ์ผ ๊ฒฐ๊ณผ๋กœ ์ปดํŒŒ์ผ๋ฉ๋‹ˆ๋‹ค. Dataform์€ ์ธํ„ฐ๋„ท ์•ก์„ธ์Šค ์—†์ด ์ƒŒ๋“œ๋ฐ•์Šค ํ™˜๊ฒฝ์—์„œ ์ฝ”๋“œ๋ฅผ ์ปดํŒŒ์ผํ•ฉ๋‹ˆ๋‹ค. ์ปดํŒŒ์ผ ์ค‘์—๋Š” ์™ธ๋ถ€ API ํ˜ธ์ถœ๊ณผ ๊ฐ™์€ ์ถ”๊ฐ€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์‹คํ–‰

์›Œํฌํ”Œ๋กœ ํ˜ธ์ถœ์—์„œ Dataform์€ BigQuery์—์„œ ์ž‘์—…๊ณต๊ฐ„ ์ปดํŒŒ์ผ ๊ฒฐ๊ณผ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

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

Dataform ์ปดํŒŒ์ผ์„ ๊ตฌ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•

๊ธฐ๋ณธ์ ์œผ๋กœ Dataform์€ ์›Œํฌํ”Œ๋กœ ์„ค์ • ํŒŒ์ผ์˜ ์„ค์ •์„ ์‚ฌ์šฉํ•˜์—ฌ ์ปดํŒŒ์ผ ๊ฒฐ๊ณผ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ปดํŒŒ์ผ ์žฌ์ •์˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ธฐ๋ณธ ์„ค์ •์„ ์žฌ์ •์˜ํ•˜์—ฌ ๋งž์ถค ์ปดํŒŒ์ผ ๊ฒฐ๊ณผ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ๋งž์ถค ์ปดํŒŒ์ผ ๊ฒฐ๊ณผ์˜ ์‹คํ–‰์„ ์ˆ˜๋™์œผ๋กœ ํŠธ๋ฆฌ๊ฑฐํ•˜๊ฑฐ๋‚˜ ์‹คํ–‰์„ ์˜ˆ์•ฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Dataform์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ปดํŒŒ์ผ ๊ฒฐ๊ณผ ๊ตฌ์„ฑ ์˜ต์…˜์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

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

์ž‘์—…๊ณต๊ฐ„ ์ปดํŒŒ์ผ ์žฌ์ •์˜ ๊ตฌ์„ฑ

์ž‘์—…๊ณต๊ฐ„ ์ปดํŒŒ์ผ ์žฌ์ •์˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด Dataform ์ €์žฅ์†Œ์˜ ๋ชจ๋“  ์ž‘์—…๊ณต๊ฐ„์— ๋Œ€ํ•œ ์ปดํŒŒ์ผ ์žฌ์ •์˜๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ €์žฅ์†Œ๋งˆ๋‹ค ํ•˜๋‚˜์˜ ์ž‘์—…๊ณต๊ฐ„ ์ปดํŒŒ์ผ ์žฌ์ •์˜ ๊ตฌ์„ฑ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ž‘์—…๊ณต๊ฐ„ ์ปดํŒŒ์ผ ์žฌ์ •์˜๊ฐ€ ์žˆ๋Š” ์ €์žฅ์†Œ์—์„œ ์ž‘์—…๊ณต๊ฐ„์˜ ์‹คํ–‰์„ ์ˆ˜๋™์œผ๋กœ ํŠธ๋ฆฌ๊ฑฐํ•˜๋ฉด Dataform์ด ์ด๋Ÿฌํ•œ ์žฌ์ •์˜๋ฅผ ์ž‘์—…๊ณต๊ฐ„์˜ ์ปดํŒŒ์ผ ๊ฒฐ๊ณผ์— ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ ์ž‘์—…๊ณต๊ฐ„ ์ปดํŒŒ์ผ ์žฌ์ •์˜๋ฅผ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • Google Cloud Dataform์ด ์ž‘์—…๊ณต๊ฐ„์˜ ์ฝ˜ํ…์ธ ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ํ”„๋กœ์ ํŠธ
  • ํ…Œ์ด๋ธ” ํ”„๋ฆฌํ”ฝ์Šค
  • ์Šคํ‚ค๋งˆ ์„œํ”ฝ์Šค

์ž‘์—…๊ณต๊ฐ„ ์ปดํŒŒ์ผ ์žฌ์ •์˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ BigQuery์—์„œ ์ž‘์—…๊ณต๊ฐ„ ์ปดํŒŒ์ผ ๊ฒฐ๊ณผ๋ฅผ ๋™์  ์ปดํŒŒ์ผ ์žฌ์ •์˜๋กœ ๊ฒฉ๋ฆฌํ•˜๋ฉด ๊ฒฉ๋ฆฌ๋œ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋™์  ํ…Œ์ด๋ธ” ์ ‘๋‘์‚ฌ ๋ฐ ์Šคํ‚ค๋งˆ ์ ‘๋ฏธ์‚ฌ ์ปดํŒŒ์ผ ์žฌ์ •์˜์—๋Š” ${workspaceName} ๋ณ€์ˆ˜๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ž‘์—…๊ณต๊ฐ„์—์„œ ์‹คํ–‰์„ ํŠธ๋ฆฌ๊ฑฐํ•˜๋ฉด Dataform์ด ${workspaceName} ๋ณ€์ˆ˜๋ฅผ ํ˜„์žฌ ์ž‘์—…๊ณต๊ฐ„์˜ ์ด๋ฆ„์œผ๋กœ ๋ฐ”๊พธ์–ด ์ž‘์—…๊ณต๊ฐ„์˜ ๊ณ ์œ ํ•œ ์ปดํŒŒ์ผ ์žฌ์ •์˜๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

์ฐธ๊ณ ๋กœ, ์ž‘์—…๊ณต๊ฐ„ ์ปดํŒŒ์ผ ์žฌ์ •์˜๋กœ ์ƒ์„ฑ๋œ ์ปดํŒŒ์ผ ๊ฒฐ๊ณผ์˜ ์‹คํ–‰์€ ์˜ˆ์•ฝํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์ถœ์‹œ ๊ตฌ์„ฑ ๋งŒ๋“ค๊ธฐ

์ถœ์‹œ ๊ตฌ์„ฑ์„ ์‚ฌ์šฉํ•˜๋ฉด ์ €์žฅ์†Œ์˜ ์ปดํŒŒ์ผ ๊ฒฐ๊ณผ๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ ์„ค์ • ํ…œํ”Œ๋ฆฟ์„ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ถœ์‹œ ๊ตฌ์„ฑ์—์„œ๋Š” ์›Œํฌํ”Œ๋กœ ์„ค์ •, ์ปดํŒŒ์ผ ๋ณ€์ˆ˜, ์ „์ฒด ์ €์žฅ์†Œ์˜ ์ปดํŒŒ์ผ ๊ฒฐ๊ณผ ์ƒ์„ฑ์˜ ๋นˆ๋„์— ๋Œ€ํ•œ ์ปดํŒŒ์ผ ์žฌ์ •์˜๋ฅผ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ถœ์‹œ ๊ตฌ์„ฑ์—์„œ๋Š” ๋‹ค์Œ ์ปดํŒŒ์ผ ์žฌ์ •์˜๋ฅผ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • Google Cloud ํ”„๋กœ์ ํŠธ
  • ํ…Œ์ด๋ธ” ํ”„๋ฆฌํ”ฝ์Šค
  • ์Šคํ‚ค๋งˆ ์„œํ”ฝ์Šค
  • ์ปดํŒŒ์ผ ๋ณ€์ˆ˜์˜ ๊ฐ’

Dataform ์ €์žฅ์†Œ์—์„œ ๊ฐœ๋ฐœ ์ˆ˜๋ช… ์ฃผ๊ธฐ์˜ ๊ฐ ๋‹จ๊ณ„๋งˆ๋‹ค ํ•˜๋‚˜์”ฉ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ถœ์‹œ ๊ตฌ์„ฑ์„ ๋งŒ๋“ค์–ด ๊ฒฉ๋ฆฌ๋œ ์ €์žฅ์†Œ ์ปดํŒŒ์ผ ๊ฒฐ๊ณผ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ ๋‹ค์Œ ์›Œํฌํ”Œ๋กœ ๊ตฌ์„ฑ์„ ๋งŒ๋“ค์–ด ์„ ํƒํ•œ ์ถœ์‹œ ๊ตฌ์„ฑ์—์„œ ์ƒ์„ฑ๋œ ์ปดํŒŒ์ผ ๊ฒฐ๊ณผ์˜ ์‹คํ–‰์„ ์˜ˆ์•ฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์„ ํƒํ•œ ์ถœ์‹œ ๊ตฌ์„ฑ์—์„œ ์ปดํŒŒ์ผ ๊ฒฐ๊ณผ์˜ ์‹คํ–‰์„ ์ˆ˜๋™์œผ๋กœ ํŠธ๋ฆฌ๊ฑฐํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

Dataform API ์ปดํŒŒ์ผ ์žฌ์ •์˜๋กœ ๋‹จ์ผ ์ปดํŒŒ์ผ ๊ฒฐ๊ณผ ๊ตฌ์„ฑ

ํ„ฐ๋ฏธ๋„์—์„œ Dataform API ์š”์ฒญ์„ ์ „๋‹ฌํ•˜๋ฉด ๋‹จ์ผ ์ปดํŒŒ์ผ ๊ฒฐ๊ณผ์— ๋Œ€ํ•œ ์ปดํŒŒ์ผ ์žฌ์ •์˜๋ฅผ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

compilationResults.create ์š”์ฒญ์—์„œ Dataform ์ž‘์—…๊ณต๊ฐ„ ๋˜๋Š” ์ง€์ •๋œ Git comittish์˜ ๋‹จ์ผ ์ปดํŒŒ์ผ ๊ฒฐ๊ณผ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

compilationResults.create ์š”์ฒญ์˜ CodeCompilationConfig ๊ฐ์ฒด์—์„œ ์ปดํŒŒ์ผ ์š”์ฒญ์˜ ์ปดํŒŒ์ผ ์žฌ์ •์˜๋ฅผ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ Dataform API ์ปดํŒŒ์ผ ์žฌ์ •์˜๋ฅผ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • Google Cloud ํ”„๋กœ์ ํŠธ
  • ํ…Œ์ด๋ธ” ํ”„๋ฆฌํ”ฝ์Šค
  • ์Šคํ‚ค๋งˆ ์„œํ”ฝ์Šค
  • ์ปดํŒŒ์ผ ๋ณ€์ˆ˜์˜ ๊ฐ’

Dataform API ์ปดํŒŒ์ผ ์žฌ์ •์˜๋Š” ๋‹จ์ผ ์ปดํŒŒ์ผ ๊ฒฐ๊ณผ์™€ ๋‹จ์ผ ์‹คํ–‰์— ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ Dataform ์‹คํ–‰์„ ์˜ˆ์•ฝํ•˜๋Š” ๋ฐ๋Š” ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

workflowInvocations.create ์š”์ฒญ์—์„œ ์ปดํŒŒ์ผ ๊ฒฐ๊ณผ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Dataform ์‹คํ–‰์„ ๊ตฌ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•

Dataform์€ ์‹คํ–‰์„ ๊ตฌ์„ฑํ•˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์˜ต์…˜์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

์ž‘์—…๊ณต๊ฐ„์—์„œ ์ˆ˜๋™ ์‹คํ–‰
์ผ์ •์— ๊ด€๊ณ„์—†์ด Dataform ์ž‘์—…๊ณต๊ฐ„์—์„œ ์›Œํฌํ”Œ๋กœ ์ฆ‰์‹œ ์‹คํ–‰์„ ์ˆ˜๋™์œผ๋กœ ํŠธ๋ฆฌ๊ฑฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์›Œํฌํ”Œ๋กœ์—์„œ ์„ ํƒํ•œ ์ž‘์—…์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์›Œํฌํ”Œ๋กœ ๊ตฌ์„ฑ
์„ ํƒํ•œ ์ถœ์‹œ ๊ตฌ์„ฑ์—์„œ ์ƒ์„ฑ๋œ ์ปดํŒŒ์ผ ๊ฒฐ๊ณผ์˜ ์‹คํ–‰์„ ์˜ˆ์•ฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‹คํ–‰ํ•  ์›Œํฌํ”Œ๋กœ ์ž‘์—…์„ ์„ ํƒํ•˜์—ฌ ์‹คํ–‰ ๋นˆ๋„ ๋ฐ ์‹œ๊ฐ„๋Œ€๋ฅผ ์„ค์ •ํ•˜์„ธ์š”.

์ž‘์—…๊ณต๊ฐ„์—์„œ ์ฆ‰์‹œ ์‹คํ–‰ ํŠธ๋ฆฌ๊ฑฐ

Dataform ์ž‘์—…๊ณต๊ฐ„์—์„œ๋Š” ์ผ์ •๊ณผ ๊ด€๊ณ„์—†์ด ์ž‘์—…๊ณต๊ฐ„์—์„œ ์›Œํฌํ”Œ๋กœ์˜ ์ฆ‰์‹œ ์‹คํ–‰์„ ์ˆ˜๋™์œผ๋กœ ํŠธ๋ฆฌ๊ฑฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์›Œํฌ์ŠคํŽ˜์ด์Šค์—์„œ ์›Œํฌํ”Œ๋กœ์˜ ๋‹ค์Œ ์š”์†Œ๋ฅผ ์ˆ˜๋™์œผ๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ €์žฅ์†Œ์— ์ž‘์—…๊ณต๊ฐ„ ์ปดํŒŒ์ผ ์žฌ์ •์˜๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋Š” ๊ฒฝ์šฐ Dataform์ด ์ž‘์—…๊ณต๊ฐ„ ์ปดํŒŒ์ผ ๊ฒฐ๊ณผ์— ์ ์šฉํ•  ์ปดํŒŒ์ผ ์žฌ์ •์˜๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์›Œํฌํ”Œ๋กœ ๊ตฌ์„ฑ ๋งŒ๋“ค๊ธฐ

์›Œํฌํ”Œ๋กœ ๊ตฌ์„ฑ์„ ์‚ฌ์šฉํ•˜๋ฉด ์„ ํƒํ•œ ์ถœ์‹œ ๊ตฌ์„ฑ์˜ ์ปดํŒŒ์ผ ๊ฒฐ๊ณผ์˜ ์‹คํ–‰์„ ์˜ˆ์•ฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Dataform ์ €์žฅ์†Œ์—์„œ ์—ฌ๋Ÿฌ ์›Œํฌํ”Œ๋กœ ๊ตฌ์„ฑ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์›Œํฌํ”Œ๋กœ ๊ตฌ์„ฑ์—์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์‹คํ–‰ ์„ค์ •์„ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์ ์šฉ๋œ ์ปดํŒŒ์ผ ์ถœ์‹œ ๊ตฌ์„ฑ์ž…๋‹ˆ๋‹ค.
  • ์‹คํ–‰ํ•  ์›Œํฌํ”Œ๋กœ ์ž‘์—…์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
  • ์‹คํ–‰์˜ ์ผ์ • ๋ฐ ์‹œ๊ฐ„๋Œ€์ž…๋‹ˆ๋‹ค.

๋‹ค์Œ ์›Œํฌํ”Œ๋กœ ์ž‘์—…์„ ์‹คํ–‰ํ•˜๋„๋ก ์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๋ชจ๋“  ์ž‘์—…
  • ์„ ํƒํ•œ ์ž‘์—…
  • ์„ ํƒํ•œ ํƒœ๊ทธ๊ฐ€ ์žˆ๋Š” ์ž‘์—…

๊ทธ๋Ÿฐ ๋‹ค์Œ ์›Œํฌํ”Œ๋กœ ๊ตฌ์„ฑ์˜ ์˜ˆ์•ฝ๋œ ์‹คํ–‰ ์ค‘์— Dataform์ด ์ ์šฉ๋œ ์ปดํŒŒ์ผ ๊ฒฐ๊ณผ์—์„œ ์„ ํƒํ•œ ์ž‘์—…์„ BigQuery์— ๋ฐฐํฌํ•ฉ๋‹ˆ๋‹ค.

Dataform ์ถœ์‹œ ๊ตฌ์„ฑ ๋ฐ ์›Œํฌํ”Œ๋กœ ๊ตฌ์„ฑ์„ ์‚ฌ์šฉํ•˜๋ฉด ์ถ”๊ฐ€ ์„œ๋น„์Šค์— ์˜์กดํ•˜์ง€ ์•Š๊ณ ๋„ Dataform์—์„œ ์ปดํŒŒ์ผ์„ ๊ตฌ์„ฑํ•˜๊ณ  ์‹คํ–‰์„ ์˜ˆ์•ฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ˆ˜๋ช… ์ฃผ๊ธฐ ๋ฆฌ์†Œ์Šค ๋งŒ๋ฃŒ

Dataform์€ ํŠน์ • ๊ธฐ๊ฐ„ ๋™์•ˆ ์ปดํŒŒ์ผ ๊ฒฐ๊ณผ์™€ ์›Œํฌํ”Œ๋กœ ํ˜ธ์ถœ์„ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

์›Œํฌํ”Œ๋กœ ํ˜ธ์ถœ ๋งŒ๋ฃŒ

์›Œํฌํ”Œ๋กœ ํ˜ธ์ถœ์€ 90์ผ์ด ๊ฒฝ๊ณผํ•˜๊ฑฐ๋‚˜ ์ˆ˜๋™์œผ๋กœ ์‚ญ์ œํ•˜๋ฉด ๋งŒ๋ฃŒ๋ฉ๋‹ˆ๋‹ค.

์›Œํฌํ”Œ๋กœ ๊ตฌ์„ฑ์—์„œ ๊ตฌ์„ฑ์— ์˜ํ•ด ์ƒ์„ฑ๋œ ์ตœ๊ทผ ์›Œํฌํ”Œ๋กœ ํ˜ธ์ถœ ๋ชฉ๋ก์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์›Œํฌํ”Œ๋กœ ๊ตฌ์„ฑ์œผ๋กœ ์ƒ์„ฑ๋œ ์›Œํฌํ”Œ๋กœ ํ˜ธ์ถœ์ด ๋งŒ๋ฃŒ๋˜๋ฉด Dataform์€ ์ตœ๊ทผ ํ˜ธ์ถœ ๋ชฉ๋ก์—์„œ ํ•ด๋‹น ์›Œํฌํ”Œ๋กœ ํ˜ธ์ถœ์„ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.

์ปดํŒŒ์ผ ๊ฒฐ๊ณผ ๋งŒ๋ฃŒ

์ปดํŒŒ์ผ ๊ฒฐ๊ณผ ๋งŒ๋ฃŒ๋Š” ๊ฐœ๋ฐœ ์ž‘์—…๊ณต๊ฐ„, ์ถœ์‹œ ๊ตฌ์„ฑ, ์›Œํฌํ”Œ๋กœ ํ˜ธ์ถœ ๋“ฑ ์ƒ์„ฑ ๋ฐฉ๋ฒ•์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง‘๋‹ˆ๋‹ค.

Dataform ์ž‘์—…๊ณต๊ฐ„์—์„œ ์›Œํฌํ”Œ๋กœ๋ฅผ ๊ฐœ๋ฐœํ•˜๋ฉด Dataform์ด ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ฝ”๋“œ๋ฅผ ์ปดํŒŒ์ผ ๊ฒฐ๊ณผ๋กœ ์ปดํŒŒ์ผํ•˜์—ฌ ์ฟผ๋ฆฌ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ์ƒ์„ฑ๋œ ์ปดํŒŒ์ผ ๊ฒฐ๊ณผ๋Š” 24์‹œ๊ฐ„ ํ›„์— ๋งŒ๋ฃŒ๋ฉ๋‹ˆ๋‹ค.

์ถœ์‹œ ๊ตฌ์„ฑ์—์„œ ์ตœ์‹  ์ปดํŒŒ์ผ ๊ฒฐ๊ณผ๋Š” ๋ผ์ด๋ธŒ ์ปดํŒŒ์ผ ๊ฒฐ๊ณผ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. ์ƒˆ ์ปดํŒŒ์ผ ๊ฒฐ๊ณผ๊ฐ€ ํ˜„์žฌ ๋ผ์ด๋ธŒ ์ปดํŒŒ์ผ ๊ฒฐ๊ณผ๋ฅผ ๋Œ€์ฒดํ•ฉ๋‹ˆ๋‹ค. Dataform์€ ์ƒˆ ์ปดํŒŒ์ผ ๊ฒฐ๊ณผ๋กœ ๋Œ€์ฒด๋  ๋•Œ๊นŒ์ง€ ๋ผ์ด๋ธŒ ์ปดํŒŒ์ผ ๊ฒฐ๊ณผ๋ฅผ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค. ๋ฐ”๋€ ์ปดํŒŒ์ผ ๊ฒฐ๊ณผ๋Š” ์ตœ๋Œ€ 24์‹œ๊ฐ„ ํ›„์— ๋งŒ๋ฃŒ๋ฉ๋‹ˆ๋‹ค.

Dataform์€ ์ถœ์‹œ ๊ตฌ์„ฑ์˜ ์„ธ๋ถ€์ •๋ณด ํŽ˜์ด์ง€์— ์žˆ๋Š” ์ด์ „ ์ปดํŒŒ์ผ ๊ฒฐ๊ณผ ๋ชฉ๋ก์—์„œ ๋งŒ๋ฃŒ๋œ ์ปดํŒŒ์ผ ๊ฒฐ๊ณผ๋ฅผ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.

Dataform์€ ์›Œํฌํ”Œ๋กœ ํ˜ธ์ถœ์ด ๋งŒ๋ฃŒ๋˜๊ฑฐ๋‚˜ ์‚ญ์ œ๋œ ํ›„ ์ตœ๋Œ€ 24์‹œ๊ฐ„ ๋™์•ˆ ์›Œํฌํ”Œ๋กœ ํ˜ธ์ถœ ์ „์ฒด ๊ธฐ๊ฐ„ ๋™์•ˆ ์›Œํฌํ”Œ๋กœ ํ˜ธ์ถœ๋กœ ์ƒ์„ฑ๋œ ์ปดํŒŒ์ผ ๊ฒฐ๊ณผ๋ฅผ ๋ณด๊ด€ํ•ฉ๋‹ˆ๋‹ค.

์ž‘์—…๊ณต๊ฐ„ ์ปดํŒŒ์ผ ์žฌ์ •์˜ ๋งŒ๋“ค๊ธฐ

๋‹ค์Œ ์„น์…˜์—์„œ๋Š” BigQuery์˜ Dataform ์ž‘์—…๊ณต๊ฐ„์—์„œ ๋งŒ๋“ค์–ด์ง„ ํ…Œ์ด๋ธ”๊ณผ ๋ทฐ๋ฅผ ๊ฒฉ๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์ž‘์—…๊ณต๊ฐ„ ์ปดํŒŒ์ผ ์žฌ์ •์˜๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. ์ž‘์—…๊ณต๊ฐ„ ์ปดํŒŒ์ผ ์žฌ์ •์˜ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฒฉ๋ฆฌ๋œ Dataform ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Dataform ์ž‘์—…๊ณต๊ฐ„์—์„œ ์›Œํฌํ”Œ๋กœ ์ฝ”๋“œ๋ฅผ ๊ฐœ๋ฐœํ•˜๋ฉด Dataform์ด ์ž‘์—…๊ณต๊ฐ„์˜ ์ฝ”๋“œ๋ฅผ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ปดํŒŒ์ผํ•˜์—ฌ ์ž‘์—…๊ณต๊ฐ„์˜ ์ปดํŒŒ์ผ ๊ฒฐ๊ณผ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค. Dataform์€ ์›Œํฌํ”Œ๋กœ ์„ค์ • ํŒŒ์ผ์— ์ •์˜๋œ ์„ค์ •์„ ์‚ฌ์šฉํ•˜์—ฌ ์ž‘์—…๊ณต๊ฐ„ ์ปดํŒŒ์ผ ๊ฒฐ๊ณผ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ์ž‘์—…๊ณต๊ฐ„์—์„œ ์‹คํ–‰์„ ํŠธ๋ฆฌ๊ฑฐํ•˜๋ฉด Dataform์ด BigQuery์—์„œ ์ž‘์—…๊ณต๊ฐ„ ์ปดํŒŒ์ผ ๊ฒฐ๊ณผ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

์ €์žฅ์†Œ์˜ ๋ชจ๋“  ์ž‘์—…๊ณต๊ฐ„์— ๋Œ€ํ•ด ์›Œํฌํ”Œ๋กœ ์„ค์ •์—์„œ ์„ค์ •๋œ ๊ธฐ๋ณธ ์„ค์ •์„ ์žฌ์ •์˜ํ•˜๋ ค๋ฉด ์ž‘์—…๊ณต๊ฐ„ ์ปดํŒŒ์ผ ์žฌ์ •์˜๋ฅผ ๋งŒ๋“ค๋ฉด ๋ฉ๋‹ˆ๋‹ค.

์ž‘์—…๊ณต๊ฐ„ ์ปดํŒŒ์ผ ์žฌ์ •์˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ €์žฅ์†Œ์˜ ๋ชจ๋“  ์ž‘์—…๊ณต๊ฐ„์— ๋Œ€ํ•ด ๋‹ค์Œ ์„ค์ •์„ ์žฌ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ”„๋กœ์ ํŠธ
Dataform์ด ์ž‘์—…๊ณต๊ฐ„ ์ปดํŒŒ์ผ ๊ฒฐ๊ณผ๋ฅผ ์‹คํ–‰ํ•˜๋Š” Google Cloud ํ”„๋กœ์ ํŠธ๋กœ, workflow_settings.yaml์— defaultProject๋กœ ์„ค์ •๋˜๊ฑฐ๋‚˜ dataform.json์— defaultDatabase๋กœ ์„ค์ •๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
ํ…Œ์ด๋ธ” ํ”„๋ฆฌํ”ฝ์Šค
์ €์žฅ์†Œ์˜ ๋ชจ๋“  ์ž‘์—…๊ณต๊ฐ„์˜ ๋ชจ๋“  ํ…Œ์ด๋ธ” ์ด๋ฆ„์— ์ถ”๊ฐ€๋œ ๋งž์ถค ์ ‘๋‘์‚ฌ
์Šคํ‚ค๋งˆ ์„œํ”ฝ์Šค
ํ…Œ์ด๋ธ”์˜ ์Šคํ‚ค๋งˆ์— ์ถ”๊ฐ€๋œ ๋งž์ถค ์„œํ”ฝ์Šค์ž…๋‹ˆ๋‹ค. workflow_settings.yaml์— defaultDataset, dataform.json์— defaultSchema๋กœ ์„ค์ •๋˜๊ฑฐ๋‚˜, ํ…Œ์ด๋ธ” config ๋ธ”๋ก์˜ schema ๋งค๊ฐœ๋ณ€์ˆ˜์— ์ •์˜๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฒฉ๋ฆฌ๋œ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์„ ๋งŒ๋“ค๋ ค๋ฉด ๊ณ ์œ ํ•œ ์ปดํŒŒ์ผ ์žฌ์ •์˜๋กœ ์ž‘์—…๊ณต๊ฐ„์„ ๊ฒฉ๋ฆฌํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ${workspaceName} ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ…Œ์ด๋ธ” ์ ‘๋‘์‚ฌ ๋ฐ ์Šคํ‚ค๋งˆ ์ ‘๋ฏธ์‚ฌ ์ปดํŒŒ์ผ ์žฌ์ •์˜๋ฅผ ๋™์ ์œผ๋กœ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ž‘์—…๊ณต๊ฐ„์—์„œ ์ˆ˜๋™์œผ๋กœ ์‹คํ–‰์„ ํŠธ๋ฆฌ๊ฑฐํ•˜๋ฉด ${workspaceName} ๋ณ€์ˆ˜๊ฐ€ ์ž‘์—…๊ณต๊ฐ„ ์ปดํŒŒ์ผ ์žฌ์ •์˜์— ์ž‘์—…๊ณต๊ฐ„ ์ด๋ฆ„์„ ์‚ฝ์ž…ํ•ฉ๋‹ˆ๋‹ค.

${workspaceName}์„ ํ…Œ์ด๋ธ” ํ”„๋ฆฌํ”ฝ์Šค๋กœ ์„ค์ •ํ•˜๋ฉด Dataform์ด ์ž‘์—…๊ณต๊ฐ„์˜ ๋ชจ๋“  ํ…Œ์ด๋ธ” ์ด๋ฆ„์— ์ž‘์—…๊ณต๊ฐ„์˜ ์ด๋ฆ„์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ์‹คํ–‰ ํ›„ BigQuery์—์„œ ํ…Œ์ด๋ธ”์ด ์‹œ์ž‘๋œ ์ž‘์—…๊ณต๊ฐ„์„ ์‹๋ณ„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

${workspaceName}์„ ์Šคํ‚ค๋งˆ ์„œํ”ฝ์Šค๋กœ ์„ค์ •ํ•˜๋ฉด Dataform์ด ์ž‘์—…๊ณต๊ฐ„์˜ ์ด๋ฆ„์„ defaultSchema์— ์ถ”๊ฐ€ํ•˜์—ฌ ์ž‘์—…๊ณต๊ฐ„ ์ „์šฉ ์ปค์Šคํ…€ ์Šคํ‚ค๋งˆ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ์‹คํ–‰ ํ›„ BigQuery์—์„œ ์ „์šฉ ์Šคํ‚ค๋งˆ์˜ ํŠน์ • ์ž‘์—…๊ณต๊ฐ„์—์„œ ์‹คํ–‰๋œ ๋ชจ๋“  ํ…Œ์ด๋ธ”์„ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋™์  ์ž‘์—…๊ณต๊ฐ„ ์ปดํŒŒ์ผ ์žฌ์ •์˜์˜ ์˜ˆ

๋‹ค์Œ ์˜ˆ์‹œ์—์„œ๋Š” ์ €์žฅ์†Œ์—์„œ ์ž‘์—…ํ•˜๋Š” ๊ฐœ๋ฐœ์ž์˜ ์ด๋ฆ„์„ ๋”ฐ์„œ ๋ช…๋ช…๋œ ์ž‘์—…๊ณต๊ฐ„(Sasha ๋ฐ Kai)์„ ํฌํ•จํ•˜๋Š” ์ €์žฅ์†Œ์— ์ ์šฉ๋œ ๋™์  ์ž‘์—…๊ณต๊ฐ„ ์ปดํŒŒ์ผ ์žฌ์ •์˜๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

์ด ์˜ˆ์‹œ์—์„œ ์ž‘์—…๊ณต๊ฐ„ ์ปดํŒŒ์ผ ์žฌ์ •์˜์˜ ๋ชฉํ‘œ๋Š” Sasha์™€ Kai์˜ ๊ฒฉ๋ฆฌ๋œ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‹ค์Œ ๊ธฐ๋ณธ ์„ค์ •์ด workflow_settings.yaml์— ์„ค์ •๋ฉ๋‹ˆ๋‹ค.

  • defaultProject: analytics
  • defaultDataset: dataform

๋‹ค์Œ ์ž‘์—…๊ณต๊ฐ„ ์ปดํŒŒ์ผ ์žฌ์ •์˜๋Š” ์ €์žฅ์†Œ์˜ ๊ฐ ์ž‘์—…๊ณต๊ฐ„์— ๋™์  ํ…Œ์ด๋ธ” ํ”„๋ฆฌํ”ฝ์Šค์™€ ์Šคํ‚ค๋งˆ ์„œํ”ฝ์Šค๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

  • Google Cloud ํ”„๋กœ์ ํŠธ ID: analytics_dev
  • ํ…Œ์ด๋ธ” ํ”„๋ฆฌํ”ฝ์Šค: ${workspaceName}
  • ์Šคํ‚ค๋งˆ ์„œํ”ฝ์Šค: ${workspaceName}

์‚ฌ์ƒค๊ฐ€ Sasha ์ž‘์—…๊ณต๊ฐ„์—์„œ ์ˆ˜๋™์œผ๋กœ ์‹คํ–‰์„ ํŠธ๋ฆฌ๊ฑฐํ•˜๋ฉด Dataform์€ ๋‹ค์Œ ์„ค์ •์œผ๋กœ ์ฝ˜ํ…์ธ ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

  • Google Cloud project: analytics_dev
  • ์Šคํ‚ค๋งˆ: dataform_sasha
  • ํ…Œ์ด๋ธ” ์ด๋ฆ„: sasha_name(์˜ˆ: sasha_orders)

์นด์ด๊ฐ€ Kai ์ž‘์—…๊ณต๊ฐ„์—์„œ ์ˆ˜๋™์œผ๋กœ ์‹คํ–‰์„ ํŠธ๋ฆฌ๊ฑฐํ•˜๋ฉด Dataform์€ ๋‹ค์Œ ์„ค์ •์œผ๋กœ ์ฝ˜ํ…์ธ ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

  • Google Cloud project: analytics_dev
  • ์Šคํ‚ค๋งˆ: dataform_kai
  • ํ…Œ์ด๋ธ” ์ด๋ฆ„: kai_name(์˜ˆ: kai_orders)

์ž‘์—…๊ณต๊ฐ„ ์ปดํŒŒ์ผ ์žฌ์ •์˜ ๋งŒ๋“ค๊ธฐ

Dataform ์ž‘์—…๊ณต๊ฐ„ ์ปดํŒŒ์ผ ์žฌ์ •์˜๋ฅผ ๋งŒ๋“ค๋ ค๋ฉด ๋‹ค์Œ ๋‹จ๊ณ„๋ฅผ ๋”ฐ๋ฅด์„ธ์š”.

  1. ์ €์žฅ์†Œ์—์„œ ์„ค์ •์œผ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.
  2. ์ˆ˜์ •์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
  3. ์ž‘์—…๊ณต๊ฐ„ ์ปดํŒŒ์ผ ์žฌ์ •์˜ ์ฐฝ์˜ Google Cloud ํ”„๋กœ์ ํŠธ ID ํ•„๋“œ์— ํ”„๋กœ์ ํŠธ ID๋ฅผ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.
  4. ํ…Œ์ด๋ธ” ์ ‘๋‘์‚ฌ ํ•„๋“œ์— ๋ชจ๋“  ํ…Œ์ด๋ธ” ์ด๋ฆ„์˜ ์ ‘๋‘์‚ฌ๋ฅผ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.
    1. (์„ ํƒ์‚ฌํ•ญ) ๊ฐ ์ž‘์—…๊ณต๊ฐ„์— ๊ณ ์œ ํ•œ ๋™์  ํ…Œ์ด๋ธ” ํ”„๋ฆฌํ”ฝ์Šค๋ฅผ ๋งŒ๋“ค๋ ค๋ฉด ํ…Œ์ด๋ธ” ํ”„๋ฆฌํ”ฝ์Šค๋กœ ${workspaceName}์„ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.
  5. ์Šคํ‚ค๋งˆ ์„œํ”ฝ์Šค ํ•„๋“œ์—์„œ ์ƒ์„ฑ๋œ ํ…Œ์ด๋ธ” ๋˜๋Š” ๋ทฐ์˜ ์Šคํ‚ค๋งˆ์— ์ถ”๊ฐ€ํ•  ์„œํ”ฝ์Šค๋ฅผ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.
    1. ์„ ํƒ์‚ฌํ•ญ: ๊ฐ ์ž‘์—…๊ณต๊ฐ„์— ๊ณ ์œ ํ•œ ๋™์  ์Šคํ‚ค๋งˆ ์„œํ”ฝ์Šค๋ฅผ ๋งŒ๋“ค๋ ค๋ฉด ํ…Œ์ด๋ธ” ์„œํ”ฝ์Šค๋กœ ${workspaceName}์„ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.
  6. ์ €์žฅ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

Dataform์ด ์ €์žฅ์†Œ์˜ ๋ชจ๋“  ์ž‘์—…๊ณต๊ฐ„์— ์ž‘์—…๊ณต๊ฐ„ ์ปดํŒŒ์ผ ์žฌ์ •์˜๋ฅผ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.

์ž‘์—…๊ณต๊ฐ„ ์ปดํŒŒ์ผ ์žฌ์ •์˜ ์ˆ˜์ •

Dataform ์ž‘์—…๊ณต๊ฐ„ ์ปดํŒŒ์ผ ์žฌ์ •์˜๋ฅผ ์ˆ˜์ •ํ•˜๋ ค๋ฉด ๋‹ค์Œ ๋‹จ๊ณ„๋ฅผ ๋”ฐ๋ฅด์„ธ์š”.

  1. ์ €์žฅ์†Œ์—์„œ ์„ค์ •์œผ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.
  2. ์ˆ˜์ •์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
  3. ์ž‘์—…๊ณต๊ฐ„ ์ปดํŒŒ์ผ ์žฌ์ •์˜๋ฅผ ์ˆ˜์ •ํ•œ ํ›„ ์ €์žฅ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

์ž‘์—…๊ณต๊ฐ„ ์ปดํŒŒ์ผ ์žฌ์ •์˜ ์‚ญ์ œ

Dataform ์ž‘์—…๊ณต๊ฐ„ ์ปดํŒŒ์ผ ์žฌ์ •์˜๋ฅผ ์‚ญ์ œํ•˜๋ ค๋ฉด ๋‹ค์Œ ๋‹จ๊ณ„๋ฅผ ๋”ฐ๋ฅด์„ธ์š”.

  1. ์ €์žฅ์†Œ์—์„œ ์„ค์ •์œผ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.
  2. ์ˆ˜์ •์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
  3. ์ž‘์—…๊ณต๊ฐ„ ์ปดํŒŒ์ผ ์žฌ์ •์˜ ์ฐฝ์—์„œ ๋ชจ๋‘ ์ง€์šฐ๊ธฐ๋ฅผ ํด๋ฆญํ•œ ๋‹ค์Œ ์ €์žฅ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

Dataform API๋กœ ์ปดํŒŒ์ผ ์žฌ์ •์˜ ๊ตฌ์„ฑ

์ด ์„น์…˜์—์„œ๋Š” Dataform API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ปดํŒŒ์ผ ์žฌ์ •์˜๋กœ ์ปดํŒŒ์ผ ๊ฒฐ๊ณผ๋ฅผ ๋งŒ๋“ค๊ณ  ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

Dataform API ์ปดํŒŒ์ผ ์žฌ์ •์˜ ์ •๋ณด

์›Œํฌํ”Œ๋กœ๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด Dataform์€ ์ฝ”๋“œ๋ฅผ SQL๋กœ ์ปดํŒŒ์ผํ•˜์—ฌ ์ปดํŒŒ์ผ ๊ฒฐ๊ณผ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ์›Œํฌํ”Œ๋กœ ํ˜ธ์ถœ ์ค‘์— Dataform์ด BigQuery์—์„œ ์ปดํŒŒ์ผ ๊ฒฐ๊ณผ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ๋ณธ์ ์œผ๋กœ Dataform์€ ์›Œํฌํ”Œ๋กœ ์„ค์ • ํŒŒ์ผ์˜ ์„ค์ •์„ ์‚ฌ์šฉํ•˜์—ฌ ์ปดํŒŒ์ผ ๊ฒฐ๊ณผ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ ์ˆ˜๋ช… ์ฃผ๊ธฐ์˜ ์—ฌ๋Ÿฌ ๋‹จ๊ณ„์—์„œ ๋ฐ์ดํ„ฐ ์‹คํ–‰์„ ๊ฒฉ๋ฆฌํ•˜๋ ค๋ฉด ์ปดํŒŒ์ผ ์žฌ์ •์˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ธฐ๋ณธ ์„ค์ •์„ ์žฌ์ •์˜ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

ํ„ฐ๋ฏธ๋„์—์„œ Dataform API ์š”์ฒญ์„ ์ „๋‹ฌํ•˜๋ฉด ์ปดํŒŒ์ผ ์žฌ์ •์˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‹จ์ผ ์ปดํŒŒ์ผ ๊ฒฐ๊ณผ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž‘์—…๊ณต๊ฐ„ ๋˜๋Š” ์„ ํƒํ•œ Git committish์˜ ์ปดํŒŒ์ผ ๊ฒฐ๊ณผ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ปดํŒŒ์ผ ์žฌ์ •์˜๋กœ ์ปดํŒŒ์ผ ๊ฒฐ๊ณผ๋ฅผ ๋งŒ๋“ค๋ ค๋ฉด Dataform API compilationResults.create ์š”์ฒญ์„ ๋ณด๋‚ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์š”์ฒญ์—์„œ Dataform์ด ์ปดํŒŒ์ผ ๊ฒฐ๊ณผ๋กœ ์ปดํŒŒ์ผ๋˜๋ ค๋ฉด ์ž‘์—…๊ณต๊ฐ„ ๋˜๋Š” Git commitish๋ฅผ ์†Œ์Šค๋กœ ์ง€์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. compilationResults.create ์š”์ฒญ์˜ CodeCompilationConfig ๊ฐ์ฒด์—์„œ ์ปดํŒŒ์ผ ์žฌ์ •์˜๋ฅผ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ ๋‹ค์Œ Dataform API workflowInvocations.create ์š”์ฒญ์—์„œ ์ƒ์„ฑ๋œ ์ปดํŒŒ์ผ ๊ฒฐ๊ณผ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

Dataform API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค์Œ ์ปดํŒŒ์ผ ์žฌ์ •์˜๋ฅผ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Google Cloud project
Dataform์ด ์ปดํŒŒ์ผ ๊ฒฐ๊ณผ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ํ”„๋กœ์ ํŠธ๋กœ, workflow_settings.yaml ํŒŒ์ผ์— defaultProject ์†์„ฑ์œผ๋กœ ์„ค์ •๋˜๊ฑฐ๋‚˜ dataform.json ํŒŒ์ผ์— defaultDatabase ์†์„ฑ์œผ๋กœ ์„ค์ •๋ฉ๋‹ˆ๋‹ค.
ํ…Œ์ด๋ธ” ํ”„๋ฆฌํ”ฝ์Šค
์ปดํŒŒ์ผ ๊ฒฐ๊ณผ์˜ ๋ชจ๋“  ํ…Œ์ด๋ธ” ์ด๋ฆ„์— ์ถ”๊ฐ€๋œ ๋งž์ถค ์ ‘๋‘์‚ฌ์ž…๋‹ˆ๋‹ค.
์Šคํ‚ค๋งˆ ์„œํ”ฝ์Šค
workflow_settings.yaml ํŒŒ์ผ์˜ defaultDataset ์†์„ฑ, dataform.json ํŒŒ์ผ์˜ defaultSchema ์†์„ฑ ๋˜๋Š” ํ…Œ์ด๋ธ”์˜ config ๋ธ”๋ก์— ์žˆ๋Š” schema ๋งค๊ฐœ๋ณ€์ˆ˜์— ์ •์˜๋œ ํ…Œ์ด๋ธ”์˜ ์Šคํ‚ค๋งˆ์— ์ถ”๊ฐ€๋˜๋Š” ๋งž์ถค ์ ‘๋ฏธ์‚ฌ์ž…๋‹ˆ๋‹ค.
์ปดํŒŒ์ผ ๋ณ€์ˆ˜์˜ ๊ฐ’
์ปดํŒŒ์ผ ๊ฒฐ๊ณผ์— ์‚ฌ์šฉ๋˜๋Š” ์ปดํŒŒ์ผ ๋ณ€์ˆ˜์˜ ๊ฐ’์ž…๋‹ˆ๋‹ค. ์ปดํŒŒ์ผ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์กฐ๊ฑด๋ถ€๋กœ ํ…Œ์ด๋ธ”์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•˜๋‚˜์˜ ์ปดํŒŒ์ผ ๊ฒฐ๊ณผ์—๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” Dataform API ์ปดํŒŒ์ผ ์žฌ์ •์˜์— ๋Œ€ํ•œ ๋Œ€์•ˆ์œผ๋กœ Google Cloud ์ฝ˜์†”์—์„œ ์ž‘์—…๊ณต๊ฐ„ ์ปดํŒŒ์ผ ์žฌ์ •์˜๋ฅผ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Dataform์—์„œ ์ปดํŒŒ์ผ ์žฌ์ •์˜๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๋ ค๋ฉด Dataform์˜ ์›Œํฌํ”Œ๋กœ ์ˆ˜๋ช… ์ฃผ๊ธฐ ์†Œ๊ฐœ๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”.

์ปดํŒŒ์ผ ๊ฒฐ๊ณผ ์†Œ์Šค ์„ค์ •

Dataform API compilationResults.create ์š”์ฒญ์„ ์ „์†กํ•˜๋ ค๋ฉด ์ปดํŒŒ์ผ ๊ฒฐ๊ณผ์˜ ์†Œ์Šค๋ฅผ ์ง€์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

compilationResults.create ์š”์ฒญ์—์„œ Dataform ์ž‘์—…๊ณต๊ฐ„ ๋˜๋Š” Git ๋ธŒ๋žœ์น˜, Git ํƒœ๊ทธ ๋˜๋Š” Git ์ปค๋ฐ‹ SHA๋ฅผ ์†Œ์Šค๋กœ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ž‘์—…๊ณต๊ฐ„์„ ์ปดํŒŒ์ผ ๊ฒฐ๊ณผ ์†Œ์Šค๋กœ ์„ค์ •

  • compilationResults.create ์š”์ฒญ์—์„œ workspace ์†์„ฑ์„ ๋‹ค์Œ ํ˜•์‹์˜ ์„ ํƒ๋œ Dataform ์ž‘์—…๊ณต๊ฐ„ ๊ฒฝ๋กœ๋กœ ์ฑ„์›๋‹ˆ๋‹ค.

    {
    "workspace": "projects/PROJECT_NAME/locations/LOCATION/repositories/REPOSITORY_NAME/workspaces/WORKSPACE_NAME"
    }
    

    ๋‹ค์Œ์„ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

    • PROJECT_NAME: Google Cloud ํ”„๋กœ์ ํŠธ์˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.
    • LOCATION: ์›Œํฌํ”Œ๋กœ ์„ค์ •์— ์„ค์ •๋œ Dataform ์ €์žฅ์†Œ์˜ ์œ„์น˜
    • REPOSITORY_NAME: Dataform ์ €์žฅ์†Œ์˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.
    • WORKSPACE_NAME: Dataform ์›Œํฌ์ŠคํŽ˜์ด์Šค์˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.

๋‹ค์Œ ์ฝ”๋“œ ์ƒ˜ํ”Œ์€ "sales-test"๋ผ๋Š” ์ž‘์—…๊ณต๊ฐ„์— ์„ค์ •๋œ compilationResults.create ์š”์ฒญ์˜ workspace ์†์„ฑ์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

{
"workspace": "projects/analytics/locations/europe-west4/repositories/sales/workspaces/sales-test"
}

Git commitish๋ฅผ ์ปดํŒŒ์ผ ๊ฒฐ๊ณผ ์†Œ์Šค๋กœ ์„ค์ •

  • compilationResults.create ์š”์ฒญ์—์„œ gitCommitish ์†์„ฑ์„ ๋‹ค์Œ ํ˜•์‹์˜ ์„ ํƒ๋œ Git ๋ธŒ๋žœ์น˜, ํƒœ๊ทธ ๋˜๋Š” ์ปค๋ฐ‹ SHA๋กœ ์ฑ„์›๋‹ˆ๋‹ค.

    {
      "gitCommitish": "GIT_COMMITISH"
    }
    

    GIT_COMMITISH๋ฅผ ์ปดํŒŒ์ผ ๊ฒฐ๊ณผ์˜ ์„ ํƒ๋œ Git ๋ธŒ๋žœ์น˜, Git ํƒœ๊ทธ ๋˜๋Š” Git ์ปค๋ฐ‹ SHA๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

๋‹ค์Œ ์ฝ”๋“œ ์ƒ˜ํ”Œ์€ "staging"์œผ๋กœ ์„ค์ •๋œ compilationResults.create ์š”์ฒญ์˜ gitCommitish ์†์„ฑ์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

{
  "gitCommitish": "staging"
}

๊ธฐ๋ณธ ํ”„๋กœ์ ํŠธ ์žฌ์ •์˜

๊ฐœ๋ฐœ์— ์‚ฌ์šฉ๋˜๋Š” ํ”„๋กœ์ ํŠธ์™€ ๋ณ„๊ฐœ๋กœ Google Cloud ํ”„๋กœ์ ํŠธ์—์„œ ์Šคํ…Œ์ด์ง• ๋˜๋Š” ํ”„๋กœ๋•์…˜ ํ…Œ์ด๋ธ”์„ ๋งŒ๋“ค๋ ค๋ฉด Dataform API compilationResults.create ์š”์ฒญ์˜ CodeCompilationConfig ๊ฐ์ฒด์— ๋‹ค๋ฅธ ํ”„๋กœ์ ํŠธ ID๋ฅผ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

compilationResults.create ์š”์ฒญ์— ๋ณ„๋„์˜ ๊ธฐ๋ณธ ํ”„๋กœ์ ํŠธ ID๋ฅผ ์ „๋‹ฌํ•˜๋ฉด ์›Œํฌํ”Œ๋กœ ์„ค์ • ํŒŒ์ผ์— ๊ตฌ์„ฑ๋œ ๊ธฐ๋ณธ ํ”„๋กœ์ ํŠธ ID๊ฐ€ ์žฌ์ •์˜๋˜์ง€๋งŒ ๊ฐœ๋ณ„ ํ…Œ์ด๋ธ”์— ๊ตฌ์„ฑ๋œ ํ”„๋กœ์ ํŠธ ID๋Š” ์žฌ์ •์˜๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

  • ๊ธฐ๋ณธ ํ”„๋กœ์ ํŠธ ID๋ฅผ ์žฌ์ •์˜ํ•˜๋ ค๋ฉด defaultDatabase ์†์„ฑ์„ CodeCompilationConfig ๊ฐ์ฒด์—์„œ ๋‹ค์Œ ํ˜•์‹์˜ ์„ ํƒ๋œ ํ”„๋กœ์ ํŠธ ID๋กœ ์„ค์ •ํ•˜์„ธ์š”.

    {
      "codeCompilationConfig": {
        "defaultDatabase": "PROJECT_NAME"
      }
    }
    

    PROJECT_NAME์„ ์ปดํŒŒ์ผ ๊ฒฐ๊ณผ์— ์„ค์ •ํ•˜๋ ค๋Š” ํ”„๋กœ์ ํŠธ ID๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

ํ…Œ์ด๋ธ” ํ”„๋ฆฌํ”ฝ์Šค ์ถ”๊ฐ€

์ปดํŒŒ์ผ ๊ฒฐ๊ณผ์—์„œ ํ…Œ์ด๋ธ”์„ ๋น ๋ฅด๊ฒŒ ์‹๋ณ„ํ•˜๋ ค๋ฉด Dataform API compilationResults.create ์š”์ฒญ์˜ CodeCompilationConfig ๊ฐ์ฒด์— ํ…Œ์ด๋ธ” ํ”„๋ฆฌํ”ฝ์Šค๋ฅผ ์ „๋‹ฌํ•˜์—ฌ ์ปดํŒŒ์ผ ๊ฒฐ๊ณผ์˜ ๋ชจ๋“  ํ…Œ์ด๋ธ” ์ด๋ฆ„์— ํ”„๋ฆฌํ”ฝ์Šค๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

  • ํ…Œ์ด๋ธ” ํ”„๋ฆฌํ”ฝ์Šค๋ฅผ ์ถ”๊ฐ€ํ•˜๋ ค๋ฉด CodeCompilationConfig ๊ฐ์ฒด์—์„œ tablePrefix ์†์„ฑ์„ ๋‹ค์Œ ํ˜•์‹์œผ๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

    {
      "codeCompilationConfig": {
        "tablePrefix": "PREFIX",
      }
    }
    

    PREFIX์„ ์ถ”๊ฐ€ํ•  ์ ‘๋‘์‚ฌ(์˜ˆ: staging)๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

    ์˜ˆ๋ฅผ ๋“ค์–ด ํ…Œ์ด๋ธ” ์ด๋ฆ„์ด table_name์ด๋ฉด Dataform์€ staging_table_name ์ด๋ฆ„์œผ๋กœ ํ…Œ์ด๋ธ”์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

์Šคํ‚ค๋งˆ ์ ‘๋ฏธ์‚ฌ ์ถ”๊ฐ€

๊ฐœ๋ฐœ, ์Šคํ…Œ์ด์ง•, ํ”„๋กœ๋•์…˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ถ„๋ฆฌํ•˜๋ ค๋ฉด Dataform API compilationResults.create ์š”์ฒญ์˜ CodeCompilationConfig ๊ฐ์ฒด์— ์Šคํ‚ค๋งˆ ์„œํ”ฝ์Šค๋ฅผ ์ „๋‹ฌํ•˜์—ฌ ์ปดํŒŒ์ผ ๊ฒฐ๊ณผ์˜ ์Šคํ‚ค๋งˆ์— ์„œํ”ฝ์Šค๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

  • ์Šคํ‚ค๋งˆ ์„œํ”ฝ์Šค๋ฅผ ์ถ”๊ฐ€ํ•˜๋ ค๋ฉด CodeCompilationConfig ๊ฐ์ฒด์˜ schemaSuffix ์†์„ฑ์„ ๋‹ค์Œ ํ˜•์‹์œผ๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

    {
      "codeCompilationConfig": {
        "schemaSuffix": "SUFFIX",
      }
    }
    

    SUFFIX๋ฅผ ์ถ”๊ฐ€ํ•  ์„œํ”ฝ์Šค(์˜ˆ: _staging)๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

    ์˜ˆ๋ฅผ ๋“ค์–ด workflow_settings.yaml ํŒŒ์ผ์˜ defaultDataset ์†์„ฑ์ด dataform๋กœ ์„ค์ •๋œ ๊ฒฝ์šฐ Dataform์€ dataform_staging ์Šคํ‚ค๋งˆ์— ํ…Œ์ด๋ธ”์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

์ปดํŒŒ์ผ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„ ํƒํ•œ ํŒŒ์ผ์„ ์กฐ๊ฑด๋ถ€๋กœ ์‹คํ–‰

ํŠน์ • ์‹คํ–‰ ์„ค์ •์—์„œ๋งŒ ์„ ํƒ๋œ ํ…Œ์ด๋ธ”์„ ์‹คํ–‰ํ•˜๋ ค๋ฉด ์‹คํ–‰ ์„ค์ •์˜ ์ปดํŒŒ์ผ ๋ณ€์ˆ˜๋ฅผ ๋งŒ๋“  ๋‹ค์Œ Dataform API compilationResults.create ์š”์ฒญ์˜ CodeCompilationConfig ๊ฐ์ฒด์— ์ด ๊ฐ’์„ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.

Dataform API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŠน์ • ์‹คํ–‰ ์„ค์ •์—์„œ ํ…Œ์ด๋ธ”์„ ์กฐ๊ฑด๋ถ€๋กœ ์‹คํ–‰ํ•˜๋ ค๋ฉด ๋‹ค์Œ ๋‹จ๊ณ„๋ฅผ ๋”ฐ๋ฅด์„ธ์š”.

  1. ์ปดํŒŒ์ผ ๋ณ€์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด ์„ ํƒํ•œ ํ…Œ์ด๋ธ”์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
  2. Dataform API ์ปดํŒŒ์ผ ์š”์ฒญ์˜ codeCompilationConfig ๋ธ”๋ก์— ๋‹ค์Œ ํ˜•์‹์˜ YOUR_VARIABLE ๋ฐ VALUE ํ‚ค-๊ฐ’ ์Œ์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

    {
      "codeCompilationConfig": {
        "vars": {
          "YOUR_VARIABLE": "VALUE"
        }
      }
    }
    
  3. YOUR_VARIABLE์„ ๋ณ€์ˆ˜ ์ด๋ฆ„(์˜ˆ: executionSetting)์œผ๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

  4. VALUE๋ฅผ ์„ ํƒํ•œ ํ…Œ์ด๋ธ”์— ์„ค์ •๋œ when ์กฐ๊ฑด์„ ์ถฉ์กฑํ•˜๋Š” ์ด ์ปดํŒŒ์ผ ๊ฒฐ๊ณผ์˜ ๋ณ€์ˆ˜ ๊ฐ’์œผ๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

๋‹ค์Œ ์ฝ”๋“œ ์ƒ˜ํ”Œ์€ Dataform API ์ปดํŒŒ์ผ ์š”์ฒญ์— ์ „๋‹ฌ๋œ executionSetting ๋ณ€์ˆ˜๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

{
  "gitCommitish": "staging",
  "codeCompilationConfig": {
    "vars": {
      "executionSetting": "staging"
    }
  }
}

์ปดํŒŒ์ผ ์žฌ์ •์˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ปดํŒŒ์ผ ๊ฒฐ๊ณผ ์‹คํ–‰

  • compilationResults.create ์š”์ฒญ์œผ๋กœ ์ƒ์„ฑ๋œ ์ปดํŒŒ์ผ ๊ฒฐ๊ณผ๋ฅผ ์‹คํ–‰ํ•˜๋ ค๋ฉด workflowInvocations.create ์š”์ฒญ์˜ compilationResults.create ์š”์ฒญ์—์„œ ๋ฐ˜ํ™˜๋œ ์ปดํŒŒ์ผ ๊ฒฐ๊ณผ ID๋ฅผ ์ „๋‹ฌํ•˜์„ธ์š”.

๋‹ค์Œ ์ฝ”๋“œ ์ƒ˜ํ”Œ์€ workflowInvocations.create ์š”์ฒญ์—์„œ ์ „๋‹ฌ๋œ ์ปดํŒŒ์ผ ๊ฒฐ๊ณผ ID๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

{
  "compilationResult": "projects/my-project-name/locations/europe-west4/repositories/my-repository-name/compilationResults/7646b4ed-ac8e-447f-93cf-63c43249ff11"
}

์ถœ์‹œ ๊ตฌ์„ฑ ๋งŒ๋“ค๊ธฐ

๋‹ค์Œ ์„น์…˜์—์„œ๋Š” Dataform์—์„œ ์ถœ์‹œ ๊ตฌ์„ฑ์„ ๋งŒ๋“ค์–ด ์ผ์ •์— ๋”ฐ๋ผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์ปดํŒŒ์ผ ์„ค์ • ํ…œํ”Œ๋ฆฟ์„ ๊ตฌ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ์ถœ์‹œ ๊ตฌ์„ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ ์‹คํ–‰ ํ™˜๊ฒฝ(์˜ˆ: ์Šคํ…Œ์ด์ง•, ํ”„๋กœ๋•์…˜)์„ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค

BigQuery์—์„œ ์›Œํฌํ”Œ๋กœ๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด Dataform์€ SQL ์›Œํฌํ”Œ๋กœ ์ฝ”๋“œ๋ฅผ ์ปดํŒŒ์ผ ๊ฒฐ๊ณผ๋กœ ์ปดํŒŒ์ผํ•ฉ๋‹ˆ๋‹ค. ์ด ํ”„๋กœ์„ธ์Šค๋Š” Dataform ์ž‘์—…๊ณต๊ฐ„์—์„œ ์›Œํฌํ”Œ๋กœ๋ฅผ ๊ฐœ๋ฐœํ•  ๋•Œ ์ž๋™์œผ๋กœ ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค.

์ถœ์‹œ ๊ตฌ์„ฑ์„ ์‚ฌ์šฉํ•˜๋ฉด ์ปดํŒŒ์ผ ๊ฒฐ๊ณผ๋ฅผ ๋งž์ถค์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ถœ์‹œ ๊ตฌ์„ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ ์‹คํ–‰ ํ™˜๊ฒฝ(์˜ˆ: ์Šคํ…Œ์ด์ง•)์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ถœ์‹œ ๊ตฌ์„ฑ ์„ค์ •

์ถœ์‹œ ๊ตฌ์„ฑ์—์„œ๋Š” ์›Œํฌ๋ฅผ๋กœ ์„ค์ • ์„ค์ •์˜ ์ปดํŒŒ์ผ ์žฌ์ •์˜๋ฅผ ๊ตฌ์„ฑํ•˜๊ณ , ์ปดํŒŒ์ผ ๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ•˜๋ฉฐ, ์ปดํŒŒ์ผ ๊ฒฐ๊ณผ ์ƒ์„ฑ์˜ ๋นˆ๋„๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Dataform ์ถœ์‹œ ๊ตฌ์„ฑ์—๋Š” ๋‹ค์Œ ์ปดํŒŒ์ผ ์„ค์ •์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

์ถœ์‹œ ์„ค์ •
์ถœ์‹œ ID, ์ปดํŒŒ์ผ ๊ฒฐ๊ณผ๋ฅผ ์œ„ํ•œ Git commitish, ์ปดํŒŒ์ผ ๊ฒฐ๊ณผ๋ฅผ ๋งŒ๋“œ๋Š” ๋นˆ๋„์ž…๋‹ˆ๋‹ค. ๋นˆ๋„๋Š” ์„ ํƒ์‚ฌํ•ญ์ธ ์„ค์ •์ž…๋‹ˆ๋‹ค. ์„ค์ •ํ•˜๋Š” ๊ฒฝ์šฐ ์ตœ์†Œ ๋นˆ๋„๋Š” 1์‹œ๊ฐ„์ž…๋‹ˆ๋‹ค.
์ปดํŒŒ์ผ ์žฌ์ •์˜
์›Œํฌํ”Œ๋กœ ์„ค์ •์— ์ •์˜๋œGoogle Cloud ํ”„๋กœ์ ํŠธ, ํ…Œ์ด๋ธ” ํ”„๋ฆฌํ”ฝ์Šค, ์Šคํ‚ค๋งˆ ์„œํ”ฝ์Šค, ์ปดํŒŒ์ผ ๋ณ€์ˆ˜์˜ ์žฌ์ •์˜์ž…๋‹ˆ๋‹ค.

์ถœ์‹œ ๊ตฌ์„ฑ ์ž‘๋™ ๋ฐฉ์‹

Dataform์€ ์ง€์ •๋œ ๋นˆ๋„๋กœ ๋˜๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์ปดํŒŒ์ผ์„ ํŠธ๋ฆฌ๊ฑฐํ•  ๋•Œ ์ถœ์‹œ ๊ตฌ์„ฑ์—์„œ ์ปดํŒŒ์ผ ๊ฒฐ๊ณผ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ๋นˆ๋„๋Š” ์„ ํƒ์‚ฌํ•ญ์ธ ์„ค์ •์ด๋ฉฐ ์ถœ์‹œ ๊ตฌ์„ฑ์„ ๋งŒ๋“ค ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์„ค์ •ํ•˜๋Š” ๊ฒฝ์šฐ ์ตœ์†Œ ๋นˆ๋„๋Š” 1์‹œ๊ฐ„์ž…๋‹ˆ๋‹ค. ์ถœ์‹œ ๊ตฌ์„ฑ ์„ธ๋ถ€์ •๋ณด ํŽ˜์ด์ง€์—์„œ ์ปดํŒŒ์ผ์„ ์ˆ˜๋™์œผ๋กœ ํŠธ๋ฆฌ๊ฑฐํ•˜๊ฑฐ๋‚˜, Dataform API releaseConfigs ๋ฉ”์„œ๋“œ๋กœ ์ปดํŒŒ์ผ์„ ํŠธ๋ฆฌ๊ฑฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ปดํŒŒ์ผ ์ค‘ Dataform์€ ์ €์žฅ์†Œ์˜ ์ง€์ •๋œ Git commitish์—์„œ ์ฝ”๋“œ๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ Dataform์€ ์ ์šฉ๋œ ์ปดํŒŒ์ผ ์žฌ์ •์˜ (์žˆ๋Š” ๊ฒฝ์šฐ)๋กœ ์ฝ”๋“œ๋ฅผ ์ปดํŒŒ์ผํ•˜๊ณ  ์ปดํŒŒ์ผ ๊ฒฐ๊ณผ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ถœ์‹œ ๊ตฌ์„ฑ์— ๋Œ€ํ•ด ์ƒ์„ฑ๋œ ์ตœ์‹  ์ปดํŒŒ์ผ ๊ฒฐ๊ณผ๋Š” ์‹ค์‹œ๊ฐ„ ์ปดํŒŒ์ผ ๊ฒฐ๊ณผ์ž…๋‹ˆ๋‹ค.

์›Œํฌํ”Œ๋กœ ๊ตฌ์„ฑ์—์„œ ์ถœ์‹œ ๊ตฌ์„ฑ์˜ ์ปดํŒŒ์ผ ๊ฒฐ๊ณผ์˜ ์‹คํ–‰์„ ์˜ˆ์•ฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ผ์ •๊ณผ ๊ด€๊ณ„์—†์ด ์„ ํƒํ•œ ์ถœ์‹œ ๊ตฌ์„ฑ์„ ์‹คํ–‰ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์›Œํฌํ”Œ๋กœ ๊ตฌ์„ฑ ์‹คํ–‰ ์ค‘ Dataform์€ ์„ ํƒํ•œ ์ถœ์‹œ ๊ตฌ์„ฑ์—์„œ ์‹ค์‹œ๊ฐ„ ์ปดํŒŒ์ผ ๊ฒฐ๊ณผ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

์ถœ์‹œ ๊ตฌ์„ฑ ๋งŒ๋“ค๊ธฐ

Dataform ์ถœ์‹œ ๊ตฌ์„ฑ์„ ๋งŒ๋“ค๋ ค๋ฉด ๋‹ค์Œ ๋‹จ๊ณ„๋ฅผ ๋”ฐ๋ฅด์„ธ์š”.

  1. ์ €์žฅ์†Œ์—์„œ ์ถœ์‹œ ๋ฐ ์ผ์ •์œผ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.
  2. ์ถœ์‹œ ๊ตฌ์„ฑ ์„น์…˜์—์„œ ๋งŒ๋“ค๊ธฐ๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
  3. ์ถœ์‹œ ๊ตฌ์„ฑ ๋งŒ๋“ค๊ธฐ ์ฐฝ์—์„œ ์ถœ์‹œ ์„ค์ •์„ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค.

    1. ์ถœ์‹œ ID ํ•„๋“œ์— ์ถœ์‹œ ๊ตฌ์„ฑ์˜ ๊ณ ์œ  ID๋ฅผ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.

      ID์—๋Š” ์ˆซ์ž, ๋ฌธ์ž, ํ•˜์ดํ”ˆ, ๋ฐ‘์ค„๋งŒ ํฌํ•จํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    2. Git commitish ํ•„๋“œ์— ์ถœ์‹œ์— ๋Œ€ํ•œ Git ๋ธŒ๋žœ์น˜ ๋˜๋Š” Git ์ปค๋ฐ‹ SHA๋ฅผ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.

      ์›๊ฒฉ ์ €์žฅ์†Œ์— ์—ฐ๊ฒฐ๋˜์ง€ ์•Š์€ Dataform ์ €์žฅ์†Œ์—์„œ ๊ฐ’์€ ํ•ญ์ƒ main์ž…๋‹ˆ๋‹ค.

    3. ์„ ํƒ์‚ฌํ•ญ: ๋นˆ๋„ ํ•„๋“œ์—์„œ ์ปดํŒŒ์ผ ๊ฒฐ๊ณผ ์ƒ์„ฑ ๋นˆ๋„๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

      ์„ค์ •ํ•˜๋Š” ๊ฒฝ์šฐ ์ตœ์†Œ ๋นˆ๋„๋Š” 1์‹œ๊ฐ„์ž…๋‹ˆ๋‹ค.

      ์ž๋™ ์ถœ์‹œ๋ฅผ ์‚ฌ์šฉ ์ค‘์ง€ํ•˜๋ ค๋ฉด ๋นˆ๋„ ํ•„๋“œ๋ฅผ ๋น„์›Œ ๋‘ก๋‹ˆ๋‹ค.

  4. ์„ ํƒ์‚ฌํ•ญ: ์ปดํŒŒ์ผ ์žฌ์ •์˜ ์„น์…˜์—์„œ ์ปดํŒŒ์ผ ์„ค์ •์„ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค.

    1. Google Cloud ํ”„๋กœ์ ํŠธ ID ํ•„๋“œ์— ์ปดํŒŒ์ผ ๊ฒฐ๊ณผ๋ฅผ ์ €์žฅํ• Google Cloud ํ”„๋กœ์ ํŠธ์˜ ID๋ฅผ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.
    2. ์Šคํ‚ค๋งˆ ์„œํ”ฝ์Šค ํ•„๋“œ์—์„œ ์›Œํฌํ”Œ๋กœ ์„ค์ •์— ๊ตฌ์„ฑ๋œ ์Šคํ‚ค๋งˆ์— ์ถ”๊ฐ€ํ•  ์„œํ”ฝ์Šค๋ฅผ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.
    3. ํ…Œ์ด๋ธ” ์ ‘๋‘์‚ฌ ํ•„๋“œ์— ๋ชจ๋“  ํ…Œ์ด๋ธ” ์ด๋ฆ„์˜ ์ ‘๋‘์‚ฌ๋ฅผ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.
  5. ์„ ํƒ์‚ฌํ•ญ: ์ปดํŒŒ์ผ ๋ณ€์ˆ˜ ์„น์…˜์—์„œ ์ปดํŒŒ์ผ ๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

    1. ๋ณ€์ˆ˜ ์ถ”๊ฐ€๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
    2. ํ‚ค ํ•„๋“œ์— ์ปดํŒŒ์ผ ๋ณ€์ˆ˜๋ฅผ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.
    3. ๊ฐ’ ํ•„๋“œ์— ์ปดํŒŒ์ผ ๋ณ€์ˆ˜ ๊ฐ’์„ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.
    4. ๋‹ค๋ฅธ ์ปดํŒŒ์ผ ๋ณ€์ˆ˜๋ฅผ ์ถ”๊ฐ€ํ•˜๋ ค๋ฉด ๋ณ€์ˆ˜ ์ถ”๊ฐ€๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
  6. ๋งŒ๋“ค๊ธฐ๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ๋ณธ ํ”„๋กœ์ ํŠธ๋ฅผ ์žฌ์ •์˜ํ•˜๋Š” ๊ฒฝ์šฐ ์ถœ์‹œ ๊ตฌ์„ฑ์— ์„ค์ •๋œ ํ”„๋กœ์ ํŠธ์— ๋Œ€ํ•ด Dataform ์„œ๋น„์Šค ๊ณ„์ •์— ์•ก์„ธ์Šค ๊ถŒํ•œ์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ๋‹ค์Œ ์ถœ์‹œ ๊ตฌ์„ฑ์—์„œ๋Š” ์ปดํŒŒ์ผ ์žฌ์ •์˜ ์—†์ด main ๋ธŒ๋žœ์น˜์—์„œ ๋งค์‹œ๊ฐ„ production ์ปดํŒŒ์ผ ๊ฒฐ๊ณผ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

  • ์ถœ์‹œ ID: production
  • Git commitish: main
  • ๋นˆ๋„: ์‹œ๊ฐ„๋ณ„
  • ์ปดํŒŒ์ผ ์žฌ์ •์˜ ์—†์Œ

์ถœ์‹œ ๊ตฌ์„ฑ ์„ธ๋ถ€์ •๋ณด ๋ณด๊ธฐ

์ถœ์‹œ ๊ตฌ์„ฑ์˜ ๋‹ค์Œ ์„ธ๋ถ€์ •๋ณด๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์ถœ์‹œ ์„ค์ •
    • Git commitish
    • ์ตœ์‹  ์ปดํŒŒ์ผ ๊ฒฐ๊ณผ ํƒ€์ž„์Šคํƒฌํ”„
    • ํฌ๋ก  ์ผ์ •
    • ์ปดํŒŒ์ผ ์žฌ์ •์˜
    • ์ปดํŒŒ์ผ ๋ณ€์ˆ˜
  • ์‹ค์‹œ๊ฐ„ ์ปดํŒŒ์ผ ๊ฒฐ๊ณผ
    • ์ƒ์„ฑ ํƒ€์ž„์Šคํƒฌํ”„
    • Git commitish
    • ์ปค๋ฐ‹ SHA
  • ์ด์ „ ์ปดํŒŒ์ผ ๊ฒฐ๊ณผ

์ถœ์‹œ ๊ตฌ์„ฑ ์„ธ๋ถ€์ •๋ณด๋ฅผ ๋ณด๋ ค๋ฉด ๋‹ค์Œ ๋‹จ๊ณ„๋ฅผ ๋”ฐ๋ฅด์„ธ์š”.

  1. ์ €์žฅ์†Œ์—์„œ ์ถœ์‹œ ๋ฐ ์ผ์ •์œผ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.
  2. ์ถœ์‹œ ๊ตฌ์„ฑ์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
  3. ์ถœ์‹œ ๊ตฌ์„ฑ ์„ธ๋ถ€์ •๋ณด ํŽ˜์ด์ง€์—์„œ ์ถœ์‹œ ๊ตฌ์„ฑ์˜ ์„ธ๋ถ€์ •๋ณด๋ฅผ ๊ฒ€์‚ฌํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ์•ฝ๋œ ์ปดํŒŒ์ผ ๊ฒฐ๊ณผ ํ…Œ์ด๋ธ”์—๋Š” ์ถœ์‹œ ๊ตฌ์„ฑ์— ์˜ํ•ด ์ž๋™์œผ๋กœ ์ƒ์„ฑ๋œ ์ด์ „ ์ปดํŒŒ์ผ ๊ฒฐ๊ณผ๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

์ˆ˜๋™/API ์ปดํŒŒ์ผ ๊ฒฐ๊ณผ ํ…Œ์ด๋ธ”์—๋Š” ์ €์žฅ์†Œ์˜ ์ตœ๊ทผ 1,000๊ฐœ์˜ ์ปดํŒŒ์ผ ๊ฒฐ๊ณผ ์ค‘์—์„œ ์ˆ˜๋™์œผ๋กœ ์ƒ์„ฑ๋˜๊ฑฐ๋‚˜ Dataform API ํ˜ธ์ถœ์„ ํ†ตํ•ด ์ƒ์„ฑ๋œ ์ปดํŒŒ์ผ ๊ฒฐ๊ณผ๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

์ˆ˜๋™์œผ๋กœ ์ปดํŒŒ์ผ ํŠธ๋ฆฌ๊ฑฐ

์„ ํƒํ•œ ์ถœ์‹œ ๊ตฌ์„ฑ์„ ํ†ตํ•ด ์ปดํŒŒ์ผ ๊ฒฐ๊ณผ๋ฅผ ์ˆ˜๋™์œผ๋กœ ๋งŒ๋“ค๋ ค๋ฉด ๋‹ค์Œ ๋‹จ๊ณ„๋ฅผ ๋”ฐ๋ฅด์„ธ์š”.

  1. ์ €์žฅ์†Œ์—์„œ ์ถœ์‹œ ๋ฐ ์ผ์ •์œผ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.
  2. ์ถœ์‹œ ๊ตฌ์„ฑ์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
  3. ์ถœ์‹œ ๊ตฌ์„ฑ ์„ธ๋ถ€์ •๋ณด ํŽ˜์ด์ง€์—์„œ ์ƒˆ ์ปดํŒŒ์ผ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

UI๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ์ƒˆ๋กœ ์ปดํŒŒ์ผ๋œ ๊ฒฐ๊ณผ๊ฐ€ ์ถœ์‹œ ๊ตฌ์„ฑ์— ์ž๋™์œผ๋กœ ๊ฒŒ์‹œ๋ฉ๋‹ˆ๋‹ค. API๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ์ถœ์‹œ ๊ตฌ์„ฑ์—์„œ ์ƒˆ ์ปดํŒŒ์ผ ๊ฒฐ๊ณผ๋ฅผ ๋งŒ๋“  ๋‹ค์Œ ์ถœ์‹œ ๊ตฌ์„ฑ์„ ์—…๋ฐ์ดํŠธํ•˜์—ฌ ์ด ์ƒˆ ๊ฐ’์œผ๋กœ releaseCompilationResult ํ•„๋“œ๋ฅผ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ˆ˜๋™ ์ปดํŒŒ์ผ ๊ฒฐ๊ณผ๋Š” ์ถœ์‹œ ๊ตฌ์„ฑ ์„ธ๋ถ€์ •๋ณด ํŽ˜์ด์ง€์˜ ์ˆ˜๋™/API ์ปดํŒŒ์ผ ๊ฒฐ๊ณผ ํ…Œ์ด๋ธ”์— ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

์ถœ์‹œ ๊ตฌ์„ฑ ์‹คํ–‰ ํŠธ๋ฆฌ๊ฑฐ

์„ ํƒํ•œ ์ถœ์‹œ ๊ตฌ์„ฑ์˜ ๋ผ์ด๋ธŒ ์ปดํŒŒ์ผ ๊ฒฐ๊ณผ ์‹คํ–‰์„ BigQuery์— ํŠธ๋ฆฌ๊ฑฐํ•˜๋ ค๋ฉด ๋‹ค์Œ ๋‹จ๊ณ„๋ฅผ ๋”ฐ๋ฅด์„ธ์š”.

  1. ์ €์žฅ์†Œ์—์„œ ์ถœ์‹œ ๋ฐ ์ผ์ •์œผ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.
  2. ์ถœ์‹œ ๊ตฌ์„ฑ ์„น์…˜์—์„œ ์‹คํ–‰ ์‹œ์ž‘์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
  3. ์ˆ˜๋™ ์›Œํฌํ”Œ๋กœ ์‹คํ–‰ ์ฐฝ์˜ ์ถœ์‹œ ๊ตฌ์„ฑ ๋ชฉ๋ก์—์„œ ์ถœ์‹œ ๊ตฌ์„ฑ์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
  4. ์‹คํ–‰ํ•  ์›Œํฌํ”Œ๋กœ ์ž‘์—…์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
    1. ์ „์ฒด ์›Œํฌํ”Œ๋กœ๋ฅผ ์‹คํ–‰ํ•˜๋ ค๋ฉด ๋ชจ๋“  ์ž‘์—…์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
    2. ์›Œํฌํ”Œ๋กœ์—์„œ ์„ ํƒํ•œ ์ž‘์—…์„ ์‹คํ–‰ํ•˜๋ ค๋ฉด ์ž‘์—… ์„ ํƒ์„ ํด๋ฆญํ•œ ๋‹ค์Œ ์ž‘์—…์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
    3. ์„ ํƒํ•œ ํƒœ๊ทธ๋กœ ์ž‘์—…์„ ์‹คํ–‰ํ•˜๋ ค๋ฉด ํƒœ๊ทธ ์„ ํƒ์„ ํด๋ฆญํ•œ ๋‹ค์Œ ํƒœ๊ทธ๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
  5. ์„ ํƒ์‚ฌํ•ญ: ์„ ํƒํ•œ ์ž‘์—… ๋˜๋Š” ํƒœ๊ทธ ๋ฐ ์ข…์† ํ•ญ๋ชฉ์„ ์‹คํ–‰ํ•˜๋ ค๋ฉด ์ข…์† ํ•ญ๋ชฉ ํฌํ•จ ์˜ต์…˜์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
  6. ์„ ํƒ์‚ฌํ•ญ: ์„ ํƒํ•œ ์ž‘์—… ๋˜๋Š” ํƒœ๊ทธ ๋ฐ ์ข…์†์ž๋ฅผ ์‹คํ–‰ํ•˜๋ ค๋ฉด ์ข…์†์ž ํฌํ•จ ์˜ต์…˜์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
  7. ์„ ํƒ์‚ฌํ•ญ: ๋ชจ๋“  ํ…Œ์ด๋ธ”์„ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋‹ค์‹œ ๋นŒ๋“œํ•˜๋ ค๋ฉด ์ „์ฒด ์ƒˆ๋กœ๊ณ ์นจ์œผ๋กœ ์‹คํ–‰ ์˜ต์…˜์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

    ์ด ์˜ต์…˜์ด ์—†์œผ๋ฉด Dataform์€ ์ฆ๋ถ„ ํ…Œ์ด๋ธ”์„ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋‹ค์‹œ ๋นŒ๋“œํ•˜์ง€ ์•Š๊ณ  ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.

  8. ์‹คํ–‰ ์‹œ์ž‘์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

์ถœ์‹œ ๊ตฌ์„ฑ ์ˆ˜์ •

์ถœ์‹œ ๊ตฌ์„ฑ์„ ์ˆ˜์ •ํ•˜๋ ค๋ฉด ๋‹ค์Œ ๋‹จ๊ณ„๋ฅผ ๋”ฐ๋ฅด์„ธ์š”.

  1. ์ €์žฅ์†Œ์—์„œ ์ถœ์‹œ ๋ฐ ์ผ์ •์œผ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.
  2. ์ˆ˜์ •ํ•˜๋ ค๋Š” ์ถœ์‹œ ๊ตฌ์„ฑ ์˜†์— ์žˆ๋Š” ๋”๋ณด๊ธฐ ๋ฉ”๋‰ด๋ฅผ ํด๋ฆญํ•œ ๋‹ค์Œ ์ˆ˜์ •์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
  3. ์ถœ์‹œ ๊ตฌ์„ฑ ์ˆ˜์ • ์ฐฝ์—์„œ ์ถœ์‹œ ๊ตฌ์„ฑ ์„ค์ •์„ ์ˆ˜์ •ํ•œ ๋‹ค์Œ ์ €์žฅ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

์ถœ์‹œ ๊ตฌ์„ฑ ์‚ญ์ œ

์ถœ์‹œ ๊ตฌ์„ฑ์„ ์‚ญ์ œํ•˜๋ ค๋ฉด ๋‹ค์Œ ๋‹จ๊ณ„๋ฅผ ๋”ฐ๋ฅด์„ธ์š”.

  1. ์ €์žฅ์†Œ์—์„œ ์ถœ์‹œ ๋ฐ ์ผ์ •์œผ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.
  2. ์‚ญ์ œํ•˜๋ ค๋Š” ์ถœ์‹œ ๊ตฌ์„ฑ ์˜†์— ์žˆ๋Š” ๋”๋ณด๊ธฐ ๋ฉ”๋‰ด๋ฅผ ํด๋ฆญํ•œ ๋‹ค์Œ ์‚ญ์ œ๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
  3. ์ถœ์‹œ ๊ตฌ์„ฑ ์‚ญ์ œ ๋Œ€ํ™”์ƒ์ž์—์„œ ์‚ญ์ œ๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ ๋‹จ๊ณ„