2023.09 ~ 2024.11

๋ฌธ์ œ์ 

  • Saltstack์„ ์‚ฌ์šฉํ•œ ๋‹จ์ผ ์ฝ”๋“œ๋กœ ์ธํ”„๋ผ๋ฅผ ๊ด€๋ฆฌ
  • ๋ฆฌ์ „ ์ฆ๊ฐ€์— ๋”ฐ๋ฅธ ์ฝ”๋“œ ๊ฒ€์ฆ workload ์ฆ๊ฐ€, ๊ฒฐ๊ณผ์ ์œผ๋กœ ๋‚ฎ์€ ์ƒ์‚ฐ์„ฑ ์•ผ๊ธฐ
  • ๊ฒ€์ฆ๋˜์ง€ ์•Š์€ ๋ณ€๊ฒฝ์‚ฌํ•ญ์œผ๋กœ ์ธํ•œ ์‹œ์Šคํ…œ ์žฅ์•  ๋ฐœ์ƒ

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

  • ๋ชจ๋“  Salt master ์„œ๋ฒ„๋ฅผ self hosted runner๋กœ ๋“ฑ๋ก
  • PR์ด ๋“ฑ๋ก๋˜๋ฉด ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ํŒŒ์‹ฑ, ์ ์ ˆํ•œ ๋ฆฌ์ „๊ณผ ์„œ๋ฒ„๋ฅผ ๋Œ€์ƒ์œผ๋กœ ๋ฐฐํฌ ์ฝ”๋“œ Dry Run
  • ๊ฒฐ๊ณผ๋ฅผ hashing ํ•ด์„œ GUI ๊ธฐ๋ฐ˜์œผ๋กœ ๊ณตํ†ต๋œ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ์šฉ์ดํ•˜๊ฒŒ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ฐ€๊ณต
  • ์ฝ”๋“œ ๊ฒ€์ฆ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, Github Actions workflow dispatch๋กœ ์ง์ ‘ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ณ ๋„ํ™”

๊ตฌ์กฐ

๊ธฐ์ˆ  ์Šคํƒ

  • Python, Shell Script
  • Github Actions

๋„์ „

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

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

๊ฒฐ๊ณผ

  • ๋ฐฐํฌ ์ฝ”๋“œ ๊ฒ€์ฆ์— ํ•„์š”ํ•œ ํŒ€ ์ „์ฒด์˜ ์—…๋ฌด ์‹œ๊ฐ„์„ ์ฃผ๋‹น 50์‹œ๊ฐ„ ์ด์ƒ ๊ฐ์†Œ
  • ์›Œํฌํ”Œ๋กœ์šฐ ๋„์ž… ํ›„ 6000ํšŒ ์ด์ƒ์˜ Job ์ˆ˜ํ–‰ (์ฃผ๋‹น 60 ~ 100ํšŒ ์ด์ƒ)
  • CLI๊ฐ€ ์•„๋‹Œ GUI ๊ธฐ๋ฐ˜์˜ ๋ฐฐํฌ๋กœ ํŒ€ ๋‚ด ํ‘œ์ค€ ์ ˆ์ฐจ ๋ณ€๊ฒฝ
  • ๊ฒ€์ฆ๋œ ํšจ์œจ์„ฑ๊ณผ ์•ˆ์ •์„ฑ์œผ๋กœ Production ํ™˜๊ฒฝ์˜ ๋ฐฐํฌ์— ์ ์šฉ

๊ธฐ์—ฌ๋„

  • CI/CD ์›Œํฌํ”Œ๋กœ์šฐ ์„ค๊ณ„ ๋ฐ ๊ฐœ๋ฐœ (100%)
    • Artifact, Secrets, Markdown summary ๋“ฑ Github Action nativeํ•˜๊ฒŒ ์›Œํฌํ”Œ๋กœ์šฐ ๊ฐœ๋ฐœ
    • Environment ํ•„๋“œ๋ฅผ ์‚ฌ์šฉํ•ด Staging / Production ๋ฐฐํฌ ๋‹จ๊ณ„ ๊ตฌ๋ถ„
    • Schdule Job, Workflow dispatch ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ด ์—ฌ๋Ÿฌ ๋ฐฉ์‹์œผ๋กœ ์ฝ”๋“œ๋ฅผ ๊ฒ€์ฆํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ฐœ๋ฐœ
  • ์ฝ”๋“œ ๊ฒ€์ฆ ๊ฒฐ๊ณผ๋ฅผ ์ทจํ•ฉ, ์š”์•ฝํ•ด ๋ณด์—ฌ์ค„ ์ˆ˜ ์žˆ๋Š” Python ์Šคํฌ๋ฆฝํŠธ ๊ฐœ๋ฐœ (40%)
    • Git diff ๊ธฐ๋ฐ˜์œผ๋กœ ์ฝ”๋“œ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ํŒŒ์‹ฑํ•ด ์–ด๋А ๋ฆฌ์ „์˜ ์„œ๋ฒ„๋ฅผ ๋Œ€์ƒ์œผ๋กœ ๊ฒ€์ฆํ• ์ง€ ํ™•์ธํ•˜๋Š” ์ฝ”๋“œ ๊ฐœ๋ฐœ
    • ๋ฐฐํฌ ๊ฒฐ๊ณผ์˜ hash ๊ฐ’์„ ๋น„๊ตํ•ด ๋™์ผํ•œ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ํ•˜๋‚˜์˜ ๋‹จ์œ„๋กœ ์กฐํšŒํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ฐ„์†Œํ™”