๊ณ ๊ฐ ํ”Œ๋žซํผ์—์„œ ์ง€์†์ ์ธ ๋ฐฐํฌ ๊ตฌํ˜„

True Engineering์—์„œ๋Š” ๊ณ ๊ฐ ์„œ๋ฒ„์— ์ง€์†์ ์œผ๋กœ ์—…๋ฐ์ดํŠธ๋ฅผ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•œ ํ”„๋กœ์„ธ์Šค๋ฅผ ์„ค์ •ํ–ˆ์œผ๋ฉฐ ์ด ๊ฒฝํ—˜์„ ๊ณต์œ ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

์šฐ์„  ์šฐ๋ฆฌ๋Š” ๊ณ ๊ฐ์„ ์œ„ํ•œ ์˜จ๋ผ์ธ ์‹œ์Šคํ…œ์„ ๊ฐœ๋ฐœํ•˜๊ณ  ์ด๋ฅผ ์ž์ฒด Kubernetes ํด๋Ÿฌ์Šคํ„ฐ์— ๋ฐฐํฌํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด์ œ ์šฐ๋ฆฌ์˜ ๊ณ ๋ถ€ํ•˜ ์†”๋ฃจ์…˜์€ ๊ณ ๊ฐ์˜ ํ”Œ๋žซํผ์œผ๋กœ ์ด๋™ํ–ˆ์œผ๋ฉฐ, ์ด๋ฅผ ์œ„ํ•ด ์™„์ „ ์ž๋™ ์ง€์†์  ๋ฐฐํฌ ํ”„๋กœ์„ธ์Šค๋ฅผ ์„ค์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋•๋ถ„์— ์šฐ๋ฆฌ๋Š” ์ œํ’ˆ ํ™˜๊ฒฝ์— ๋Œ€ํ•œ ๋ณ€ํ™”๋ฅผ ์ „๋‹ฌํ•˜๋Š” ์ถœ์‹œ ๊ธฐ๊ฐ„์„ ๋‹จ์ถ•ํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด ๋ฌธ์„œ์—์„œ๋Š” CD(์ง€์†์  ๋ฐฐํฌ) ํ”„๋กœ์„ธ์Šค์˜ ๋ชจ๋“  ๋‹จ๊ณ„ ๋˜๋Š” ๊ณ ๊ฐ ํ”Œ๋žซํผ์— ๋Œ€ํ•œ ์—…๋ฐ์ดํŠธ ์ œ๊ณต์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

  1. ์ด ๊ณผ์ •์€ ์–ด๋–ป๊ฒŒ ์‹œ์ž‘๋˜๋‚˜์š”?
  2. ๊ณ ๊ฐ์˜ Git ์ €์žฅ์†Œ์™€ ๋™๊ธฐํ™”
  3. ๋ฐฑ์—”๋“œ์™€ ํ”„๋ก ํŠธ์—”๋“œ์˜ ์กฐ๋ฆฝ,
  4. ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ์—์„œ ์ž๋™ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฐฐํฌ
  5. Prod์— ์ž๋™ ๋ฐฐํฌ

๊ทธ ๊ณผ์ •์—์„œ ์„ค์ • ์„ธ๋ถ€์ •๋ณด๋ฅผ ๊ณต์œ ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

๊ณ ๊ฐ ํ”Œ๋žซํผ์—์„œ ์ง€์†์ ์ธ ๋ฐฐํฌ ๊ตฌํ˜„

1. CD ์‹œ์ž‘

์ง€์†์ ์ธ ๋ฐฐํฌ๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ Git ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์˜ ๋ฆด๋ฆฌ์Šค ๋ถ„๊ธฐ์— ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ํ‘ธ์‹œํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค.

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

์šฐ๋ฆฌ๋Š” ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์ด์œ ๋กœ ํ•˜๋‚˜์˜ ์ €์žฅ์†Œ๋ฅผ ํ†ตํ•ด ์ž‘์—…์„ ๊ตฌ์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค.

  • ๊ฐœ๋ฐœ ์šฉ์ด์„ฑ - ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ํ™œ๋ฐœํžˆ ๊ฐœ๋ฐœ ์ค‘์ด๋ฏ€๋กœ ๋ชจ๋“  ์ฝ”๋“œ๋ฅผ ํ•œ ๋ฒˆ์— ์ž‘์—…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋‹จ์ผ ์‹œ์Šคํ…œ์œผ๋กœ์„œ์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋ชจ๋“  ํ…Œ์ŠคํŠธ๋ฅผ ํ†ต๊ณผํ•˜๊ณ  ๊ณ ๊ฐ์˜ ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์— ์ œ๊ณต๋˜๋„๋ก ๋ณด์žฅํ•˜๋Š” ๋‹จ์ผ CI/CD ํŒŒ์ดํ”„๋ผ์ธ์ž…๋‹ˆ๋‹ค.
  • ๋ฒ„์ „์˜ ํ˜ผ๋ž€์„ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค. ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ๋ฒ„์ „ ๋งต์„ ์ €์žฅํ•˜๊ณ  Helm ์Šคํฌ๋ฆฝํŠธ์—์„œ ๊ฐ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค์— ๋Œ€ํ•œ ๊ตฌ์„ฑ์„ ์„ค๋ช…ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

2. ๊ณ ๊ฐ ์†Œ์Šค ์ฝ”๋“œ์˜ Git ์ €์žฅ์†Œ์™€ ๋™๊ธฐํ™”

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

๊ฐœ๋ฐœ ๋ฐ ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•ด์„œ๋Š” ์ž์ฒด ํ™˜๊ฒฝ์ด ํ•„์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ณ ๊ฐ์˜ ์ €์žฅ์†Œ์™€ ์ง์ ‘ ์ž‘์—…ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ด๋Ÿฌํ•œ ๋ชฉ์ ์œผ๋กœ Git ์ €์žฅ์†Œ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” Git ์ €์žฅ์†Œ์™€ ๋™๊ธฐํ™”๋ฉ๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์ž๊ฐ€ ์ €์žฅ์†Œ์˜ ์ ์ ˆํ•œ ๋ถ„๊ธฐ์— ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๊ฒŒ์‹œํ•˜๋ฉด GitLab์€ ์ฆ‰์‹œ ์ด๋Ÿฌํ•œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๊ณ ๊ฐ์—๊ฒŒ ํ‘ธ์‹œํ•ฉ๋‹ˆ๋‹ค.

๊ณ ๊ฐ ํ”Œ๋žซํผ์—์„œ ์ง€์†์ ์ธ ๋ฐฐํฌ ๊ตฌํ˜„

๊ทธ๋Ÿฐ ๋‹ค์Œ ์กฐ๋ฆฝ์„ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ฐฑ์—”๋“œ ๋ฐ ํ”„๋ŸฐํŠธ์—”๋“œ ์กฐ๋ฆฝ, ํ…Œ์ŠคํŠธ ๋ฐ ํ”„๋กœ๋•์…˜ ์ „๋‹ฌ ๋“ฑ ์—ฌ๋Ÿฌ ๋‹จ๊ณ„๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค.

3. ๋ฐฑ์—”๋“œ์™€ ํ”„๋ก ํŠธ์—”๋“œ ์กฐ๋ฆฝ

๋ฐฑ์—”๋“œ์™€ ํ”„๋ŸฐํŠธ์—”๋“œ ๊ตฌ์ถ•์€ GitLab Runner ์‹œ์Šคํ…œ์—์„œ ์ˆ˜ํ–‰๋˜๋Š” ๋‘ ๊ฐ€์ง€ ๋ณ‘๋ ฌ ์ž‘์—…์ž…๋‹ˆ๋‹ค. ์›๋ž˜ ์–ด์…ˆ๋ธ”๋ฆฌ ๊ตฌ์„ฑ์€ ๋™์ผํ•œ ์ €์žฅ์†Œ์— ์žˆ์Šต๋‹ˆ๋‹ค.

GitLab์—์„œ ๋นŒ๋“œํ•˜๊ธฐ ์œ„ํ•œ YAML ์Šคํฌ๋ฆฝํŠธ ์ž‘์„ฑ์„ ์œ„ํ•œ ํŠœํ† ๋ฆฌ์–ผ.

GitLab Runner๋Š” ํ•„์š”ํ•œ ์ €์žฅ์†Œ์—์„œ ์ฝ”๋“œ๋ฅผ ๊ฐ€์ ธ์™€์„œ Java ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋นŒ๋“œ ๋ช…๋ น์œผ๋กœ ์กฐํ•ฉํ•˜์—ฌ Docker ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ๋กœ ๋ณด๋ƒ…๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—์„œ๋Š” ๋ฐฑ์—”๋“œ์™€ ํ”„๋ŸฐํŠธ์—”๋“œ๋ฅผ ์กฐํ•ฉํ•˜๊ณ  Docker ์ด๋ฏธ์ง€๋ฅผ ์–ป์–ด ๊ณ ๊ฐ ์ธก ์ €์žฅ์†Œ์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” Docker ์ด๋ฏธ์ง€๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด Gradle ํ”Œ๋Ÿฌ๊ทธ์ธ.

์ด๋ฏธ์ง€ ๋ฒ„์ „์„ Docker์— ๊ฒŒ์‹œ๋  ๋ฆด๋ฆฌ์Šค ๋ฒ„์ „๊ณผ ๋™๊ธฐํ™”ํ•ฉ๋‹ˆ๋‹ค. ์›ํ™œํ•œ ์ž‘๋™์„ ์œ„ํ•ด ๋ช‡ ๊ฐ€์ง€ ์กฐ์ •์„ ์ˆ˜ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค.

1. ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ๊ณผ ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ ๊ฐ„์— ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๋‹ค์‹œ ๋นŒ๋“œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋™์ผํ•œ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ๊ณผ ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ ๋ชจ๋‘์—์„œ ๋‹ค์‹œ ๋นŒ๋“œํ•˜์ง€ ์•Š๊ณ ๋„ ๋ชจ๋“  ์„ค์ •, ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ๋ฐ ์„œ๋น„์Šค์™€ ์ž‘๋™ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋งค๊ฐœ๋ณ€์ˆ˜ํ™”๋ฅผ ์ˆ˜ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค.

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

๋ช…๋ น ์‹คํ–‰ ๊ฒฐ๊ณผ์—์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฒ„์ „์„ ์–ป์Šต๋‹ˆ๋‹ค.
git describe --tags --abbrev=7.

4. ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ(UAT)์— ๋Œ€ํ•œ ๋ชจ๋“  ๋ณ€๊ฒฝ ์‚ฌํ•ญ ์ž๋™ ๋ฐฐํฌ

์ด ๋นŒ๋“œ ์Šคํฌ๋ฆฝํŠธ์˜ ๋‹ค์Œ ๋‹จ๊ณ„๋Š” K8S ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์ž๋™์œผ๋กœ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋Š” ์ „์ฒด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋นŒ๋“œ๋˜๊ณ  ๋ชจ๋“  ์•„ํ‹ฐํŒฉํŠธ๊ฐ€ Docker ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์— ๊ฒŒ์‹œ๋œ ๊ฒฝ์šฐ์— ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์ดํ›„ ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ ์—…๋ฐ์ดํŠธ๊ฐ€ ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค.

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

์šฐ๋ฆฌ๋Š” ์–ด์…ˆ๋ธ”๋ฆฌ์™€ ํ•จ๊ป˜ K8S ํด๋Ÿฌ์Šคํ„ฐ ๊ตฌ์„ฑ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋‹ค์Œ ๋‹จ๊ณ„๋Š” configMap, ๋ฐฐํฌ, ์„œ๋น„์Šค, ๋น„๋ฐ€ ๋ฐ ๋ณ€๊ฒฝ๋œ ๊ธฐํƒ€ K8S ๊ตฌ์„ฑ์„ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ ๋‹ค์Œ Helm์€ ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ์—์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ž์ฒด์˜ RollOut ์—…๋ฐ์ดํŠธ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ํ”„๋กœ๋•์…˜์— ๋ฐฐํฌ๋˜๊ธฐ ์ „์ž…๋‹ˆ๋‹ค. ์ด๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ์— ํฌํ•จ๋œ ๋น„์ฆˆ๋‹ˆ์Šค ๊ธฐ๋Šฅ์„ ์ˆ˜๋™์œผ๋กœ ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๊ธฐ ์œ„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

5. Prod์— ๋Œ€ํ•œ ๋ชจ๋“  ๋ณ€๊ฒฝ ์‚ฌํ•ญ ์ž๋™ ๋ฐฐํฌ

ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์— ์—…๋ฐ์ดํŠธ๋ฅผ ๋ฐฐํฌํ•˜๋ ค๋ฉด GitLab์—์„œ ๋ฒ„ํŠผ ํ•˜๋‚˜๋งŒ ํด๋ฆญํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์— ์ฆ‰์‹œ ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค.

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

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

๊ฐ€์žฅ ์–ด๋ ค์› ๋˜ ์ ์€ ์‚ฌ์šฉ๋˜๋Š” ๋ชจ๋“  ์„œ๋น„์Šค์™€ ํ™˜๊ฒฝ์— ์˜์กดํ•˜๋Š” ๋ณ€์ˆ˜๋ฅผ ๋งค๊ฐœ๋ณ€์ˆ˜ํ™”ํ•˜๊ณ  ์ด๋ฅผ Helm์šฉ ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ๋ฐ ํ™˜๊ฒฝ ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ์„ค๋ช…-๊ตฌ์„ฑ์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ฒƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค.

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„ค์ •์€ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ํ•ด๋‹น ๊ฐ’์€ Go ํ…œํ”Œ๋ฆฟ์„ ์‚ฌ์šฉํ•˜์—ฌ ํ…œํ”Œ๋ฆฟํ™”๋˜๋Š” K8S configmap์„ ์‚ฌ์šฉํ•˜์—ฌ ์ปจํ…Œ์ด๋„ˆ์— ์„ค์ •๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ๋„๋ฉ”์ธ ์ด๋ฆ„์œผ๋กœ ์„ค์ •ํ•˜๋Š” ์ž‘์—…์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

APP_EXTERNAL_DOMAIN: {{ (pluck .Values.global.env .Values.app.properties.app_external_domain | first) }}

.Values.global.env โ€“ ์ด ๋ณ€์ˆ˜๋Š” ํ™˜๊ฒฝ(prod, stage, UAT)์˜ ์ด๋ฆ„์„ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
.Values.app.properties.app_external_domain โ€“ ์ด ๋ณ€์ˆ˜์—์„œ๋Š” .Values.yaml ํŒŒ์ผ์— ์›ํ•˜๋Š” ๋„๋ฉ”์ธ์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์—…๋ฐ์ดํŠธํ•  ๋•Œ Helm์€ ํ…œํ”Œ๋ฆฟ์—์„œ configmap.yaml ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๊ณ  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์—…๋ฐ์ดํŠธ๊ฐ€ ์‹œ์ž‘๋˜๋Š” ํ™˜๊ฒฝ์— ๋”ฐ๋ผ APP_EXTERNAL_DOMAIN ๊ฐ’์„ ์›ํ•˜๋Š” ๊ฐ’์œผ๋กœ ์ฑ„์›๋‹ˆ๋‹ค. ์ด ๋ณ€์ˆ˜๋Š” ์ด๋ฏธ ์ปจํ…Œ์ด๋„ˆ์— ์„ค์ •๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๊ฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ™˜๊ฒฝ์€ ์ด ๋ณ€์ˆ˜์— ๋Œ€ํ•ด ์„œ๋กœ ๋‹ค๋ฅธ ๊ฐ’์„ ๊ฐ–์Šต๋‹ˆ๋‹ค.

๋น„๊ต์  ์ตœ๊ทผ์—๋Š” configMaps ์ž‘์—…์„ ํฌํ•จํ•˜์—ฌ K8S ์ง€์›์ด Spring Cloud์— ๋‚˜ํƒ€๋‚ฌ์Šต๋‹ˆ๋‹ค. ์Šคํ”„๋ง ํด๋ผ์šฐ๋“œ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค. ํ”„๋กœ์ ํŠธ๊ฐ€ ์ ๊ทน์ ์œผ๋กœ ๊ฐœ๋ฐœ๋˜๊ณ  ๊ธ‰๊ฒฉํ•˜๊ฒŒ ๋ณ€ํ™”ํ•˜๋Š” ๋™์•ˆ ํ”„๋กœ๋•์…˜์—์„œ๋Š” ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์šฐ๋ฆฌ๋Š” ์ƒํƒœ๋ฅผ ์ ๊ทน์ ์œผ๋กœ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๊ณ  ์ด๋ฅผ DEV ๊ตฌ์„ฑ์— ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์•ˆ์ •ํ™”๋˜๋Š” ๋Œ€๋กœ ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์‚ฌ์šฉ์—์„œ ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์‚ฌ์šฉ์œผ๋กœ ์ „ํ™˜ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

์ „์ฒด๋กœ

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

๊ณ ๊ฐ ํ”Œ๋žซํผ์—์„œ ์ง€์†์ ์ธ ๋ฐฐํฌ ๊ตฌํ˜„

ํ–ฅํ›„ ๊ณ„ํš: ์ž๋™ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜

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

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

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

K8S ์ž‘์—…์„ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์„ ์ž๋™ํ™”ํ•˜๊ณ  ์ด๋ฅผ CD ํ”„๋กœ์„ธ์Šค์— ํ†ตํ•ฉํ•  ๊ณ„ํš์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์šฐ๋ฆฌ๋Š” ์ด ๊ฒฝํ—˜์„ Habrรฉ์—์„œ ํ™•์‹คํžˆ ๊ณต์œ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : habr.com

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€