Search

์ด์šฐ์„ | Portfolio

Projects

ย Project 1: COME2US

Role: Infra & DevOps โ€” ์•„ํ‚คํ…์ฒ˜ ์„ค๊ณ„ ์ฃผ๋„ | 1โ€ข2์ฐจ ์ธํ”„๋ผ ๋‹จ๋… ๊ตฌ์ถ•, 3์ฐจ ์„ค๊ณ„ ์ฃผ๋„โ€ข๊ตฌ์ถ• | CI/CD ๊ตฌ์ถ•โ€ข์šด์˜ ์ฃผ๋„ | Istio ๋„์ž… ์ฃผ๋„ Period: 2025.10 โ€“ 2025.12 Key Tech: AWS EKS, Istio, Terraform, Jenkins, ArgoCD Links: [GitHub], [์•„ํ‚คํ…์ฒ˜ ์„ค๊ณ„], [RCA Report]
ํ”„๋กœ์ ํŠธ ์†Œ๊ฐœ: ํŠธ๋ž˜ํ”ฝ ์ฆ๊ฐ€ ์ƒํ™ฉ์„ ๊ฐ€์ •ํ•œ MSA ๊ธฐ๋ฐ˜ ์ „์ž์ƒ๊ฑฐ๋ž˜ ํ”Œ๋žซํผ์œผ๋กœ, ์šด์˜ ๋ณต์žก๋„์™€ ๋ณ€๊ฒฝ ๋น„์šฉ์„ ๋‚ฎ์ถ”๊ธฐ ์œ„ํ•ด ์•„ํ‚คํ…์ฒ˜๋ฅผ 3๋‹จ๊ณ„์— ๊ฑธ์ณ ๊ณ ๋„ํ™”ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ฐ ๋‹จ๊ณ„๋Š” ์ด์ „ ๊ตฌ์กฐ์˜ ํ•œ๊ณ„๋ฅผ ๊ฒฝํ—˜ํ•œ ๋’ค ๋‹ค์Œ ์ „ํ™˜์˜ ๊ทผ๊ฑฐ๋กœ ์‚ผ๋Š” ๋ฐฉ์‹์œผ๋กœ ์ง„ํ–‰๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

1. ์•„ํ‚คํ…์ฒ˜ ๊ณ ๋„ํ™”: ๊ฐ ๋‹จ๊ณ„์˜ ํ•œ๊ณ„๋ฅผ ๋‹ค์Œ ์ „ํ™˜์˜ ๊ทผ๊ฑฐ๋กœ

โ€œ๋‹จ์ˆœํžˆ ๊ธฐ์ˆ ์„ ๊ต์ฒดํ•œ ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ๊ฐ ๊ตฌ์กฐ๊ฐ€ ๋งŒ๋“ค์–ด๋‚ธ ์šด์˜ ๋ฌธ์ œ๋ฅผ ๊ฒฝํ—˜ํ•˜๊ณ  ๊ทธ ๊ทผ๊ฑฐ๋กœ ๋‹ค์Œ ๋‹จ๊ณ„๋ฅผ ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.โ€
[์ด๋ฏธ์ง€ 1] COME2US ์•„ํ‚คํ…์ฒ˜ โ€” Event-Driven MSA ์•„ํ‚คํ…์ฒ˜ (AWS EKS, Kafka, Istio)
Phase 1 โ€” Monolith
โ€ข
๋‹จ์ผ EC2์— ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋„์ปค ์ปจํ…Œ์ด๋„ˆ๋กœ ๋ฐฐํฌํ•˜๋Š” ๊ตฌ์กฐ๋กœ MVP๋ฅผ ๋น ๋ฅด๊ฒŒ ๋ฐฐํฌ
โ€ข
ํ•œ๊ณ„: ํŠธ๋ž˜ํ”ฝ ์ฆ๊ฐ€ ์‹œ ์ˆ˜์ง ํ™•์žฅ(Scale-up)์— ์˜์กดํ•˜๋ฉฐ, ์„œ๋น„์Šค ์ผ๋ถ€ ์žฅ์• ๊ฐ€ ์ „์ฒด ๋‹ค์šด์œผ๋กœ ํ™•์‚ฐ๋˜๋Š” ๊ตฌ์กฐ์  ์ทจ์•ฝ์  ํ™•์ธ
โ†’ ์„œ๋น„์Šค ๋…๋ฆฝ์„ฑ๊ณผ ์ˆ˜ํ‰ ํ™•์žฅ์„ ์œ„ํ•ด MSA + ECS Fargate๋กœ ์ „ํ™˜ ๊ฒฐ์ •
Phase 2 โ€” ECS MSA
โ€ข
์„œ๋น„์Šค๋ฅผ ๋…๋ฆฝ ์ปจํ…Œ์ด๋„ˆ๋กœ ๋ถ„๋ฆฌํ•˜์—ฌ ๊ฐœ๋ณ„ ํ™•์žฅ๊ณผ ์žฅ์•  ๊ฒฉ๋ฆฌ์— ์„ฑ๊ณต
โ€ข
ํ•œ๊ณ„:
โ—ฆ
ECS Fargate๋Š” task ๋‚ด๋ถ€ IP์™€ ์™ธ๋ถ€ ๋…ธ์ถœ IP๊ฐ€ ๋‹ฌ๋ผ Eureka ์„œ๋น„์Šค ๋””์Šค์ปค๋ฒ„๋ฆฌ๊ฐ€ ์ •์ƒ ๋™์ž‘ํ•˜์ง€ ์•Š๋Š” ๊ตฌ์กฐ์  ๋ฌธ์ œ ๋ฐœ์ƒ (ํ™˜๊ฒฝ๋ณ€์ˆ˜๋กœ hostname์„ ์ง์ ‘ ์ฃผ์ž…ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ž„์‹œ ํ•ด๊ฒฐ)
โ—ฆ
์„œ๋น„์Šค๊ฐ€ ๋Š˜์–ด๋‚ ์ˆ˜๋ก ์„œ๋น„์Šค๋งˆ๋‹ค hostname์„ ๋ณ„๋„ ๊ด€๋ฆฌํ•ด์•ผ ํ•˜๋Š” ์šด์˜ ํ™•์žฅ์„ฑ/๊ด€๋ฆฌ์„ฑ ํ•œ๊ณ„ ์ธ์‹
โ†’ Spring Cloud ์ปดํฌ๋„ŒํŠธ ์˜์กด ๊ตฌ์กฐ์˜ ํ•œ๊ณ„๋ฅผ ๋ฒ—์–ด๋‚˜๊ธฐ ์œ„ํ•ด Kubernetes ๋„ค์ดํ‹ฐ๋ธŒ ํ™˜๊ฒฝ์œผ๋กœ ์ „ํ™˜ ๊ฒฐ์ •
Phase 3 โ€” EKS Cloud-Native
โ€ข
Kubernetes ์„ ์–ธํ˜• ๋ฆฌ์†Œ์Šค๋กœ ๋ฐฐํฌโ€ข์ •์ฑ…์„ ํ‘œ์ค€ํ™”ํ•˜๊ณ , Istio Service Mesh๋กœ ๊ณตํ†ต ์ •์ฑ…์„ ํ”Œ๋žซํผ ๊ณ„์ธต์œผ๋กœ ์ด๊ด€
โ€ข
์ธ์ฆ/์ธ๊ฐ€โ€ข๋ผ์šฐํŒ… ์ •์ฑ… ๋ณ€๊ฒฝ์ด ์„œ๋น„์Šค ์žฌ๋ฐฐํฌ ์—†์ด Manifest PR โ†’ ArgoCD Sync ๋‹จ์œ„๋กœ ์ฒ˜๋ฆฌ
โ†’ Spring Cloud ์ปดํฌ๋„ŒํŠธ ์™„์ „ ์ œ๊ฑฐ, ์ •์ฑ… ๋ณ€๊ฒฝ ๋ฆฌ๋“œํƒ€์ž„ ๋‹จ์ถ•

2. Service Mesh ๋„์ž…: Spring Cloud ์ข…์† ์ œ๊ฑฐ์™€ ์šด์˜ ๋ฆฌ์Šคํฌ ํ•ด์†Œ

โ€œIstio๋ฅผ ๋‹จ์ˆœํ•œ ํ†ต์‹  ํ”„๋ก์‹œ๊ฐ€ ์•„๋‹Œ ์ •์ฑ… ์ œ์–ด ํ‰๋ฉด(Control Plane)์œผ๋กœ ์‚ฌ์šฉํ•ด, ์ธ์ฆโ€ข์ธ๊ฐ€โ€ข๋ผ์šฐํŒ… ์ •์ฑ…์„ Git ๊ธฐ๋ฐ˜ ์„ ์–ธํ˜• ๋ฆฌ์†Œ์Šค(CRD)๋กœ ์ „ํ™˜ํ–ˆ์Šต๋‹ˆ๋‹ค.โ€
๋ฐฐ๊ฒฝ
ECS ํ™˜๊ฒฝ์—์„œ ๋ฐœ์ƒํ•œ Eureka IP ๋ถˆ์ผ์น˜ ๋ฌธ์ œ๋ฅผ ๊ณ„๊ธฐ๋กœ Spring Cloud ์ปดํฌ๋„ŒํŠธ ์ œ๊ฑฐ๋ฅผ ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ผ์šฐํŒ… ๋Œ€์ฒด์ œ๋กœ Kubernetes Ingress๊ฐ€ ์ž์—ฐ์Šค๋Ÿฌ์šด ์„ ํƒ์ง€๋กœ ๋– ์˜ฌ๋ž๊ณ , ๋™์‹œ์— ArgoCD ๋„์ž…๊ณผ ํ•จ๊ป˜ Canary ๋ฐฐํฌ๋ฅผ ๋ชฉํ‘œ๋กœ ์„ค์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. Canary ๋ฐฐํฌ์™€ Spring Cloud Gateway๊ฐ€ ์ˆ˜ํ–‰ํ•˜๋˜ ์ธ์ฆโ€ข์ธ๊ฐ€โ€ขํ•„ํ„ฐ๋ง์„ ํ”Œ๋žซํผ ๋ ˆ์ด์–ด์—์„œ ํ†ตํ•ฉ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ Istio๋ฅผ ํ™•์ธํ•˜์˜€์Šต๋‹ˆ๋‹ค. ๊ธˆ์ „ ๊ฑฐ๋ž˜๊ฐ€ ํฌํ•จ๋œ E-Commerce ์„œ๋น„์Šค ํŠน์„ฑ ์ƒ ์„œ๋น„์Šค ๊ฐ„ ํ†ต์‹  ์•”ํ˜ธํ™”๊ฐ€ ๋ณด์•ˆ์ ์œผ๋กœ ์œ ์˜๋ฏธํ•˜๋‹ค๊ณ  ํŒ๋‹จํ•˜์—ฌ mTLS ์ ์šฉ์„ ํ†ตํ•œ ์„œ๋น„์Šค ๊ฐ„ ํ†ต์‹  ๋ณด์•ˆ ๊ฐ•ํ™”๋ฅผ ์ถ”๊ฐ€ ๋ชฉํ‘œ๋กœ ์„ค์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.
๊ตฌํ˜„
โ€ข
AuthN/AuthZ Offloading: Ingress์—์„œ RequestAuthentication(JWKS) + AuthorizationPolicy๋กœ JWT ๊ฒ€์ฆ/๊ถŒํ•œ์„ ์ฒ˜๋ฆฌํ•ด ์„œ๋น„์Šค ์ฝ”๋“œ์˜ ์ธ์ฆ ์˜์กด์„ ์ œ๊ฑฐ
โ€ข
Traffic Management: Gateway/VirtualService๋กœ ๋ผ์šฐํŒ…/๋ณด์•ˆ ์ •์ฑ…์„ ์„ ์–ธ์ ์œผ๋กœ ๊ด€๋ฆฌํ•ด, ์ •์ฑ… ๋ณ€๊ฒฝ์„ ์„œ๋น„์Šค ๋ฐฐํฌ๊ฐ€ ์•„๋‹Œ โ€œManifest PR โ†’ ArgoCD Syncโ€ ๋‹จ์œ„๋กœ ์ „ํ™˜
โ€ข
Observability ์—ฐ๋™: Istio ๋„์ž…์œผ๋กœ ์ธํ•œ ์šด์˜ ๋ณต์žก๋„ ์ฆ๊ฐ€๋ฅผ ์ธ์ง€ํ•˜๊ณ , OTel ํŠธ๋ ˆ์ด์‹ฑ ์—ฐ๋™ ์„ค์ •์„ ํ†ตํ•ด Mesh ๋‚ด ํ˜ธ์ถœ ๊ฒฝ๋กœ ๊ฐ€์‹œ์„ฑ ํ™•๋ณด
[์ด๋ฏธ์ง€ 2] Istio ์„œ๋น„์Šค ํ๋ฆ„
[์ด๋ฏธ์ง€ 3] Istio JWT ์ธ์ฆ ํ๋ฆ„
Trade-off
Istio ๋„์ž…์€ ์šด์˜ ๋ณต์žก๋„/ํ•™์Šต๋น„์šฉ์˜ ์ฆ๊ฐ€๋ฅผ ์ˆ˜๋ฐ˜ํ•ฉ๋‹ˆ๋‹ค. ์˜ค๋ฒ„์—”์ง€๋‹ˆ์–ด๋ง์ด ๋  ์ˆ˜ ์žˆ์ง€๋งŒ, ์„œ๋น„์Šค ํ™•์žฅ ๋‹จ๊ณ„์—์„œ ์ •์ฑ… ๋ณ€๊ฒฝ ๋น„์šฉ๊ณผ ๊ด€์ธก ๊ณต๋ฐฑ์ด ์šด์˜ ๋ฆฌ์Šคํฌ๋กœ ์ปค์ง„ ์‹œ์ ์— ๋„์ž…์ด ํ•ฉ๋ฆฌ์ ์ด๋ผ๊ณ  ํŒ๋‹จํ–ˆ์Šต๋‹ˆ๋‹ค.
๊ฒฐ๊ณผ
Spring Cloud ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ œ๊ฑฐํ•จ์œผ๋กœ์จ ์„œ๋น„์Šค ๋””์Šค์ปค๋ฒ„๋ฆฌ ๋ฌธ์ œ๋ฅผ Kubernetes ๋„ค์ดํ‹ฐ๋ธŒ๋กœ ํ•ด์†Œํ•˜๋ฉฐ, ์ •์ฑ… ๋ณ€๊ฒฝ์„ ์žฌ๋ฐฐํฌ ์—†์ด ์„ ์–ธ์ ์œผ๋กœ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅํ•œ ๊ตฌ์กฐ๋ฅผ ํ™•๋ฆฝํ–ˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ์„œ๋น„์Šค ๊ฐ„ mTLS๋ฅผ ์ ์šฉํ•˜์—ฌ ์‹ ๋ขฐ์„ฑ์„ ๋†’์˜€์Šต๋‹ˆ๋‹ค.

3. CI/CD ๊ณ ๋„ํ™”: ํŒŒํŽธํ™” โ†’ ํ‘œ์ค€ํ™” โ†’ ์—ญํ•  ๋ถ„๋ฆฌ

โ€œโ€™๋” ์ข‹์€ ๋„๊ตฌโ€™๋ฅผ ์ซ“์€ ๊ฒƒ์ด ์•„๋‹Œ, ๊ฐ ์‹œ์ ์˜ ์šด์˜ ๋ฌธ์ œ๋ฅผ ๊ทผ๊ฑฐ๋กœ ํŒŒ์ดํ”„๋ผ์ธ ์ „๋žต์„ ์ „ํ™˜ํ–ˆ์Šต๋‹ˆ๋‹ค.โ€
Phase 1 โ€” GitHub Actions
โ€ข
๋‹จ์ผ ์„œ๋น„์Šค ๊ตฌ์กฐ์—์„œ GitHub Actions๋กœ ๊ฐ„๋‹จํ•œ CI ๊ตฌ์„ฑ
Phase 2 โ€” Jenkins ๋„์ž…
โ€ข
๋ฌธ์ œ: MSA๋กœ ์ „ํ™˜ํ•˜๋ฉฐ ์„œ๋น„์Šค๊ฐ€ ๋Š˜์–ด๋‚˜์ž ๊ฐ ์„œ๋น„์Šค๋งˆ๋‹ค ๋ณ„๋„ ํŒŒ์ดํ”„๋ผ์ธ์ด ์ƒ๊ฒจ ์ค‘๋ณต ์ฝ”๋“œ์™€ ๊ด€๋ฆฌ ๋น„์šฉ ๊ธ‰์ฆ
โ€ข
๊ตฌํ˜„:
โ—ฆ
Jenkins Shared Library๋กœ ๊ณตํ†ต CI(๋นŒ๋“œ/ํ…Œ์ŠคํŠธ, ์ด๋ฏธ์ง€ ๋นŒ๋“œโ€ขํ‘ธ์‹œ, ์•Œ๋ฆผ) ํ‘œ์ค€ํ™”
โ—ฆ
Gradle ๋นŒ๋“œ ์บ์‹œโ€ขDocker BuildKit ๋ ˆ์ด์–ด ์บ์‹œ ์ ์šฉ์œผ๋กœ ๋ฐ˜๋ณต ๋นŒ๋“œ ํšจ์œจ ๊ฐœ์„ 
โ—ฆ
Terraform ์—ฐ๊ณ„ Blue/Green ๋ฐฐํฌ ํŒŒ์ดํ”„๋ผ์ธ ๊ตฌํ˜„ (CI โ†’ Warm-up ์„œ๋น„์Šค ์ƒ์„ฑ โ†’ Health Check โ†’ ALB Target Group ์ „ํ™˜ โ†’ ์ด์ „ ํ™˜๊ฒฝ ์ •๋ฆฌ)
[์ด๋ฏธ์ง€ 4] Docker Layer Cache ์ ์šฉ ์ „/ํ›„: 1๋ถ„ 3์ดˆ โ†’ 3.2์ดˆ (95% ๋‹จ์ถ•)
โ€ข
๊ฒฐ๊ณผ: ์„œ๋น„์Šค๋ณ„ ํŒŒ์ดํ”„๋ผ์ธ ์ค‘๋ณต ์ œ๊ฑฐ ๋ฐ ๊ณตํ†ต CI ํ‘œ์ค€ํ™”
Phase 3 โ€” GitHub Actions + ArgoCD
โ€ข
๋ฌธ์ œ: Jenkins ์ž์ฒด๊ฐ€ ๋ณ„๋„ ์ธํ”„๋ผ๋กœ ์กด์žฌํ•˜๋ฉฐ ์œ ์ง€โ€ข๊ด€๋ฆฌ ๋ถ€๋‹ด์ด ์ƒˆ๋กœ์šด ์šด์˜ ๋น„์šฉ์œผ๋กœ ๋ถ€๊ฐ๋จ
โ€ข
๊ตฌํ˜„:
โ—ฆ
CI โ€” GitHub Actions๋กœ ๋‹จ์ˆœํ™”ํ•˜์—ฌ ๋ณ„๋„ ์„œ๋ฒ„ ์šด์˜ ๋ถ€๋‹ด ํ•ด์†Œ
โ—ฆ
CD โ€” ArgoCD + Helm Chart ๊ธฐ๋ฐ˜ GitOps๋กœ ๋ถ„๋ฆฌํ•˜์—ฌ ์„ ์–ธ์  ๋ฐฐํฌ ์žฌํ˜„์„ฑ ํ™•๋ณด
โ€ข
๊ฒฐ๊ณผ: CI๋Š” ๋นŒ๋“œ ๋ฐ ๊ฒ€์ฆ, CD๋Š” ๋ฐฐํฌ ๋ฐ ์ˆ˜๋ ด์˜ ์—ญํ• ๋กœ ๋ถ„๋ฆฌ, Jenkins ์šด์˜ ๋ถ€๋‹ด ํ•ด์†Œ

4. ์žฅ์•  ๋Œ€์‘: Jenkins ๋…ธ๋“œ Hang ์›์ธ ๊ทœ๋ช…๊ณผ ์žฌ๋ฐœ ๋ฐฉ์ง€

"๋‹จ์ˆœ ์„œ๋ฒ„ ์ฆ์„ค์ด ์•„๋‹Œ, CloudWatch ์ง€ํ‘œ๋กœ ๋ณ‘๋ชฉ์„ ์ฆ๋ช…ํ•˜๊ณ  ๊ตฌ์กฐ์ ์œผ๋กœ ์žฌ๋ฐœ์„ ๋ง‰์•˜์Šต๋‹ˆ๋‹ค." (Phase2: Jenkins ๊ธฐ๋ฐ˜ CI ์žฅ์•  โ€” Phase3: GitOps ์ „ํ™˜์œผ๋กœ ๋Œ€์ฒด)
โ€ข
๋ฌธ์ œ: ํŠน์ • ์„œ๋น„์Šค์˜ Docker ์ด๋ฏธ์ง€ ๋นŒ๋“œ ๊ตฌ๊ฐ„์—์„œ Jenkins UI๊ฐ€ 504 Gateway Timeout์„ ๋ฐ˜ํ™˜ํ•˜๊ณ , ์ดํ›„ SSH ์ ‘์† ๋ถˆ๊ฐ€(๋…ธ๋“œ Hang/์‹œ์Šคํ…œ ์ •์ง€) ์ƒํƒœ๋กœ ์ „ํ™˜๋˜์–ด CI ํŒŒ์ดํ”„๋ผ์ธ์ด ์ค‘๋‹จ๋จ. CPU/Memory ์‚ฌ์šฉ๋Ÿ‰์€ ์ •์ƒ ๋ฒ”์œ„์˜€๊ธฐ ๋•Œ๋ฌธ์— ๋‹จ์ˆœ ๋ฆฌ์†Œ์Šค ๋ถ€์กฑ์„ ๋ณผ ์ˆ˜ ์—†์—ˆ์Œ
โ€ข
์›์ธ ๋ถ„์„ (RCA):
โ—ฆ
CloudWatch ๋ถ„์„ ๊ฒฐ๊ณผ, EBS BurstBalance๊ฐ€ 0%๋กœ ๋–จ์–ด์ง€๊ณ  VolumeTotalReadTime ์ตœ๋Œ€ 119์ดˆ, VolumeQueueLength๊ฐ€ ๊ธ‰์ฆํ•˜๋Š” ํŒจํ„ด ๋ฐœ๊ฒฌ
โ—ฆ
๋‹จ์ผ Root EBS(gp2)์—์„œ OS์™€ Docker I/O๊ฐ€ ๊ฒฝํ•ฉ
โ†’ gp2 ๋ณผ๋ฅจ์˜ IOPS Throttling์„ ๊ทผ๋ณธ ์›์ธ์œผ๋กœ ๊ทœ๋ช…
โ€ข
์ธก์ • ๊ธฐ์ค€: CloudWatch BurstBalance/VolumeQueueLength/VolumeTotalReadTime (1m period) ๊ธฐ์ค€, ๋™์ผ ๋นŒ๋“œ ์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ ๋ณ€๊ฒฝ ์ „/ํ›„ 3ํšŒ ์žฌํ˜„ํ•˜์—ฌ ๋น„๊ต
[์ด๋ฏธ์ง€ 5] EBS gp2 ๋ณผ๋ฅจ์˜ BurstBalance ๊ณ ๊ฐˆ
[์ด๋ฏธ์ง€ 6] EBS gp2 ๋ณผ๋ฅจ์˜ QueueLength ๊ธ‰์ฆ๊ณผ ์œ ์ง€
[์ด๋ฏธ์ง€ 7] EBS gp2 ๋ณผ๋ฅจ์˜ TotalReadTime ๊ธ‰์ฆ๊ณผ ์œ ์ง€
โ€ข
ํ•ด๊ฒฐ ์ „๋žต:
1.
Root/Data ๋ณผ๋ฅจ ๋ถ„๋ฆฌ๋กœ ๋นŒ๋“œ ์›Œํฌ๋กœ๋“œ์˜ I/O ์˜ํ–ฅ์„ OS ๋ ˆ์ด์–ด์™€ ๊ฒฉ๋ฆฌ
2.
gp3(Provisioned IOPS 6000)๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•จ์œผ๋กœ์จ ํฌ๋ ˆ๋”ง ๊ธฐ๋ฐ˜ ๊ฐ€๋ณ€ IOPS์—์„œ ๊ณ ์ • IOPS ๊ตฌ์กฐ๋กœ ์ „ํ™˜
โ€ข
๊ฒฐ๊ณผ: Jenkins 504/๋…ธ๋“œ Hang ์žฅ์•  ์ œ๊ฑฐ, EBS ๋ณ‘๋ชฉ ์ง€ํ‘œ ์•ˆ์ •ํ™”
[์ด๋ฏธ์ง€ 8] EBS gp3 ๋ณผ๋ฅจ ๋ณ€๊ฒฝ ํ›„ QueueLength ๊ฐœ์„  (ํ”ผํฌ ํ›„ ์•ˆ์ •ํ™”)
[์ด๋ฏธ์ง€ 9] EBS gp3 ๋ณผ๋ฅจ ๋ณ€๊ฒฝ ํ›„ TotalReadTime ๊ฐœ์„  (ํ”ผํฌ ํ›„ ์•ˆ์ •ํ™”)

5. Packer์™€ Terraform์„ ํ†ตํ•œ CI ํ”Œ๋žซํผ ์žฌํ˜„ ์ž๋™ํ™” (๋น„์šฉ ์ œ์•ฝ ํ™˜๊ฒฝ ์šด์˜ ๋ฆฌ์Šคํฌ ์ œ๊ฑฐ)

โ€ข
๋ฐฐ๊ฒฝ: ๋น„์šฉ ์ œ์•ฝ์œผ๋กœ AWS ๋ฆฌ์†Œ์Šค Destroy/Recreate๊ฐ€ ๋นˆ๋ฒˆํ•˜์—ฌ, Jenkins ์„œ๋ฒ„ ๋ฐ ์„ค์ •์˜ ์žฌ๊ตฌ์„ฑ์ด ์š”๊ตฌ๋˜์–ด ์„ค์ • ๋ˆ„๋ฝ, ํ™˜๊ฒฝ ๋ถˆ์ผ์น˜ ๋“ฑ์˜ ์šด์˜ ๋ฆฌ์Šคํฌ์™€ ์‹œ๊ฐ„ ๋น„์šฉ ๋ฐœ์ƒ
โ€ข
๊ตฌํ˜„:
โ—ฆ
Docker ์‚ฌ์ „ ๊ตฌ์„ฑ Golden AMI๋ฅผ Packer๋กœ ๋นŒ๋“œํ•˜์—ฌ ์ผ๊ด€๋œ ์ด๋ฏธ์ง€ ํ™•๋ณด
โ—ฆ
Terraform์œผ๋กœ EC2 + EBS(์˜์† ๋ฐ์ดํ„ฐ) + ALB ๋…ธ์ถœ + Jenkins ์ปจํ…Œ์ด๋„ˆ ๊ธฐ๋™๊นŒ์ง€ ์ž๋™ํ™”
โ€ข
ํšจ๊ณผ: terraform apply๋งŒ์œผ๋กœ Jenkins๋ฅผ ๋ฐ˜๋ณต ์žฌ๊ตฌ์„ฑ ๊ฐ€๋Šฅํ•œ ์šด์˜ ๋ชจ๋ธ๋กœ ์ „ํ™˜ํ•˜์—ฌ, ์žฌ๊ตฌ์ถ• ๋ฆฌ๋“œํƒ€์ž„๊ณผ ์ž‘์—… ์ค‘๋‹จ ๋น„์šฉ์„ ์ œ๊ฑฐ

ย Project 2: CINEBOX

Role: BE, Infra & DevOps Lead โ€” ์•„ํ‚คํ…์ฒ˜ ์„ค๊ณ„ ๋ฐ ์ธํ”„๋ผ ๋‹จ๋… ๊ตฌ์ถ• | CI/CDโ€ข๋ชจ๋‹ˆํ„ฐ๋ง ์ „๋‹ด Period: 2025.02 โ€“ 2025.03 Key Tech: AWS EKS, ArgoCD, Prometheus, Loki, Grafana, Terraform Links:ย [GitHub Repository] | [Report PDF]
ํ”„๋กœ์ ํŠธ ์†Œ๊ฐœ: ์‹ค์‹œ๊ฐ„ ์ขŒ์„ ์ ์œ ์™€ ์˜ˆ๋งค๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ณ ๊ฐ€์šฉ์„ฑ ์š”๊ตฌ์‚ฌํ•ญ์„ ๊ฐ€์ •ํ•œ ์˜ํ™” ์˜ˆ๋งค ์„œ๋น„์Šค์ž…๋‹ˆ๋‹ค. ๋ชจ๋‹ˆํ„ฐ๋ง ๋ฐ์ดํ„ฐ๋ฅผ ์˜์‚ฌ๊ฒฐ์ •์˜ ๊ทผ๊ฑฐ๋กœ ์‚ผ์•„ ํ™•์žฅ ์‹œ ์šด์˜ ๋ฆฌ์Šคํฌ๋ฅผ ์ค„์ด๋Š” ๋ฐฉํ–ฅ์œผ๋กœ ๊ฐœ์„ ํ–ˆ์œผ๋ฉฐ, ์šด์˜ ํ™˜๊ฒฝ์˜ ์‹ ๋ขฐ์„ฑ๊ณผ ์žฌํ˜„์„ฑ์„ ์œ„ํ•ด GitOps๋ฅผ ๋„์ž…ํ–ˆ์Šต๋‹ˆ๋‹ค.
[์ด๋ฏธ์ง€ 10] CINEBOX ์•„ํ‚คํ…์ฒ˜

1. ๋ชจ๋‹ˆํ„ฐ๋ง ๊ธฐ๋ฐ˜ ์˜์‚ฌ๊ฒฐ์ •

๊ด€์ธก ์ฒด๊ณ„ ๊ตฌ์ถ•
โ€ข
Grafana/Prometheus๋กœ ์ธํ”„๋ผ ๋ฆฌ์†Œ์Šค์™€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ƒํƒœ ํ†ตํ•ฉ ๋ชจ๋‹ˆํ„ฐ๋ง
โ€ข
Loki๋ฅผ ํ†ตํ•œ ํฉ์–ด์ง„ ํŒŒ๋“œ ๋กœ๊ทธ๋ฅผ ์ค‘์•™ ์ˆ˜์ง‘ํ•˜์—ฌ Grafana์—์„œ ํ†ตํ•ฉ ํ™•์ธ ๊ฐ€๋Šฅํ•œ ๊ตฌ์กฐ ํ™•๋ณด
์˜์‚ฌ๊ฒฐ์ •
โ€ข
๋ชจ๋‹ˆํ„ฐ๋ง ๊ฒฐ๊ณผ movie ๋„๋ฉ”์ธ GET ์š”์ฒญ์— ํŠธ๋ž˜ํ”ฝ์ด ์ง‘์ค‘๋จ์„ ํ™•์ธ
โ€ข
DB๋ฅผ Master/Replica ๊ตฌ์กฐ๋กœ ๋ถ„๋ฆฌํ•˜์—ฌ ์กฐํšŒ ํŠธ๋ž˜ํ”ฝ์„ Replica์—์„œ ์ฒ˜๋ฆฌ
โ†’ ์ฝ๊ธฐ ํŠธ๋ž˜ํ”ฝ์„ Replica๋กœ ๋ถ„์‚ฐํ•˜์—ฌ Master ๋ถ€ํ•˜ ๊ฐ์†Œ

2. GitOps ๋„์ž…: Dev/Prod ํ™˜๊ฒฝ ๋ถ„๋ฆฌ์™€ ์„ ์–ธ์  ๋ฐฐํฌ ์žฌํ˜„์„ฑ ํ™•๋ณด

๋‹จ์ˆœํžˆ "๋ฐฐํฌํ–ˆ๋‹ค"๊ฐ€ ์•„๋‹ˆ๋ผ, Dev์™€ Prod ํ™˜๊ฒฝ์˜ ์„ค์ • ์ถฉ๋Œ์„ ๊ตฌ์กฐ์ ์œผ๋กœ ์ฐจ๋‹จํ•˜๊ณ  ๋ชจ๋“  ๋ณ€๊ฒฝ์„ ์ถ”์  ๊ฐ€๋Šฅํ•˜๋„๋ก ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.
๋ฐฐ๊ฒฝ
Dev์™€ Prod ํ™˜๊ฒฝ์„ ๋™์‹œ์— ์šด์˜ํ•˜๋ฉด์„œ ํ™˜๊ฒฝ๋ณ„ ์„ค์ •์„ kubectl๋กœ ์ง์ ‘ ์ ์šฉํ•˜๋ฉด ์‹ค์ œ ํด๋Ÿฌ์Šคํ„ฐ ์ƒํƒœ์™€ ์ฝ”๋“œ ๋ฒ ์ด์Šค๊ฐ€ ๋‹ฌ๋ผ์ง€๋Š” ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธธ ์ˆ˜ ์žˆ๋Š” ๊ตฌ์กฐ์˜€์Šต๋‹ˆ๋‹ค. ํŠนํžˆ Dev์—์„œ ๊ฒ€์ฆํ•œ ์„ค์ •์ด Prod์— ๊ทธ๋Œ€๋กœ ๋ฐ˜์˜๋œ๋‹ค๋Š” ๋ณด์žฅ์ด ์—†์—ˆ๊ณ , ๋ฐฐํฌ ์ด๋ ฅ๋„ ๋‚จ์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. GitOps๋ฅผ ํ†ตํ•ด Git์„ ๋‹จ์ผ ์ง€์ ์œผ๋กœ ์‚ผ์•„ ์ด ๋ฌธ์ œ๋ฅผ ์ฐจ๋‹จํ•˜๊ณ ์ž ํ–ˆ์Šต๋‹ˆ๋‹ค.
๊ตฌํ˜„
โ€ข
ArgoCD: ํด๋Ÿฌ์Šคํ„ฐ์˜ ํ˜„์žฌ ์ƒํƒœ์™€ Git์— ์ •์˜๋œ ์ƒํƒœ(Desired State)๋ฅผ ์‹ค์‹œ๊ฐ„ ๋™๊ธฐํ™”. ์ˆ˜๋™ ๋ณ€๊ฒฝ์„ PR ๊ธฐ๋ฐ˜์œผ๋กœ ์ œํ•œํ•ด Drift ๋ฐœ์ƒ ๊ฐ€๋Šฅ ์ง€์  ์ตœ์†Œํ™”
โ€ข
Kustomize: Base์™€ Overlay(Dev/Prod) ๊ตฌ์กฐ๋กœ ๋‚˜๋ˆ„์–ด ํ™˜๊ฒฝ๋ณ„ ๋ฆฌ์†Œ์Šค ๊ฒฉ๋ฆฌ ๊ด€๋ฆฌ, ๊ฐœ๋ฐœ ๊ฒ€์ฆ ํ›„ ์•ˆ์ • ์‹œ ํ”„๋กœ๋•์…˜์œผ๋กœ ๋ฐฐํฌํ•˜๋Š” ํ๋ฆ„ ํ‘œ์ค€ํ™”
โ€ข
GitHub Actions โ†’ ArgoCD ํ๋ฆ„์œผ๋กœ CI์™€ CD ์—ญํ•  ๋ถ„๋ฆฌ
๊ฒฐ๊ณผ
ํ™˜๊ฒฝ๋ณ„ ์„ค์ • ์ถฉ๋Œ ๋ฐฉ์ง€, ์„ ์–ธ์  ๋ฐฐํฌ ์žฌํ˜„์„ฑ ํ™•๋ณด

3. Troubleshooting โ€” CoreDNS Taint ์ถฉ๋Œ

๋ฌธ์ œ
์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ Pod๊ฐ€ RDS์™€ ์—ฐ๊ฒฐ์— ์‹คํŒจํ•˜๋ฉฐ ์ง€์†์ ์œผ๋กœ CrashLoopBackOff ์ƒํƒœ๋กœ ๋ฐ˜๋ณต ์žฌ์‹œ์ž‘
์›์ธ ์ถ”์ 
1.
RDS ์„ค์ •, Security Group, ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ํ™•์ธ โ†’ ์ •์ƒ
2.
์—ฐ๊ฒฐ ์‹คํŒจ๊ฐ€ IP๊ฐ€ ์•„๋‹Œ endpoint ๊ธฐ๋ฐ˜์ธ ์ ์— ์ฃผ๋ชฉ โ†’ DNS ํ•ด์„ ๋ฌธ์ œ ์˜์‹ฌ
3.
CoreDNS Pod ์ƒํƒœ ํ™•์ธ โ†’ Pending โ†’ ๋ชจ๋“  ๋…ธ๋“œ์— Taint๊ฐ€ ์ ์šฉ๋˜์–ด ์žˆ์–ด CoreDNS๊ฐ€ ์–ด๋–ค ๋…ธ๋“œ์—๋„ ์Šค์ผ€์ค„๋ง๋˜์ง€ ๋ชปํ•œ ๊ฒƒ์ด ์›์ธ
๊ฒฐ๋ก 
ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด๋ถ€ DNS ํ•ด์„ ๋ถˆ๊ฐ€ โ†’ RDS endpoint๋ฅผ IP๋กœ ๋ณ€ํ™˜ํ•˜์ง€ ๋ชปํ•œ ์—ฐ๊ฒฐ ์‹คํŒจ
ํ•ด๊ฒฐ
CoreDNS Deployment์— tolerations๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ๋ชจ๋“  ๋…ธ๋“œ์—์„œ ์Šค์ผ€์ค„๋ง ๊ฐ€๋Šฅํ•˜๋„๋ก ๋ณ€๊ฒฝ โ†’ CoreDNS ์ •์ƒ ์Šค์ผ€์ค„๋ง, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜-RDS ์—ฐ๊ฒฐ ์ •์ƒํ™”