2023.10 ~ 2024.03

๋ฌธ์ œ์ 

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

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

  • Terraform์„ ์‚ฌ์šฉํ•ด NHN Cloud์˜ ๋ฆฌ์†Œ์Šค๋ฅผ ์ƒ์„ฑ, ํ…Œ์ŠคํŠธ, ์‚ญ์ œํ•˜๋Š” ์ฝ”๋“œ ์ž‘์„ฑ
  • Github Actions ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ํ†ตํ•ด ์›ํ•˜๋Š” ๋ฆฌ์ „์— Terraform apply ์ˆ˜ํ–‰
  • ์‚ฌ์šฉ์ž๊ฐ€ ์†์‰ฝ๊ฒŒ ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ๋„๋ก ์ฑ—๋ด‡ Slash command๋ฅผ ๊ฐœ๋ฐœํ•ด ์ œ๊ณต

๊ตฌ์กฐ

๊ธฐ์ˆ  ์Šคํƒ

  • Python, Shell Script
  • Terraform
  • Openstack API
  • Jenkins, Github Actions
  • K8s
  • Django

๋„์ „

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

ํ•˜์ง€๋งŒ ์‚ฌ๋‚ด ๊ทœ์ •์ƒ Jenkins๋Š” ๋™์‹œ์— 5๊ฐœ ์ด์ƒ์˜ Job์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์—†๊ณ , ์ผ๋ถ€ ๋ฆฌ์ „์€ ์•„์˜ˆ ํ†ต์‹ ์ด ๋ถˆ๊ฐ€๋Šฅํ•ด ๋ณ„๋„์˜ Jenkins ์„œ๋ฒ„๋ฅผ ์šด์˜ํ•ด์•ผํ•˜๋Š” ๋‹จ์ ์ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.
์ด์— ๋ฐ˜ํ•ด Github Actions๋Š” ํ†ต์‹  ๊ตฌ๊ฐ„์ด ๋น„๊ต์  ์ž์œ ๋กœ์› ๊ณ  Kubernetes๋ฅผ ์—ฐ๋™ํ•˜๋ฉด ์š”์ฒญ์— ๋”ฐ๋ผ Runner Pod์„ ์ƒ์„ฑํ•ด ๋™์‹œ์— ๋ชจ๋“  ๋ฆฌ์ „์„ ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์œผ๋กœ ๊ธฐ๋Œ€ํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ฒฐ๊ณผ์ ์œผ๋กœ ์ œ ์˜ˆ์ƒ์€ ๋งž์•„๋–จ์–ด์กŒ๊ณ  Actions Runner Controller (ARC)๋ฅผ ํ™œ์šฉํ•ด Runner Pod์„ ๋™์ ์œผ๋กœ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด Jenkins๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ ๋Œ€๋น„ ์ตœ๋Œ€ 75%์˜ ์‹œ๊ฐ„์„ ์ ˆ๊ฐํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

๊ฒฐ๊ณผ

  • 20๊ฐœ ์ด์ƒ์˜ ๋ฆฌ์ „์— ๋Œ€ํ•ด 10๋ถ„ ๋‚ด๋กœ ๊ธฐ๋ณธ ์ธํ”„๋ผ ์„œ๋น„์Šค ํ…Œ์ŠคํŠธ ๊ฐ€๋Šฅ
    • ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ, Load Balancer ์ƒ์„ฑ ๋ฐ ์ธ์Šคํ„ด์Šค ๋ฉค๋ฒ„ ์ถ”๊ฐ€, ๊ณต์ธ IP๋กœ ํ†ต์‹  ํ™•์ธ
  • ๋ฐฐํฌ ๊ฒ€์ฆ์— ํ•„์š”ํ•œ ์‹ค ์ „์ฒด์˜ ์—…๋ฌด ์‹œ๊ฐ„์„ ๋งค ์ •๊ธฐ์ ๊ฒ€ ๋‹น 5์‹œ๊ฐ„ ์ด์ƒ ๊ฐ์†Œ
  • ๋ฐฐํฌ ์ž‘์—…์—๋งŒ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๋งค์ผ ์„œ๋น„์Šค๋ฅผ ๊ฒ€์ฆํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•˜๋„๋ก ์šฉ๋„ ํ™•๋Œ€
    • ์„œ๋น„์Šค ์ด์Šˆ ๊ฐ์ง€๊นŒ์ง€ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„ ๊ฐ์†Œ
  • ์›Œํฌํ”Œ๋กœ์šฐ ๋„์ž… ํ›„ 1400ํšŒ ์ด์ƒ์˜ Job ์ˆ˜ํ–‰ (์ฃผ๋‹น 10 ~ 20ํšŒ ์ด์ƒ)

๊ธฐ์—ฌ๋„

  • Github Actions ์›Œํฌํ”Œ๋กœ์šฐ ๊ฐœ๋ฐœ (100%)
    • ๊ณต๊ณต, ํ์‡„๋ง ํ™˜๊ฒฝ ๋“ฑ ๋ณตํ•ฉ์ ์ธ ๋ฆฌ์ „๋„ ํ•œ ๋ฒˆ์˜ ์›Œํฌํ”Œ๋กœ์šฐ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ฐœ๋ฐœ
    • Schedule Job ๊ธฐ๋Šฅ์œผ๋กœ ๋งค์ผ ์˜ค์ „์— ์ „์ฒด์ ์ธ ์„œ๋น„์Šค๋ฅผ ๊ฒ€์ฆํ•˜๋„๋ก ๊ตฌ์„ฑ
  • K8s ์—ฐ๋™ ๋ฐ Actions Runner Controller ๋„์ž… (100%)
    • Terraform ๋ชจ๋“ˆ์„ ํฌํ•จํ•œ ์ปค์Šคํ…€ ์ด๋ฏธ์ง€๋ฅผ ๋นŒ๋“œํ•ด Runner Pod ์ƒ์„ฑ
  • Terraform ์ฝ”๋“œ ๊ฐœ๋ฐœ (30%)
    • Openstack provider๋ฅผ ํ™œ์šฉํ•ด NHN Cloud ๋ฆฌ์†Œ์Šค๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ฐœ๋ฐœ
    • ํ์‡„๋ง์—์„œ๋„ ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ๋„๋ก Local provider ๊ตฌ์„ฑ
  • REST API ์„œ๋ฒ„ ๊ฐœ๋ฐœ (30%)
    • ๋ฉ”์„ธ์ง€ ์Šฌ๋ž˜์‹œ ์ปค๋งจ๋“œ, ์›นํ›… ๋“ฑ ์š”์ฒญ์„ ๋ฐ›๊ณ  ๊ฒฐ๊ณผ๋ฅผ ๋ฆฌํ„ดํ•˜๊ธฐ ์œ„ํ•œ Django ์„œ๋ฒ„ ๊ฐœ๋ฐœ