Git ๋‚ด๋ณด๋‚ด๊ธฐ/๋ณต์›

๋Œ€ํ™”ํ˜• ์—์ด์ „ํŠธ (Dialogflow CX)๋Š” ์—ฌ๋Ÿฌ Git ์ œ๊ณต์—…์ฒด(GitHub, GitLab, Bitbucket ๋“ฑ)์™€ ํ†ตํ•ฉ๋ฉ๋‹ˆ๋‹ค. ์ด ํ†ตํ•ฉ์„ ํ†ตํ•ด ์—์ด์ „ํŠธ๋ฅผ JSON์œผ๋กœ ๋‚ด๋ณด๋‚ด Git ์ œ๊ณต์—…์ฒด์— ํ‘ธ์‹œ(push)ํ•˜๊ณ  ์—์ด์ „ํŠธ ๋ณต์›์„ ์œ„ํ•ด Git ์ œ๊ณต์—…์ฒด์—์„œ ํ’€(pull)ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Git ์ œ๊ณต์—…์ฒด์— ํ‘ธ์‹œ๋œ JSON ๋‚ด๋ณด๋‚ด๊ธฐ ํ˜•์‹์€ ๋‚ด๋ณด๋‚ธ ์—์ด์ „ํŠธ์˜ ํ™•์žฅ๋œ zip ํŒŒ์ผ ์ฝ˜ํ…์ธ ์ž…๋‹ˆ๋‹ค.

์ด ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ Git ์ œ๊ณต์—…์ฒด ์†Œ์Šค ์ œ์–ด ๊ธฐ๋Šฅ์„ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์ฝ”๋“œ ๊ฒ€ํ†  ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์—์ด์ „ํŠธ ๋ณ€๊ฒฝ์‚ฌํ•ญ ๊ฒ€ํ† 
  • ๋น„๊ต ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์—์ด์ „ํŠธ ์ฐจ์ด์  ๊ฒ€์‚ฌ
  • ๋ณ‘ํ•ฉ

์ œํ•œ์‚ฌํ•ญ

๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ œํ•œ์‚ฌํ•ญ์ด ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.

  • [์ด์ „ ํ†ตํ•ฉ ๋ฒ„์ „๋งŒ ํ•ด๋‹น] GitHub API๋Š” ๋‹จ์ผ ์ปค๋ฐ‹์—์„œ ์—…๋ฐ์ดํŠธํ•  ์ˆ˜ ์žˆ๋Š” ํŒŒ์ผ ์ˆ˜๋ฅผ ์ œํ•œํ•ฉ๋‹ˆ๋‹ค. ํŒŒ์ผ ์ˆ˜๊ฐ€ 500๊ฐœ๋ฅผ ์ดˆ๊ณผํ•˜๋ฉด ๋Œ€ํ™”ํ˜• ์—์ด์ „ํŠธ (Dialogflow CX)์—์„œ GitHub๋กœ ๋‚ด๋ณด๋‚ผ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ์—์ด์ „ํŠธ๋ฅผ zip์œผ๋กœ ๋‚ด๋ณด๋‚ด๊ณ  ๋จธ์‹ ์—์„œ Git CLI๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์—์ด์ „ํŠธ ํŒŒ์ผ์„ GitHub๋กœ ๋‚ด๋ณด๋‚ด๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์ด ์ œํ•œ์€ ์ดํ›„ ๋Œ€ํ™”ํ˜• ์—์ด์ „ํŠธ(Dialogflow CX) ์ถœ์‹œ ๋ฒ„์ „์—์„œ ํ•ด๊ฒฐ๋  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.
  • ๋Œ€ํ™”ํ˜• ์—์ด์ „ํŠธ (Dialogflow CX)์—์„œ ์ด๋Ÿฌํ•œ ์ €์žฅ์†Œ์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ GitHub ๋น„๊ณต๊ฐœ ์•ก์„ธ์Šค ์ž์ฒด ํ˜ธ์ŠคํŒ… ์ €์žฅ์†Œ๋Š” ์ง€์›๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • Git ์ €์žฅ์†Œ์—๋Š” ์—์ด์ „ํŠธ ๋‚ด๋ณด๋‚ด๊ธฐ์—์„œ ๋‚ด๋ณด๋‚ธ ์—์ด์ „ํŠธ ํŒŒ์ผ ์ด์™ธ์˜ ํŒŒ์ผ์€ ํฌํ•จ๋  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ €์žฅ์†Œ์˜ ๋‹ค๋ฅธ ๋ชจ๋“  ํŒŒ์ผ์€ ๋‚ด๋ณด๋‚ผ ๋•Œ๋งˆ๋‹ค ์‚ญ์ œ๋ฉ๋‹ˆ๋‹ค.

๊ตฌ์„ฑ

์ด ๊ธฐ๋Šฅ์„ ๊ตฌ์„ฑํ•˜๋ ค๋ฉด Git ์ œ๊ณต์—…์ฒด์—์„œ ์•ก์„ธ์Šค ํ† ํฐ์„ ํš๋“ํ•˜๊ณ , Secret Manager์— ์ €์žฅํ•˜๊ณ , ๋Œ€ํ™”ํ˜• ์—์ด์ „ํŠธ (Dialogflow CX)์— ๋ณด์•ˆ ๋น„๋ฐ€ ๋ฆฌ์†Œ์Šค๋ฅผ ์ œ๊ณตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์•ก์„ธ์Šค ํ† ํฐ

Git ์ œ๊ณต์—…์ฒด์—์„œ ์•ก์„ธ์Šค ํ† ํฐ์„ ๊ฐ€์ ธ์˜ค๋ ค๋ฉด ๋‹ค์Œ ๋‹จ๊ณ„๋ฅผ ๋”ฐ๋ฅด์„ธ์š”.

GitHub

์„ธ๋ถ„ํ™”๋œ ๊ฐœ์ธ ์•ก์„ธ์Šค ํ† ํฐ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ๋‹ค์Œ ๊ถŒํ•œ์— ์•ก์„ธ์Šคํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • ์ €์žฅ์†Œ ๊ถŒํ•œ > ์ฝ˜ํ…์ธ : ์ฝ๊ธฐ ๋ฐ ์“ฐ๊ธฐ
  • ์ €์žฅ์†Œ ๊ถŒํ•œ > ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ: ์ฝ๊ธฐ ์ „์šฉ(์ฝ˜ํ…์ธ  ๊ถŒํ•œ์„ ์„ ํƒํ•œ ํ›„ ์ž๋™์œผ๋กœ ์„ ํƒ๋จ)

GitLab

Gitlab ๊ฐœ์ธ ์•ก์„ธ์Šค ํ† ํฐ์„ ํš๋“ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Bitbucket

Bitbucket ์•ก์„ธ์Šค ํ† ํฐ์„ ํš๋“ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Secret Manager

์ด์ œ ์•ก์„ธ์Šค ํ† ํฐ์ด ์žˆ์œผ๋ฏ€๋กœ ํ† ํฐ์˜ ๋ณด์•ˆ ๋น„๋ฐ€์„ ๋งŒ๋“ค์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  1. Secret Manager API ์‚ฌ์šฉ ์„ค์ •
  2. ๋ณด์•ˆ ๋น„๋ฐ€์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

๋Œ€ํ™”ํ˜• ์—์ด์ „ํŠธ (Dialogflow CX) ๊ตฌ์„ฑ

๋Œ€ํ™”ํ˜• ์—์ด์ „ํŠธ (Dialogflow CX)์— ๋Œ€ํ•ด ์ด ํ†ตํ•ฉ์„ ๊ตฌ์„ฑํ•˜๋ ค๋ฉด ๋‹ค์Œ ๋‹จ๊ณ„๋ฅผ ๋”ฐ๋ฅด์„ธ์š”.

  1. Dialogflow ์„œ๋น„์Šค ์—์ด์ „ํŠธ๊ฐ€ Secret Manager์˜ ์•ก์„ธ์Šค ํ† ํฐ ๋ณด์•ˆ ๋น„๋ฐ€์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋Š” ๊ถŒํ•œ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์—์ด์ „ํŠธ ํ”„๋กœ์ ํŠธ์˜ gcp-sa-dialogflow.iam.gserviceaccount.com ์„œ๋น„์Šค ๊ณ„์ •์— Secret Manager Secret Accessor ์—ญํ• ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. Secret Manager ๋ณด์•ˆ ๋น„๋ฐ€์— ๋Œ€ํ•œ ์•ก์„ธ์Šค ๊ถŒํ•œ ๋ถ€์—ฌ๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”.
  2. Git ํ†ตํ•ฉ ๊ตฌ์„ฑ์„ ์—ฝ๋‹ˆ๋‹ค.
    • ๋Œ€ํ™”ํ˜• ์—์ด์ „ํŠธ ์ฝ˜์†”
      1. ์˜ค๋ฅธ์ชฝ ์ƒ๋‹จ์— ์žˆ๋Š” ์„ค์ • ์•„์ด์ฝ˜์„ ํด๋ฆญํ•˜์—ฌ ์„ค์ • ํ‘œ์‹œ๋ฅผ ์—ฝ๋‹ˆ๋‹ค.
      2. ์•„๋ž˜๋กœ ์Šคํฌ๋กคํ•˜์—ฌ Git ํ†ตํ•ฉ ์ถ”๊ฐ€๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
    • Dialogflow CX ์ฝ˜์†”
      1. ๊ด€๋ฆฌ ํƒญ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
      2. Git ์„น์…˜์—์„œ Git์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
      3. ์ƒˆ๋กœ ๋งŒ๋“ค๊ธฐ๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
  3. ๊ตฌ์„ฑ ์„ธ๋ถ€์ •๋ณด๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
    1. ๋‹ค์Œ์„ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.
      • GitHub ์—ฐ๊ฒฐ์˜ ํ‘œ์‹œ ์ด๋ฆ„.
      • Git ์ €์žฅ์†Œ URL (์˜ˆ: https://github.com/<path-to-repo>.git)
      • ์—์ด์ „ํŠธ๊ฐ€ ์ƒํ˜ธ์ž‘์šฉํ•  Git ๋ธŒ๋žœ์น˜๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ์˜†์— ์žˆ๋Š” ๋ณ„ํ‘œ ์•„์ด์ฝ˜์„ ํด๋ฆญํ•˜์—ฌ ๋ธŒ๋žœ์น˜๋ฅผ ๊ธฐ๋ณธ ๋ธŒ๋žœ์น˜๋กœ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
      • ์•ก์„ธ์Šค ํ† ํฐ ๋ณด์•ˆ ๋น„๋ฐ€์ž…๋‹ˆ๋‹ค. ํŠน์ • ๋ฒ„์ „์˜ ๊ฒฝ์šฐ projects/*/secrets/*/versions/*, ์ตœ์‹  ๋ฒ„์ „์˜ ๊ฒฝ์šฐ projects/*/secrets/*/versions/latest ํ˜•์‹์œผ๋กœ ์ƒ์„ฑ๋œ ๋ณด์•ˆ ๋น„๋ฐ€ ๋ฒ„์ „์ž…๋‹ˆ๋‹ค.
    2. ์—ฐ๊ฒฐ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
    3. Git ์„œ๋น„์Šค๊ฐ€ ์ค€๋น„๋˜๋Š” ๋ฐ 1๋ถ„ ์ •๋„ ๊ฑธ๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฝ˜์†”์— ์•Œ๋ฆผ์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

๋‚ด๋ณด๋‚ด๊ธฐ ๋ฐ ๋ณต์›

๊ตฌ์„ฑ ํ›„์—๋Š” ์—์ด์ „ํŠธ๋ฅผ Git์œผ๋กœ ํ‘ธ์‹œํ•˜๊ฑฐ๋‚˜ Git์—์„œ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚ด๋ณด๋‚ด๊ธฐ ๋ฒ„ํŠผ์€ ์—์ด์ „ํŠธ๋ฅผ ๋‚ด๋ณด๋‚ด๊ณ  Git ๋ธŒ๋žœ์น˜ ๋“œ๋กญ๋‹ค์šด์—์„œ ์„ ํƒํ•œ Git ๋ธŒ๋žœ์น˜์— ์ปค๋ฐ‹ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ด ์ปค๋ฐ‹์€ ํŠน์ • ๋ณ€๊ฒฝ์‚ฌํ•ญ์ด ์•„๋‹Œ ์ „์ฒด ์—์ด์ „ํŠธ๋กœ ๊ตฌ์„ฑ๋˜๋ฉฐ ์ €์žฅ์†Œ์˜ ๊ธฐ์กด ํŒŒ์ผ์„ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.

Dialogflow ๋ฆฌ๋” ์—ญํ• ์ด ์žˆ๋Š” ์‚ฌ์šฉ์ž๋Š” Git ์ €์žฅ์†Œ๋กœ ํ‘ธ์‹œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์›์น˜ ์•Š๋Š” ํ‘ธ์‹œ๋ฅผ ๋ฐฉ์ง€ํ•˜๋ ค๋ฉด ์ด๋Ÿฌํ•œ ์—์ด์ „ํŠธ๋ฅผ ์ฝ๊ธฐ ์ „์šฉ ๊ฐœ์ธ ์•ก์„ธ์Šค ํ† ํฐ์œผ๋กœ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค.

๋ณต์› ๋ฒ„ํŠผ์€ Git ๋ธŒ๋žœ์น˜ ๋“œ๋กญ๋‹ค์šด์—์„œ ์„ ํƒํ•œ Git ๋ธŒ๋žœ์น˜์—์„œ ์—์ด์ „ํŠธ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์™€ ์ด ๋ฐ์ดํ„ฐ์—์„œ ๋Œ€ํ™”ํ˜• ์—์ด์ „ํŠธ (Dialogflow CX)๋ฅผ ๋ณต์›ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ด ๋ฐฉ์‹์€ ๋ชจ๋“  ์—์ด์ „ํŠธ ๋ณต์›๊ณผ ๋™์ผํ•œ ๋ฐฉ์‹์œผ๋กœ ์—์ด์ „ํŠธ๋ฅผ ๋ฎ์–ด์”๋‹ˆ๋‹ค.

์‚ฌ์šฉ ์‚ฌ๋ก€

๋‹ค์Œ ์˜ˆ์‹œ์—์„œ๋Š” ์—ฌ๋Ÿฌ ์‚ฌ์šฉ์ž๊ฐ€ ์ด ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜์—ฌ ํ”„๋กœ๋•์…˜ ์—์ด์ „ํŠธ์— ๋‹ค์–‘ํ•œ ์—์ด์ „ํŠธ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ์ œ์•ˆํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

์—์ด์ „ํŠธ์—์„œ ๋‹ค์Œ Git ๋ธŒ๋žœ์น˜๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

  • Prod: ํ”„๋กœ๋•์…˜ ์—์ด์ „ํŠธ๋ฅผ ์œ„ํ•œ ๋ธŒ๋žœ์น˜
  • Dev1: ์—์ด์ „ํŠธ ๊ฐœ๋ฐœ์„ ์œ„ํ•œ ๋ธŒ๋žœ์น˜
  • Dev2: ์—์ด์ „ํŠธ ๊ฐœ๋ฐœ์„ ์œ„ํ•œ ๋˜ ๋‹ค๋ฅธ ๋ธŒ๋žœ์น˜

์‚ฌ์šฉ์ž 1์ด ์—์ด์ „ํŠธ ๋ณ€๊ฒฝ์„ ์ œ์•ˆํ•˜๋ ค๊ณ  ํ•˜๋ฉฐ ๋‹ค์Œ ๋‹จ๊ณ„๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

  1. ํ”„๋กœ๋•์…˜ ์—์ด์ „ํŠธ๋ฅผ ์ƒˆ ์—์ด์ „ํŠธ๋กœ ๋‚ด๋ณด๋ƒ…๋‹ˆ๋‹ค.
  2. ์ด ์—์ด์ „ํŠธ ์‚ฌ๋ณธ์„ ์›ํ•˜๋Š” ๋Œ€๋กœ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.
  3. ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ํ…Œ์ŠคํŠธํ•ฉ๋‹ˆ๋‹ค.
  4. ๋ณ€๊ฒฝ๋œ ์—์ด์ „ํŠธ๋ฅผ Dev1 ๋ธŒ๋žœ์น˜๋กœ ํ‘ธ์‹œํ•ฉ๋‹ˆ๋‹ค.
  5. Prod ๋ธŒ๋žœ์น˜์— ๋Œ€ํ•œ ๋ณ‘ํ•ฉ ์š”์ฒญ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

์‚ฌ์šฉ์ž 2๊ฐ€ ์—์ด์ „ํŠธ ๋ณ€๊ฒฝ์„ ์ œ์•ˆํ•˜๋ ค๊ณ  ํ•˜๋ฉฐ ๋‹ค์Œ ๋‹จ๊ณ„๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

  1. ํ”„๋กœ๋•์…˜ ์—์ด์ „ํŠธ๋ฅผ ์ƒˆ ์—์ด์ „ํŠธ๋กœ ๋‚ด๋ณด๋ƒ…๋‹ˆ๋‹ค.
  2. ์ด ์—์ด์ „ํŠธ ์‚ฌ๋ณธ์„ ์›ํ•˜๋Š” ๋Œ€๋กœ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.
  3. ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ํ…Œ์ŠคํŠธํ•ฉ๋‹ˆ๋‹ค.
  4. ๋ณ€๊ฒฝ๋œ ์—์ด์ „ํŠธ๋ฅผ Dev2 ๋ธŒ๋žœ์น˜๋กœ ํ‘ธ์‹œํ•ฉ๋‹ˆ๋‹ค.
  5. Prod ๋ธŒ๋žœ์น˜์— ๋Œ€ํ•œ ๋ณ‘ํ•ฉ ์š”์ฒญ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

์‚ฌ์šฉ์ž 3์ด ๋‘ ์‚ฌ์šฉ์ž์˜ ์š”์ฒญ ๋ณ‘ํ•ฉ์„ ๊ฒ€ํ† ํ•˜๊ณ  ๋‹ค์Œ ๋‹จ๊ณ„๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

  1. ์ถฉ๋Œ์„ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค.
  2. ์Šน์ธ๋œ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ์ปค๋ฐ‹ํ•ฉ๋‹ˆ๋‹ค.
  3. ํ”„๋กœ๋•์…˜ Git ๋ธŒ๋žœ์น˜๋ฅผ ํ”„๋กœ๋•์…˜ ๋Œ€ํ™”ํ˜• ์—์ด์ „ํŠธ (Dialogflow CX) ์—์ด์ „ํŠธ๋กœ ๋ณต์›ํ•ฉ๋‹ˆ๋‹ค.