๋ ์จ 13: DevOps์ CI/CD
๋ ์จ 13: DevOps์ CI/CD¶
์ด์ : ํ๋ก์ธ์ค ๊ฐ์ | ๋ค์: ๊ธฐ์ ๋ฌธ์ํ
DevOps๋ ์ง๋ 10๋ ๊ฐ ์ํํธ์จ์ด ํ์ด ์ํํธ์จ์ด๋ฅผ ๊ตฌ์ถํ๊ณ ๋ฉํํ๋ ๋ฐฉ์์ ๋ณํ์์ผฐ๋ค. ๊ทธ๋ฌ๋ DevOps๋ ๋๊ตฌ๋, ์ ํ๋, ์งํจ๋ ์๋๋ค โ ์ํํธ์จ์ด ๊ฐ๋ฐ๊ณผ IT ์ด์ ์ฌ์ด์ ์ ํต์ ์ธ ์ฅ๋ฒฝ์ ํ๋ฌด๋ ๋ฌธํ์ ์ค์ฒ์ ์งํฉ์ด๋ค. ์ด ๋ ์จ์์๋ DevOps์ ์ง์ ํ ์๋ฏธ, ์ง์์ ํตํฉ(Continuous Integration)๊ณผ ์ง์์ ๋ฉํ(Continuous Delivery) ๋ค์ ์๋ ์์น, ๊ทธ๋ฆฌ๊ณ ์ฑ์ํ ์์ง๋์ด๋ง ์กฐ์ง์ด ๋ฉํ ํ๋ก์ธ์ค์ ์๋์ ์ ๋ขฐ์ฑ์ ์ด๋ป๊ฒ ์ธก์ ํ๊ณ ๊ฐ์ ํ๋์ง ํ๊ตฌํ๋ค.
๋์ด๋: โญโญโญ
์ ์ ํ์ต: - ํ์ ๊ด๋ฆฌ โ ๋ธ๋์นญ ์ ๋ต, ๋ฒ์ ๊ด๋ฆฌ ์ํฌํ๋ก์ฐ - ํ๋ก์ธ์ค ๊ฐ์ โ ๋ฉํธ๋ฆญ, ํ๊ณ , ๊ฐ์ ์ฌ์ดํด - ๋น๋ ์์คํ ๊ณผ ์๋ํ ํ ์คํธ ๊ฐ๋ ์ ๋ํ ๊ธฐ๋ณธ ์ดํด
ํ์ต ๋ชฉํ: - DevOps๊ฐ ๋ฌด์์ธ์ง ์ค๋ช ํ๊ณ ์ ํต์ ์ธ ์ด์ ๋ฐ SRE์ ๊ตฌ๋ณํ๋ค - CALMS ํ๋ ์์ํฌ์ ๋ฌธํ๊ฐ DevOps์ ๊ธฐ๋ฐ์ธ ์ด์ ๋ฅผ ์ค๋ช ํ๋ค - ์๋ฏธ ์๋ ๋จ๊ณ์ ํ์ง ๊ฒ์ดํธ๊ฐ ์๋ CI ํ์ดํ๋ผ์ธ์ ์ค๊ณํ๋ค - ์ง์์ ๋ฉํ(Continuous Delivery)๊ณผ ์ง์์ ๋ฐฐํฌ(Continuous Deployment)๋ฅผ ๊ตฌ๋ณํ๋ค - ๋ฐฐํฌ ์ ๋ต์ ๋น๊ตํ๋ค: ๋กค๋ง, ๋ธ๋ฃจ-๊ทธ๋ฆฐ, ์นด๋๋ฆฌ, ํผ์ฒ ํ๋๊ทธ - ๊ด์ฐฐ ๊ฐ๋ฅ์ฑ์ ์ธ ๊ฐ์ง ๊ธฐ๋ฅ๊ณผ ๊ทธ ์ค์์ฑ์ ์ค๋ช ํ๋ค - DORA์ 4๊ฐ์ง ๋ฉํธ๋ฆญ์ ์ ์ํ๊ณ ํ ๊ฑด๊ฐ์ ๋ํด ๋ฌด์์ ๋๋ฌ๋ด๋์ง ํด์ํ๋ค - ๋ฌด๊ฒฐ์ ์ฌํ ๊ฒํ (blameless postmortems)์ ์ฌ๋ฆฌ์ ์์ ์ด ํ์ต์ ๊ฐ๋ฅํ๊ฒ ํ๋ ์ด์ ๋ฅผ ์ค๋ช ํ๋ค
1. DevOps๋ ๋ฌด์์ธ๊ฐ?¶
DevOps๋ 2008โ2009๋ ๊ฒฝ ๊ฐ๋ฐ ํ๊ณผ ์ด์ ํ ์ฌ์ด์ ๋ง์ฑ์ ์ธ ๊ธฐ๋ฅ ์ฅ์ ์ ๋ํ ์ข์ ์์ ํ์ํ๋ค. ๊ฐ๋ฐ์๋ค์ ์๋ก์ด ๊ธฐ๋ฅ์ ๋น ๋ฅด๊ฒ ์ถ์ํ๋๋ก ์ ์ธ์ ๋ฐ์๊ณ , ์ด์ ํ์ ์ด์ ํ๊ฒฝ์ ์์ ์ ์ผ๋ก ์ ์งํ๋๋ก ์ ์ธ์ ๋ฐ์๋ค. ์ด ์๋ฐ๋ ์ ์ธ์ด ์ฅ๋ฒฝ์ ๋ง๋ค์๋ค โ ๊ธฐ๋ฅ๋ค์ ๋ฐฐํฌ๋ฅผ ๊ธฐ๋ค๋ฆฌ๋ฉฐ ์์๊ณ , ์ฌ๊ณ ๋ค์ "๋์ ์ฝ๋" ๋๋ "์ด์ ์ค์"๋ก ํํด์ก์ผ๋ฉฐ, ์๋ฌด๋ ์ ์ฒด ๋ฉํ ํ์ดํ๋ผ์ธ์ ์์ ํ์ง ์์๋ค.
DevOps๋ ๊ฐ๋ฐ ๋ฐ ์ด์ ์์ง๋์ด๊ฐ ์ค๊ณ ๋ฐ ๊ฐ๋ฐ๋ถํฐ ๋ฐฐํฌ ๋ฐ ์ด์ ์ง์๊น์ง ์ ์ฒด ์๋น์ค ์๋ช ์ฃผ๊ธฐ์ ๊ฑธ์ณ ํจ๊ป ์์ ํ๋ ์ค์ฒ์ด๋ค โ ๋ฆฐ ์ ์กฐ์ ์์คํ ์ฌ๊ณ ์ ์์น์ ์ํํธ์จ์ด ๋ฉํ์ ์ ์ฉํ๋ฉด์.
์ด ์ฉ์ด๋ Patrick Debois์ Andrew Shafer์ ์ํด ๋์คํ๋์์ผ๋ฉฐ, "State of DevOps" ์ฐ๊ตฌ(2013๋ Puppet Labs์์ ์์, ์ดํ DORA๊ฐ ๊ณ์)๋ DevOps ์ค์ฒ์ด ์๋นํ ๋ ๋์ ์กฐ์ง ์ฑ๊ณผ์ ์๊ด๊ด๊ณ๊ฐ ์๋ค๋ ์ฒซ ๋ฒ์งธ ์๊ฒฉํ ์ฆ๊ฑฐ๋ฅผ ์ ๊ณตํ๋ค.
DevOps vs. ์ ํต์ ์ด์¶
| ์ฐจ์ | ์ ํต์ ๋ฐฉ์ | DevOps |
|---|---|---|
| ํ ๊ตฌ์กฐ | ๊ฐ๋ฐ๊ณผ ์ด์์ด ๋ณ๋์ ์ฌ์ผ๋ก | ๊ณต์ ์ฑ ์, ๊ต์ฐจ ๊ธฐ๋ฅ ํ |
| ๋ฐฐํฌ | ๋๋ ๋ฐฐ์น, ๋๋ฌผ๊ณ , ๊ณ ์ํ | ์๊ท๋ชจ, ์์ฃผ, ์ ์ง์ |
| ๋ณ๊ฒฝ ์น์ธ | ๋ณ๊ฒฝ ์๋ฌธ ์์ํ, ์ ์ฃผ์ ๋ฆฌ๋ ํ์ | ์๋ํ๋ ๊ฒ์ดํธ, ์ ๋ถ์์ ์ ์๊ฐ |
| ์ฌ๊ณ ๋์ | ๋น๋ ์ฐพ๊ธฐ, ์์ค์ปฌ๋ ์ด์ | ๋ฌด๊ฒฐ์ ์ฌํ ๊ฒํ , ๊ณต์ ์จ์ฝ |
| ํผ๋๋ฐฑ ๋ฃจํ | ๋ฆด๋ฆฌ์ค ํ ๋ฒ๊ทธ ๋ฐ๊ฒฌ, ๋๋ฆฐ ํผ๋๋ฐฑ | ๋ชจ๋ํฐ๋ง, ๊ฒฝ๋ณด, ๋น ๋ฅธ ๋ณต๊ตฌ |
| ์ง์ | ์ด์์ด ์ด์ ํ๊ฒฝ์ "์์ "; ๊ฐ๋ฐ์ ์ ๊ทผ ์์ | ๊ฐ๋ฐ์๊ฐ ์์ ์ ์๋น์ค๋ฅผ ์ดํดํ๊ณ ์ด์ํ ์ ์์ |
DevOps vs. SRE¶
์ฌ์ดํธ ์ ๋ขฐ์ฑ ์์ง๋์ด๋ง(SRE, Site Reliability Engineering)์ ๊ตฌ๊ธ์ DevOps ์์น ๊ตฌํ์ด๋ค. DevOps๊ฐ ์ฒ ํ์ ์ค๋ช ํ๋ค๋ฉด, SRE๋ ์ง๋ฌด ๊ธฐ๋ฅ๊ณผ ์ค์ฒ์ ์งํฉ์ ์ค๋ช ํ๋ค.
SRE๋ ๊ตฌ์ฒด์ ์ธ ๋ฉ์ปค๋์ฆ์ ๋์ ํ๋ค: - ์๋น์ค ์์ค ๋ชฉํ(SLO, Service Level Objectives): ์ ๋ํ๋ ์ ๋ขฐ์ฑ ๋ชฉํ (์: 99.9% ๊ฐ์ฉ์ฑ) - ์ค๋ฅ ์์ฐ(Error budgets): ํ์ฉ ๊ฐ๋ฅํ ๋ค์ดํ์ โ ์์ง๋๋ฉด ์ ๋ขฐ์ฑ์ด ๊ฐ์ ๋ ๋๊น์ง ๊ธฐ๋ฅ ์์ ์ค๋จ - ์๊ณ ๊ฐ์(Toil reduction): SRE๋ ๋ฐ๋ณต์ ์ธ ์๋ ์์ ์ ์๋ํ๋ก ์ ๊ฑฐํด์ผ ํจ - ์ฌํ ๊ฒํ (Postmortems): ์ฌ๊ณ ๋ก๋ถํฐ์ ๊ตฌ์กฐํ๋ ํ์ต
๊ด๊ณ: "SRE๋ ์ํํธ์จ์ด ์์ง๋์ด์๊ฒ ์ด์ ๊ธฐ๋ฅ์ ์ค๊ณํ๋๋ก ์์ฒญํ์ ๋ ์ป๋ ๊ฒ์ด๋ค." DevOps๋ ๋ ๋์ ๋ฌธํ์ ์ด๋์ด๊ณ , SRE๋ ์ด๋ฅผ ๊ตฌํํ๋ ํ๋์ ์๊ฒฉํ ๋ฐฉ๋ฒ์ด๋ค.
2. CALMS ํ๋ ์์ํฌ¶
CALMS๋ DevOps๋ฅผ ์ดํดํ๊ธฐ ์ํด ๊ฐ์ฅ ๋๋ฆฌ ์ฌ์ฉ๋๋ ํ๋ ์์ํฌ๋ค. ๊ฐ ๊ธ์๋ ์กฐ์ง ์ญ๋์ ํ ์ฐจ์์ ๋ํ๋ธ๋ค.
C โ ๋ฌธํ(Culture)¶
๋ฌธํ๋ ๊ธฐ๋ฐ์ด๋ค. ์ด๊ฒ ์์ด๋ ์ด๋ค ๋๊ตฌ๋ ์คํจํ๋ค. DevOps ๋ฌธํ๋: - ๊ณต์ ์์ ๊ถ(Shared ownership): ๊ฐ๋ฐ์์ ์ด์ ๋ชจ๋ ์ ๋ขฐ์ฑ๊ณผ ๋ฐฐํฌ ์ฑ๊ณต์ ์์ ํ๋ค - ๋น๋ ์๋ ํ๊ฒฝ(Blame-free environment): ์คํจ๋ ์ฌ๋์ ์ฒ๋ฒํ๋ ๊ฒ์ด ์๋๋ผ ์์คํ ์ ๊ฐ์ ํ ๊ธฐํ๋ค - ํฌ๋ช ์ฑ(Transparency): ๋ฉํธ๋ฆญ, ์ฌ๊ณ , ๊ฒฐ์ ์ด ํ ์ ์ฒด์ ๊ฐ์์ ์ด๋ค - ๊ณ ๊ฐ ์ง์ค(Customer focus): ๊ถ๊ทน์ ์ธ ์ฒ๋๋ ์ฌ์ฉ์์๊ฒ ์ ๋ฌ๋ ๊ฐ์น๋ค
๋ฌธํ์ ์ ํ์ด ๊ฐ์ฅ ์ด๋ ต๋ค. ๋ฆฌ๋์ญ์ ์ง์, ์ ๋ขฐ ๊ตฌ์ถ, ๊ทธ๋ฆฌ๊ณ ์ข ์ข ์กฐ์ง ๊ฐํธ์ด ํ์ํ๋ค. ๋ง์ "DevOps ์ ํ"์ด ๋๊ตฌ ์ ํ์ด ์๋๋ผ ๊ธฐ์ ์ ๋ฌธํ๊ฐ ๋ฐ๋์ง ์์๊ธฐ ๋๋ฌธ์ ์คํจํ๋ค.
A โ ์๋ํ(Automation)¶
์๋ํ๋ ๋ฉํ ํ์ดํ๋ผ์ธ์์ ์๋์ ์ด๊ณ ์ค๋ฅ๊ฐ ๋ฐ์ํ๊ธฐ ์ฌ์ด ๋จ๊ณ๋ฅผ ์ ๊ฑฐํ๋ค: - ์ฝ๋ ๋น๋ ๋ฐ ์ปดํ์ผ - ๋ชจ๋ ์์ค์์์ ํ ์คํธ ์คํ - ์ธํ๋ผ ํ๋ก๋น์ ๋ - ๋ชจ๋ ํ๊ฒฝ์ ๋ฐฐํฌ - ํ์ ๊ด๋ฆฌ - ๋ณด์ ์ค์บ
์๋ํ์ ๋ชฉํ๋ ๋จ์ํ ์๋๊ฐ ์๋๋ผ ์ผ๊ด์ฑ๊ณผ ์ฌํ์ฑ์ด๋ค. 90%์ ์๊ฐ์๋ง ์๋ํ๋ ์๋ ํ๋ก์ธ์ค๋ ์ ๋ขฐ์ฑ ๋ฌธ์ ๋ค.
L โ ๋ฆฐ(Lean)¶
์ ์กฐ์ ์ ๋ฆฐ ์์น์ด ์ํํธ์จ์ด ๋ฉํ์ ์ง์ ์ ์ฉ๋๋ค: - ๋ญ๋น ์ ๊ฑฐ(Eliminate waste): ๋ถํ์ํ ์น์ธ ๋จ๊ณ, ํ๊ฒฝ ๋๊ธฐ, ์๋ ์ธ๊ณ - ํผ๋๋ฐฑ ์ฆํญ(Amplify feedback): ๋ฌธ์ ๋ฅผ ๋น ๋ฅด๊ฒ ๊ฐ์ํํ์ฌ ์์ ํ ์ ์๋๋ก - ์๊ท๋ชจ ๋ฐฐ์น(Small batch sizes): ์ํ์ ์ค์ด๊ณ ํผ๋๋ฐฑ์ ๊ฐ์ํํ๊ธฐ ์ํด ๋ ์์ฃผ ๋ ์์ ๋ณ๊ฒฝ ๋ฐฐํฌ - ํ๋ฆ(Flow): ๊ฐ๋ณ ๋จ๊ณ๊ฐ ์๋ ์ ์ฒด ์์คํ ์ ์ฒ๋ฆฌ๋ ์ต์ ํ
๋ฆฐ์์์ ํต์ฌ ํต์ฐฐ: ๋ฐฐํฌ ํ ๋ฐ๊ฒฌ๋ ๊ฒฐํจ์ ์ฝ๋ ๊ฒํ ์์ ์กํ ๊ฒ๋ณด๋ค ์์ ํ๋ ๋ฐ 10๋ฐฐ, ์ข์ ์ค๊ณ๋ก ์๋ฐฉํ ๊ฒ๋ณด๋ค 100๋ฐฐ ๋ ๋น์ฉ์ด ๋ ๋ค.
M โ ์ธก์ (Measurement)¶
์ธก์ ํ ์ ์๋ ๊ฒ์ ๊ฐ์ ํ ์ ์๋ค. DevOps ํ์ ๋ชจ๋ ๊ฒ์ ๊ณ์ธกํ๋ค: - ๋ฐฐํฌ ๋น๋์ ๋ฆฌ๋ ํ์ - ์์คํ ๊ฑด๊ฐ: ์ค๋ฅ์จ, ์ง์ฐ, ํฌํ - ํ์ดํ๋ผ์ธ ๊ฑด๊ฐ: ๋น๋ ์ฑ๊ณต๋ฅ , ํ ์คํธ ์ปค๋ฒ๋ฆฌ์ง ์ถ์ธ - ๋น์ฆ๋์ค ๊ฒฐ๊ณผ: ์ ํ์จ, ์ฌ์ฉ์ ์ฐธ์ฌ
์ธก์ ์๋ ๋๊ตฌ(๋ชจ๋ํฐ๋ง, APM, ๋ก๊น )๊ฐ ํ์ํ์ง๋ง, ๋ ์ค์ํ ๊ฒ์ ๋ฐ์ดํฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๊ฒฐ์ ์ ๋ด๋ฆฌ๊ณ ์คํจ ๋ฐ์ดํฐ๋ฅผ ์จ๊ธฐ์ง ์๊ณ ๋ฐฐ์ฐ๋ ๋ฌธํ๋ค.
S โ ๊ณต์ (Sharing)¶
์ง์ ์ฌ์ผ๋ก๋ DevOps์ ์ ์ด๋ค. ๊ณต์ ๋: - ์ ์ฒด ์กฐ์ง์ ๊ณต๊ฐ๋ ์ฌํ ๊ฒํ - ๋ชจ๋ ์ฌ๋์ด ์ ๊ทผ ๊ฐ๋ฅํ ๋ฐ๋ถ(runbook)๊ณผ ํ๋ ์ด๋ถ(playbook) - ์์คํ ์ด ํน์ ๋ฐฉ์์ผ๋ก ๊ตฌ์ถ๋ ์ด์ ๋ฅผ ์ค๋ช ํ๋ ์ํคํ ์ฒ ๊ฒฐ์ ๊ธฐ๋ก(Architecture Decision Records) - ๋ด๋ถ ๊ธฐ์ ๊ฐ์ฐ, ์ค์ฒ ๊ณต๋์ฒด, ๋ฉํ ๋ง - ๊ฐ๋ฅํ๋ฉด ์คํ ์์ค์ ๊ธฐ์ฌ
3. ์ง์์ ํตํฉ(Continuous Integration)¶
์ง์์ ํตํฉ(CI, Continuous Integration)์ ์ฝ๋ ๋ณ๊ฒฝ์ ์์ฃผ โ ์ด์์ ์ผ๋ก๋ ํ๋ฃจ์ ์ฌ๋ฌ ๋ฒ โ ๊ณต์ ์ ์ฅ์์ ํตํฉํ๊ณ , ์๋ํ๋ ๋น๋ ๋ฐ ํ ์คํธ ์ค์ํธ๋ก ๊ฐ ํตํฉ์ ๊ฒ์ฆํ๋ ์ค์ฒ์ด๋ค.
CI๊ฐ ํด๊ฒฐํ๋ ๋ฌธ์ ¶
CI ์ด์ ์๋ ํ์ด ์ ์ฃผ ๋๋ ์ ๊ฐ์ ๋์ ๋ณ๋์ ๋ธ๋์น์์ ์์ ํ ๋ค์ ๋ฆด๋ฆฌ์ค ์ ์ ๋ชจ๋ ๊ฒ์ ํฉ์น๋ ค๋ ์๋๊ฐ ์ผ๋ฐ์ ์ด์๋ค. ๊ฒฐ๊ณผ๋ ํตํฉ ์ง์ฅ(integration hell)์ด์๋ค: ๋๊ท๋ชจ ์ถฉ๋, ๊นจ์ง ํ ์คํธ, ๋ฉฐ์น ๊ฐ์ ๋๋ฒ๊น . Martin Fowler์ Kent Beck์ ์ด ๋ฌธ์ ๋ฅผ ์ง์ ํด๊ฒฐํ๊ธฐ ์ํด ์ต์คํธ๋ฆผ ํ๋ก๊ทธ๋๋ฐ(Extreme Programming)์ ์ผํ์ผ๋ก CI๋ฅผ ๋์คํํ๋ค.
CI ์์น¶
- ๋จ์ผ ์์ค ์ ์ฅ์ ์ ์ง: ๋ชจ๋ ์ฝ๋๊ฐ ํ๋์ ๋ฉ์ธ ๋ธ๋์น์ ์๊ฑฐ๋ ์์ฃผ ๋ณํฉ๋จ
- ๋น๋ ์๋ํ: ๋๊ตฌ๋ ์ฝ๋๋ฅผ ์ฒดํฌ์์ํ๊ณ ๋จ์ผ ๋ช ๋ น์ผ๋ก ๋น๋ํ ์ ์์ด์ผ ํจ
- ๋น๋๋ฅผ ์์ฒด ํ ์คํธ๋ก: ๋น๋๊ฐ ํ ์คํธ๋ฅผ ์คํํ๊ณ , ๋น๋ ํต๊ณผ๋ ์ฝ๋๊ฐ ์ฌ๋ฐ๋ฆ์ ์๋ฏธํจ
- ๋ชจ๋ ์ปค๋ฐ์ด ๋น๋๋ฅผ ํธ๋ฆฌ๊ฑฐ: ํ์ดํ๋ผ์ธ์ด ๋ชจ๋ ํธ์์์ ์๋์ผ๋ก ์คํ๋จ
- ๊นจ์ง ๋น๋ ์ฆ์ ์์ : ๊นจ์ง ๋ฉ์ธ ๋ธ๋์น๋ ์ต์ฐ์ ์์ โ "๋์ค์ ๊ณ ์น ๊ฒ"๊ฐ ์๋
- ๋น๋๋ฅผ ๋น ๋ฅด๊ฒ ์ ์ง: 45๋ถ์ด ๊ฑธ๋ฆฌ๋ CI ํ์ดํ๋ผ์ธ์ ๋์ ํผ๋๋ฐฑ์ ์ ๊ณต โ ํต์ฌ ํ์ดํ๋ผ์ธ์ 10๋ถ ๋ฏธ๋ง ๋ชฉํ
- ์ด์๊ณผ ์ ์ฌํ ํ๊ฒฝ์์ ํ ์คํธ: ํ ์คํธ์ ์ด์ ํ๊ฒฝ ๊ฐ์ ์ฐจ์ด๊ฐ ์ํ์ ๋์ ํจ
- ๊ฒฐ๊ณผ๋ฅผ ๊ฐ์์ ์ผ๋ก: ๋น๋ ์ํ๋ฅผ ๋ณด์ฌ์ฃผ๋ ๋์๋ณด๋๋ ํ ๊ฑด๊ฐ ์งํ์
CI ํ์ดํ๋ผ์ธ ๋จ๊ณ¶
์ผ๋ฐ์ ์ธ CI ํ์ดํ๋ผ์ธ์ ์ฆ๊ฐํ๋ ๊น์ด์ ๋น์ฉ์ ๋จ๊ณ๋ฅผ ๊ฑฐ์น๋ค:
[์ปค๋ฐ(Commit)]
โ
โผ
[์ฒดํฌ์์ & ์ปดํ์ผ] ~30์ด
โ ๊ตฌ๋ฌธ ์ค๋ฅ, ๋๋ฝ๋ ์์กด์ฑ
โผ
[๋จ์ ํ
์คํธ(Unit Tests)] ~2โ5๋ถ
โ ๋น ๋ฅด๊ณ , ๊ฒฉ๋ฆฌ๋๊ณ , ๋์ ์ปค๋ฒ๋ฆฌ์ง
โผ
[์ ์ ๋ถ์ & ๋ฆฐํ
] ~1โ2๋ถ
โ ์ฝ๋ ์คํ์ผ, ๋ณต์ก๋, ๋ณด์ ํจํด (SAST)
โผ
[ํตํฉ ํ
์คํธ(Integration Tests)] ~5โ10๋ถ
โ ์ปดํฌ๋ํธ ๊ฒฝ๊ณ ๊ฐ ํ
์คํธ, ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ํธ์์ฉ
โผ
[์ํฐํฉํธ ๋น๋(Build Artifact)] ~1โ3๋ถ
โ Docker ์ด๋ฏธ์ง, JAR, ๋ฐ์ด๋๋ฆฌ, ํจํค์ง
โผ
[๋ณด์ ์ค์บ(Security Scanning)] ~2โ5๋ถ
โ ์์กด์ฑ ์ทจ์ฝ์ (SCA), ์ปจํ
์ด๋ ์ด๋ฏธ์ง ์ค์บ
โผ
[ํต๊ณผ(PASS)] โ ์ํฐํฉํธ๋ฅผ ๋ ์ง์คํธ๋ฆฌ์ ์ ์ฅ
[์คํจ(FAIL)] โ ๋น๋ ์ฐจ๋จ, ๊ฐ๋ฐ์์๊ฒ ์๋ฆผ
ํ์ง ๊ฒ์ดํธ(Quality gates): ๊ฐ ๋จ๊ณ๊ฐ ๊ฒ์ดํธ ์ญํ ์ ํ๋ค. ๋จ๊ณ ์คํจ๋ ํ์ดํ๋ผ์ธ์ ์ค๋จ์ํค๊ณ ๊นจ์ง ์ํฐํฉํธ๊ฐ ์งํ๋๋ ๊ฒ์ ๋ง๋๋ค. ์ด "๋น ๋ฅธ ์คํจ(fail fast)" ์์น์ด ํ์์ ์ด๋ค โ ๋ฌธ์ ๊ฐ ์ผ์ฐ ์กํ์๋ก ์์ ํ๋ ๋ฐ ๋น์ฉ์ด ๋ ๋ ๋ค.
CI์ ํ ์คํธ ํผ๋ผ๋ฏธ๋¶
ํ ์คํธ ํผ๋ผ๋ฏธ๋(Mike Cohn)๋ ์ด๋ค ์ ํ์ ํ ์คํธ๋ฅผ ์ธ์ ์คํํ ์ง ์๋ดํ๋ค:
/\
/ \
/ E2E \ ์ ๊ณ , ๋๋ฆฌ๊ณ , ๋ถ์์ โ ๋ ์์ฃผ ์คํ
/--------\
/ Integration\ ์ ๋น๋ โ ๋ชจ๋ ์ปค๋ฐ์์ ์คํ
/--------------\
/ Unit Tests \ ๋ง๊ณ , ๋น ๋ฅด๊ณ , ์ ๋ขฐํ ์ ์์ โ ๋ชจ๋ ์ปค๋ฐ์์ ์คํ
/------------------\
๋จ์ ํ ์คํธ๊ฐ ํผ๋ผ๋ฏธ๋๋ฅผ ์ง๋ฐฐํด์ผ ํ๋ค. ๋ฐ๋ฆฌ์ด ๋จ์๋ก ์คํ๋๊ณ , ์ธ๋ถ ์์กด์ฑ์ด ์์ผ๋ฉฐ, ์ ํํ ํผ๋๋ฐฑ์ ์ ๊ณตํ๋ค. ๋๋ฆฐ ํตํฉ ํ ์คํธ๊ฐ ๋๋ฌด ๋ง์ ํ์ดํ๋ผ์ธ์ ํผ๋๋ฐฑ์ ๋๋ฌด ์ค๋ ๊ฑธ๋ฆฌ๊ธฐ ๋๋ฌธ์ ๋ฌด์๋๋ค.
4. ์ง์์ ๋ฉํ(Continuous Delivery) vs. ์ง์์ ๋ฐฐํฌ(Continuous Deployment)¶
์ด ์ฉ์ด๋ค์ ๊ด๋ จ์ด ์์ง๋ง ๊ตฌ๋ณ๋๋ฉฐ, ๊ทธ ๊ตฌ๋ณ์ด ์ค์ํ๋ค.
์ง์์ ๋ฉํ(Continuous Delivery)¶
์ ์: ๋ชจ๋ ์ฑ๊ณต์ ์ธ ๋น๋๋ ์ธ์ ๋ ์ง ์ด์ ํ๊ฒฝ์ ๋ฐฐํฌ๋ ์ ์๋ ์ํฐํฉํธ๋ฅผ ์์ฑํ๋ค. ์ด์ ํ๊ฒฝ์ผ๋ก์ ๋ฐฐํฌ๋ ์๋ ๊ฒฐ์ ์ด๋ค.
์ง์์ ๋ฉํ์ ๋ค์์ ๋ณด์ฅํ๋ค: - ์ํํธ์จ์ด๋ ํญ์ ๋ฐฐํฌ ๊ฐ๋ฅํ ์ํ - ๋ฐฐํฌ๋ ์ ์ํ์ ์ผ์์ ์ธ ์์ - ๋น์ฆ๋์ค๊ฐ ๋ฆด๋ฆฌ์ค๋ฅผ ์ธ์ ํ ์ง ์ ํํ ์ ์์ (๋ฆด๋ฆฌ์ค๊ฐ ๊ธฐ์ ์ ์ผ๋ก ๊ฐ๋ฅํ์ง๋ง์ด ์๋)
"๊ธฐ์ ์ ์ผ๋ก ๋ฆด๋ฆฌ์ค ๊ฐ๋ฅ"๊ณผ "๋ฆด๋ฆฌ์คํ๊ธฐ ์ํ ๋น์ฆ๋์ค ๊ฒฐ์ "์ ์ด ๋ถ๋ฆฌ๋ ๊ฐ๋ ฅํ๋ค. ํ์ ์ฌ์ฉ์์๊ฒ ์ค๋น๊ฐ ๋์ง ์์ ๊ธฐ๋ฅ์ ์์ฑํ๊ณ , ์ฝ๋๋ฅผ ๋ฉ์ธ์ ๋ณํฉ๋ ์ํ๋ก ์ ์งํ๋ค๊ฐ, ๋ง์ผํ ํ์ด ์ค๋น๋๋ฉด ๋ฆด๋ฆฌ์คํ ์ ์๋ค.
์ง์์ ๋ฐฐํฌ(Continuous Deployment)¶
์ ์: ๋ชจ๋ ์ฑ๊ณต์ ์ธ ๋น๋๊ฐ ์ธ๊ฐ์ ์น์ธ ์์ด ์๋์ผ๋ก ์ด์ ํ๊ฒฝ์ ๋ฐฐํฌ๋๋ค.
์ง์์ ๋ฐฐํฌ๋ ๋ค์์ ํ์๋ก ํ๋ค: - ๋งค์ฐ ๋์ ํ ์คํธ ์ปค๋ฒ๋ฆฌ์ง์ ํ์ดํ๋ผ์ธ ์ ๋ขฐ - ๋ฐฐํฌ ํ ๋ฌธ์ ๋ฅผ ์ก๊ธฐ ์ํ ๊ฐ๋ ฅํ ๋ชจ๋ํฐ๋ง ๋ฐ ๊ฒฝ๋ณด - ๋น ๋ฅธ ๋กค๋ฐฑ ๋ฅ๋ ฅ (์๋ํ ๋๋ ์ํด๋ฆญ) - ์ฝ๋ ๋ฐฐํฌ์์ ๊ธฐ๋ฅ ๊ฐ์์ฑ์ ๋ถ๋ฆฌํ๋ ํผ์ฒ ํ๋๊ทธ
| ์ง์์ ๋ฉํ(Continuous Delivery) | ์ง์์ ๋ฐฐํฌ(Continuous Deployment) | |
|---|---|---|
| ์ด์ ํ๊ฒฝ์ผ๋ก์ ๋ฐฐํฌ | ์๋ ํธ๋ฆฌ๊ฑฐ | ์๋ |
| ์ธ๊ฐ ์น์ธ ๋จ๊ณ | ์ (๋ง์ง๋ง์) | ์๋์ค |
| ์ํ ํ์ฉ | ์ค๊ฐ | ๋์ ์ ๋ขฐ ํ์ |
| ์ผ๋ฐ์ ์ฌ์ฉ ์ฌ๋ก | ์ํฐํ๋ผ์ด์ฆ, ๊ท์ ์ฐ์ | ๊ณ ์ ์น ์๋น์ค |
| ์์ | Netflix (์ฃผ๋ก), ์ํ | Flickr (2009๋ ํ๋ฃจ 10+ ๋ฐฐํฌ), ๋ง์ SaaS ๊ธฐ์ |
๋๋ถ๋ถ์ ์กฐ์ง์ ์ง์์ ๋ฉํ์ ์ค์ฒํ๋ค; ์ง์์ ๋ฐฐํฌ๋ ์ฑ์ํ CI์ ๊ฐ๋ ฅํ ๋ชจ๋ํฐ๋ง ๋ฌธํ๋ฅผ ๊ฐ์ง ํ์ ์ ํฉํ๋ค.
5. ๋ฐฐํฌ ์ ๋ต¶
๋ณ๊ฒฝ์ ์ด๋ป๊ฒ ๋ฆด๋ฆฌ์คํ๋๋๋ ๋ฆด๋ฆฌ์คํ๋๋ ๋งํผ์ด๋ ์ค์ํ๋ค. ๋ค๋ฅธ ์ ๋ต๋ค์ ์ํ์ ๋ค๋ฅด๊ฒ ๊ด๋ฆฌํ๋ค.
๋กค๋ง ๋ฐฐํฌ(Rolling Deployment)¶
์ธ์คํด์ค๋ฅผ ํ๋์ฉ (๋๋ ์๊ท๋ชจ ๋ฐฐ์น๋ก) ์ ๋ฐ์ดํธํ๋ค. ์ด๋ ์์ ์์๋ ์ผ๋ถ ์ธ์คํด์ค๋ ์ด์ ๋ฒ์ ์, ์ผ๋ถ๋ ์ ๋ฒ์ ์ ์คํํ๋ค.
์ด์ : [v1] [v1] [v1] [v1] [v1]
1๋จ๊ณ: [v2] [v1] [v1] [v1] [v1]
2๋จ๊ณ: [v2] [v2] [v1] [v1] [v1]
3๋จ๊ณ: [v2] [v2] [v2] [v1] [v1]
...
์ดํ: [v2] [v2] [v2] [v2] [v2]
์ฅ์ : ์ ์ง์ ์ถ์, ์ถ๊ฐ ์ธํ๋ผ ๋ถํ์, ์ผ์ ์ค์ง ์ฉ์ด. ๋จ์ : ๋์์ ์ด์ ํ๊ฒฝ์ ํผํฉ ๋ฒ์ ์กด์ฌ (ํ์ ํธํ์ฑ ํ์), ๋ค๋ฅธ ์ ๋ต๋ณด๋ค ๋๋ฆผ.
๋ธ๋ฃจ-๊ทธ๋ฆฐ ๋ฐฐํฌ(Blue-Green Deployment)¶
๋ ๊ฐ์ ๋์ผํ ์ด์ ํ๊ฒฝ์ ์ ์งํ๋ค. ๋ชจ๋ ํธ๋ํฝ์ "๋ธ๋ฃจ"(ํ์ฌ)๋ก ๋ผ์ฐํ ํ๋ค. "๊ทธ๋ฆฐ"(์ ํด)์ ๋ฐฐํฌํ๋ค. ํธ๋ํฝ์ ํ ๋ฒ์ ์ ํํ๋ค.
[๋ก๋ ๋ฐธ๋ฐ์]
โ
โโโโโโโโโโดโโโโโโโโโ
โผ โผ
[๋ธ๋ฃจ: v1] [๊ทธ๋ฆฐ: v2]
โ ํธ๋ํฝ ์ ํด
(์ ํ ํ)
[๋ธ๋ฃจ: v1] [๊ทธ๋ฆฐ: v2]
์ ํด โ ํธ๋ํฝ
์ฅ์ : ์ฆ๊ฐ์ ์ธ ๋กค๋ฐฑ (๋ธ๋ฃจ๋ก ๋ค์ ์ ํ), ํผํฉ ๋ฒ์ ์์. ๋จ์ : ๋ ๋ฐฐ์ ์ธํ๋ผ ํ์, ๋ฐ์ดํฐ๋ฒ ์ด์ค ์คํค๋ง ๋ณ๊ฒฝ์ด ๊น๋ค๋ก์.
์นด๋๋ฆฌ ๋ฐฐํฌ(Canary Deployment)¶
ํธ๋ํฝ์ ์๊ท๋ชจ ๋น์จ์ ์ ๋ฒ์ ์ผ๋ก ๋ผ์ฐํ ํ๊ณ , ๊ด์ฐฐํ๋ค๊ฐ ์ ์ง์ ์ผ๋ก ์ฆ๊ฐ์ํจ๋ค.
[๋ก๋ ๋ฐธ๋ฐ์]
โ
โโโโโดโโโโโโโโโโโโโโโ
โผ (5%) โผ (95%)
[v2: ์นด๋๋ฆฌ] [v1: ์์ ]
์ฅ์ : ์ค์ ์ด์ ํธ๋ํฝ์ด ์ ํ๋ ๋ ธ์ถ๋ก ์ ๋ฒ์ ์ ๊ฒ์ฆ; ์ ์ฒด ์ถ์ ์ ์ ํต๊ณ์ ์ ๋ขฐ์ฑ. ๋จ์ : ํธ๋ํฝ ๋ผ์ฐํ ๋ฅ๋ ฅ ํ์, ๋ฎ์ ํธ๋ํฝ ๋ณผ๋ฅจ์์ ๋ฌธ์ ๋ฅผ ๊ฐ์งํ ๋งํผ ๋ชจ๋ํฐ๋ง์ด ์ ๋ฐํด์ผ ํจ.
ํผ์ฒ ํ๋๊ทธ(Feature Flags)¶
ํผ์ฒ ํ๋๊ทธ(ํผ์ฒ ํ ๊ธ, ํผ์ฒ ๊ฒ์ดํธ๋ผ๊ณ ๋ ํจ)๋ ์ฝ๋ ๋ฐฐํฌ์ ๊ธฐ๋ฅ ๊ฐ์์ฑ์ ๋ถ๋ฆฌํ๋ค. ์ฝ๋๊ฐ ๋นํ์ฑํ ์ํ๋ก ์ด์ ํ๊ฒฝ์ ์ถ์๋๊ณ , ๊ธฐ๋ฅ์ ์ค์ ์ ํตํด ํน์ ์ฌ์ฉ์, ๋น์จ, ๋๋ ์ง์ญ์ ๋ํด ํ์ฑํ๋๋ค.
# ์์: ์๋ฒ ์ธก ํผ์ฒ ํ๋๊ทธ ํ์ธ (์์ฌ ์ฝ๋)
if feature_flags.is_enabled("new_checkout_flow", user=current_user):
return render_new_checkout()
else:
return render_old_checkout()
ํผ์ฒ ํ๋๊ทธ๋ฅผ ํตํด: - A/B ํ ์คํธ: ๋น์ฆ๋์ค ๋ฉํธ๋ฆญ์ ์ํ ๋ ๋ฒ์ ๋น๊ต - ์ ์ง์ ์ถ์: 1% โ 10% โ 50% โ 100%๋ก ํ์ฑํ - ํฌ ์ค์์น: ๋ฐฐํฌ ์์ด ๋ฌธ์ ์๋ ๊ธฐ๋ฅ์ ์ฆ์ ๋นํ์ฑํ - ๋ฒ ํ ํ๋ก๊ทธ๋จ: ๋์ํ ์ฌ์ฉ์์๊ฒ๋ง ํ์ฑํ
ํผ์ฒ ํ๋๊ทธ๋ ์ ์คํ๊ฒ ๊ด๋ฆฌํด์ผ ํ๋ค: ์ ์ฒด ์ถ์ ํ ์ ๋ฆฌ๋์ง ์์ผ๋ฉด ์ค๋๋ ํ๋๊ทธ๋ค์ด ๊ธฐ์ ๋ถ์ฑ๋ก ์์ธ๋ค.
6. ์ฝ๋๋ก์์ ์ธํ๋ผ(Infrastructure as Code)¶
์ฝ๋๋ก์์ ์ธํ๋ผ(IaC, Infrastructure as Code)๋ ์๋ ํ๋ก์ธ์ค๋ ๋ํํ ๋๊ตฌ๊ฐ ์๋ ๊ธฐ๊ณ๊ฐ ์ฝ์ ์ ์๋ ์ค์ ํ์ผ์ ํตํด ์ธํ๋ผ๋ฅผ ๊ด๋ฆฌํ๊ณ ํ๋ก๋น์ ๋ํ๋ ์ค์ฒ์ด๋ค.
ํต์ฌ ์์น¶
๋ฉฑ๋ฑ์ฑ(Idempotency): ๊ฐ์ ์ค์ ์ ์ฌ๋ฌ ๋ฒ ์ ์ฉํด๋ ๊ฐ์ ๊ฒฐ๊ณผ๊ฐ ๋์จ๋ค. ํ๋ก๋น์ ๋ ์คํฌ๋ฆฝํธ๋ฅผ ๋ ๋ฒ ์คํํด๋ ์ค๋ณต ๋ฆฌ์์ค๊ฐ ์์ฑ๋์ด์๋ ์ ๋๋ค.
๋ฒ์ ๊ด๋ฆฌ: ์ธํ๋ผ ์ค์ ์ ์ ํ๋ฆฌ์ผ์ด์ ์ฝ๋์ ๊ฐ์ ์ ์ฅ์์ ์กด์ฌํ๋ค. ๋ณ๊ฒฝ์ ๊ฒํ ๋๊ณ , ํ ์คํธ๋๊ณ , ๊ฐ์ฌ๋๋ค.
์ ์ธ์ vs. ๋ช ๋ น์ : - ์ ์ธ์ (Declarative): ์ํ๋ ์ต์ข ์ํ๋ฅผ ๊ธฐ์ ; ๋๊ตฌ๊ฐ ๊ฑฐ๊ธฐ์ ๋๋ฌํ๋ ๋ฐฉ๋ฒ์ ํ์ (Terraform, CloudFormation, Kubernetes ๋งค๋ํ์คํธ) - ๋ช ๋ น์ (Imperative): ์ํํ ๋จ๊ณ๋ฅผ ๊ธฐ์ (Ansible ํ๋ ์ด๋ถ, ์ ธ ์คํฌ๋ฆฝํธ)
ํ๋ IaC๋ ์ํ์ ๋ฉฑ๋ฑ์ฑ์ ๋ํด ์ถ๋ก ํ๊ธฐ ๋ ์ฝ๊ธฐ ๋๋ฌธ์ ์ ์ธ์ ๋ฐฉํฅ์ผ๋ก ๊ฒฝํฅ์ด ์๋ค.
์ธํ๋ผ ํ ์คํธ: IaC ์ค์ ์ ์ ํ๋ฆฌ์ผ์ด์ ์ฝ๋์ ๋ง์ฐฌ๊ฐ์ง๋ก ํ ์คํธํด์ผ ํ๋ค โ ๋ชจ๋ ๋จ์ ํ ์คํธ, ํ ์คํธ ํ๊ฒฝ์์ ์ค์ ์ธํ๋ผ๋ฅผ ํ๋ก๋น์ ๋ํ๋ ํตํฉ ํ ์คํธ, ๊ทธ๋ฆฌ๊ณ ์ฝ๋ํ ์ ์ฑ (policy-as-code) ํ์ธ (์: "S3 ๋ฒํท์ ๊ณต๊ฐ ์ฝ๊ธฐ ๋ถ๊ฐ").
IaC ๋ฒ์ฃผ¶
| ๋ฒ์ฃผ | ๋ชฉ์ | ์์ |
|---|---|---|
| ํ๋ก๋น์ ๋(Provisioning) | ์ธํ๋ผ ๋ฆฌ์์ค ์์ฑ | Terraform, Pulumi, CloudFormation |
| ํ์ ๊ด๋ฆฌ(Configuration management) | ๊ธฐ์กด ์๋ฒ์์ ์ํํธ์จ์ด ๊ตฌ์ฑ | Ansible, Chef, Puppet |
| ์ปจํ ์ด๋ ์ค์ผ์คํธ๋ ์ด์ (Container orchestration) | ์ปจํ ์ด๋ ์ํฌ๋ก๋ ๊ด๋ฆฌ | Kubernetes, Nomad |
| ์ด๋ฏธ์ง ๋น๋(Image building) | ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ๋จธ์ ์ด๋ฏธ์ง ์์ฑ | Packer, Docker |
| ์ฝ๋ํ ์ ์ฑ (Policy as code) | ์ปดํ๋ผ์ด์ธ์ค ๊ท์น ์ํ | OPA, Sentinel, Checkov |
7. ๋ชจ๋ํฐ๋ง๊ณผ ๊ด์ฐฐ ๊ฐ๋ฅ์ฑ(Observability)¶
์ํํธ์จ์ด๊ฐ ๋ฐฐํฌ๋๋ฉด, ์ฌ๋ฐ๋ฅด๊ฒ ์๋ํ๊ณ ์๋์ง ์์์ผ ํ๋ค. ๊ด์ฐฐ ๊ฐ๋ฅ์ฑ(Observability)์ ์ธ๋ถ ์ถ๋ ฅ์์ ์์คํ ์ ๋ด๋ถ ์ํ๋ฅผ ์ถ๋ก ํ ์ ์๋ ์ ๋๋ค.
์ธ ๊ฐ์ง ๊ธฐ๋ฅ¶
๋ฉํธ๋ฆญ(Metrics)¶
๋ฉํธ๋ฆญ์ ์๊ฐ์ ๋ฐ๋ผ ์ํ๋ง๋ ์ซ์ ์ธก์ ๊ฐ์ด๋ค. ์ ์ฅ ๋น์ฉ์ด ์ ๋ ดํ๊ณ , ์ง๊ณํ๊ธฐ ์ฝ๊ณ , ๊ฒฝ๋ณด์ ์ ํฉํ๋ค.
๋ฒ์ฃผ (๋ฆฌ์์ค์ฉ USE ๋ฐฉ๋ฒ, ์๋น์ค์ฉ RED ๋ฐฉ๋ฒ): - ํ์ฉ๋ฅ (Utilization): ๋ฆฌ์์ค๊ฐ ์ผ๋ง๋ ๋ฐ์๊ฐ? (CPU %, ๋ฉ๋ชจ๋ฆฌ %) - ํฌํ(Saturation): ์ผ๋ง๋ ๋ง์ ์์ ์ด ๋๊ธฐ ์ค์ธ๊ฐ? (์์ฒญ ํ ๊น์ด) - ์ค๋ฅ(Errors): ์ค๋ฅ์จ์ ์ผ๋ง์ธ๊ฐ? (HTTP 5xx ๋น์จ) - ์๋(Rate): ์ด๋น ์์ฒญ ์๋? - ์ง์ ์๊ฐ(Duration): ์์ฒญ์ ์ผ๋ง๋ ๊ฑธ๋ฆฌ๋๊ฐ? (p50, p95, p99 ์ง์ฐ)
๋ก๊ทธ(Logs)¶
๋ก๊ทธ๋ ๊ฐ๋ณ ์ด๋ฒคํธ์ ํ์์คํฌํ ๊ธฐ๋ก์ด๋ค. ๋ฉํธ๋ฆญ์ด ์ ๊ณตํ ์ ์๋ ์ธ๋ถ ์ฌํญ์ ์ ๊ณตํ๋ค โ ์ ํํ ์ค๋ฅ ๋ฉ์์ง, ์์ฒญ ID, ์ํฅ๋ฐ์ ์ฌ์ฉ์.
์ข์ ๋ก๊น ์ค์ฒ: - ๊ตฌ์กฐํ๋ ๋ก๊น (Structured logging): ๋ก๊ทธ๋ฅผ ๊ธฐ๊ณ๊ฐ ํ์ฑํ ์ ์๋๋ก ์์ ํ ์คํธ๊ฐ ์๋ JSON์ผ๋ก ์ถ๋ ฅ - ์๊ด ID(Correlation IDs): ๋ชจ๋ ์์ฒญ์ ๊ณ ์ ID; ํด๋น ์์ฒญ์ ๋ชจ๋ ๋ก๊ทธ ์ค์ ์ด๋ฅผ ํฌํจ - ๋ก๊ทธ ๋ ๋ฒจ(Log levels): DEBUG, INFO, WARN, ERROR โ ๋ ๋ฒจ์ ์ผ๊ด์ฑ ์๊ฒ ์ฌ์ฉ; ๋ชจ๋ ๊ฒ์ ERROR๋ก ๋ก๊น ํ์ง ์์ - ๋ฏผ๊ฐํ ๋ฐ์ดํฐ ๋ก๊น ๊ธ์ง: ๋น๋ฐ๋ฒํธ, ํ ํฐ, ๊ฐ์ธ์ ๋ณด(PII)๋ ์ ๋ ๋ก๊ทธ์ ๋ํ๋๋ฉด ์ ๋จ
ํธ๋ ์ด์ค(Traces)¶
๋ถ์ฐ ํธ๋ ์ด์ฑ(Distributed tracing)์ ์์ฒญ์ด ์ฌ๋ฌ ์๋น์ค๋ฅผ ํตํด ํ๋ฅด๋ ๊ฒ์ ์ถ์ ํ๋ค. ๊ฐ ์๋น์ค๋ ์คํฌ(span) (์์ ์๊ฐ, ์ข ๋ฃ ์๊ฐ, ์๋น์ค ์ด๋ฆ, ์์ ์ด๋ฆ)์ ๊ธฐ๋กํ๊ณ , ์คํฌ๋ค์ ๊ฐ์ ํธ๋ ์ด์ค ID๋ก ์ฐ๊ฒฐ๋๋ค.
ํธ๋ ์ด์ค๋ ๋ตํ๋ค: "์ด ์์ฒญ์ด ์ ๋๋ ธ๋๊ฐ? ์ด๋ ์๋น์ค๊ฐ ๋ณ๋ชฉ์ด์๋๊ฐ?"
๊ฒฝ๋ณด ์์น¶
๋ชจ๋ ๋ฌธ์ ๊ฐ ์ฆ๊ฐ์ ์ธ ์ธ๊ฐ ๋์์ ํ์๋ก ํ์ง๋ ์๋๋ค. ์ข์ ๊ฒฝ๋ณด: - ์ฆ์์ ๊ฒฝ๋ณด, ์์ธ์ด ์๋: "์ค๋ฅ์จ > 1%"๋ณด๋ค "CPU > 80%" (๋์ CPU๊ฐ ์ฌ์ฉ์์๊ฒ ์ํฅ์ ์ฃผ์ง ์์ ์๋ ์์) - SLO ์๋ชจ์จ์ ์๊ณ๊ฐ ์ค์ : ์ง์ ๊ฐ๋ฅํ ์๋๋ณด๋ค ๋น ๋ฅด๊ฒ ์ค๋ฅ ์์ฐ์ ์๋ชจํ ๋ ๊ฒฝ๋ณด - ๋ ธ์ด์ฆ ์ต์ํ: ๊ฒฝ๋ณด ํผ๋ก๋ ์์ง๋์ด๊ฐ ๊ฒฝ๋ณด๋ฅผ ๋ฌด์ํ๊ฒ ๋ง๋ ๋ค โ ์๋ฒฝ 3์์ ๋๊ตฐ๊ฐ๋ฅผ ๊นจ์ฐ๋ ๋ชจ๋ ๊ฒฝ๋ณด๋ ์คํ ๊ฐ๋ฅํด์ผ ํจ - ๋ฐ๋ถ ๋งํฌ ํฌํจ: ๋ชจ๋ ๊ฒฝ๋ณด๋ ์ง๋จ ๋ฐ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์ค๋ช ํ๋ ๋ฐ๋ถ์ ๋งํฌํด์ผ ํจ
8. ์ฌ๊ณ ๊ด๋ฆฌ(Incident Management)¶
์ ์ค๊ณ๋ ์์คํ ๋ ์คํจํ๋ค. ์กฐ์ง์ด ์ฌ๊ณ ์ ์ด๋ป๊ฒ ๋์ํ๊ณ ๋ฐฐ์ฐ๋๋๊ฐ ์ ๋ขฐ์ฑ ๋ฌธํ๋ฅผ ์ ์ํ๋ค.
์จ์ฝ ์ค์ฒ¶
- ์ํ(Rotation): ํ์๋ค ์ฌ์ด์์ ์จ์ฝ ๋ถ๋ด์ ๊ณตํํ๊ฒ ๋ถ๋ฐฐ
- ์์ค์ปฌ๋ ์ด์ ๊ฒฝ๋ก(Escalation paths): ์ฌ๊ณ ๋ฅผ ํด๊ฒฐํ ์ ์์ ๋ ๋๊ตฌ์๊ฒ ์ฐ๋ฝํ ์ง ์ ์ ์๋๋ก ๋ช ํํ ์์ค์ปฌ๋ ์ด์ ์ฒด์ธ ์ ์
- ๋ฐ๋ถ(Runbooks): ์๋ ค์ง ์ฅ์ ๋ชจ๋์ ๋ํ ๋ฏธ๋ฆฌ ์์ฑ๋ ์ ์ฐจ โ ์จ์ฝ ์์ง๋์ด๊ฐ ๊ธฐ๋ณธ ์ง๋จ์ ์ฆํฅ์ ์ผ๋ก ํด์ผ ํ์ง ์์
- ์ฌ๊ณ ์ฌ๊ฐ๋ ์์ค(Incident severity levels): ์ฌ๊ฐ๋ ๊ธฐ์ค ์ ์ (์: SEV1 = ์์ ์ค๋จ, SEV2 = ์๋น์ค ์ ํ) ๊ทธ๋์ผ ๋์์ด ๋น๋ก์ ์
๋ฌด๊ฒฐ์ ์ฌํ ๊ฒํ (Blameless Postmortems)¶
์ฌํ ๊ฒํ (postmortem)๋ ๋ฌด์จ ์ผ์ด ์์๋์ง, ์, ์ฌ๋ฐ ๋ฐฉ์ง๋ฅผ ์ํด ๋ฌด์์ ํ ๊ฒ์ธ์ง๋ฅผ ๊ธฐ๋กํ๋ ๋ฌธ์๋ค. "๋ฌด๊ฒฐ์ (blameless)" ์์์ด๊ฐ ์ค์ํ๋ค: ๋ชฉํ๋ ๊ฐ์ธ ์ฒ๋ฒ์ด ์๋ ์ฒด๊ณ์ ๊ฐ์ ์ด๋ค.
์ ๋ฌด๊ฒฐ์ ์ธ๊ฐ? ์ฌ๋๋ค์ด ์ฒ๋ฒ์ ๋๋ ค์ํ ๋, ์ ๋ณด๋ฅผ ์จ๊ธด๋ค. ๋ฌด๊ฒฐ์ ๋ฌธํ๋ ์กฐ์ง์ด ์ฌ๊ณ ๋ฅผ ์ฌ๋ ๋ฌธ์ ๊ฐ ์๋ ์์คํ ๋ฌธ์ ๋ก ๋ค๋ฃจ๊ธฐ ๋๋ฌธ์ ์์ง๋์ด๋ค์ด โ ์์ ์ ์ค์๋ฅผ ํฌํจํ์ฌ โ ๋ฌด์จ ์ผ์ด ์์๋์ง ์์งํ๊ฒ ๋ณด๊ณ ํ๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค. ์ด ํฌ๋ช ์ฑ๋ง์ด ์ค์ ๋ก ๊ฐ์ ํ๋ ์ ์ผํ ๋ฐฉ๋ฒ์ด๋ค.
ํ์ค ์ฌํ ๊ฒํ ๊ตฌ์กฐ:
์ฌ๊ณ ์์ฝ
- ๋ ์ง, ๊ธฐ๊ฐ, ์ฌ๊ฐ๋, ์ํฅ๋ฐ์ ์์คํ
ํ์๋ผ์ธ
- ์ด๋ฒคํธ์ ์๊ฐ์ ์์ (UTC ํ์์คํฌํ)
- ํ์ง, ์์ค์ปฌ๋ ์ด์
, ์ํ, ํด๊ฒฐ ํฌํจ
๊ทผ๋ณธ ์์ธ ๋ถ์
- ํธ๋ฆฌ๊ฑฐ ์์ธ์ ๋ฌด์์ด์๋๊ฐ?
- ๊ธฐ์ฌ ์์ธ์ ๋ฌด์์ด์๋๊ฐ?
- "5 Why" ๋๋ ๊ฒฐํจ ํธ๋ฆฌ ๋ถ์ ์ฌ์ฉ
์ํฅ
- ์ํฅ๋ฐ์ ์ฌ์ฉ์, ์์ต ์ํฅ, SLO ์๋ชจ
ํ๋ ํญ๋ชฉ
- ๊ฐ ํญ๋ชฉ: ์ค๋ช
, ๋ด๋น์, ๊ธฐํ, ์ฐ์ ์์
- ์ฆ๊ฐ์ ์ํ vs. ์ฅ๊ธฐ์ ์์ ๊ตฌ๋ณ
์ป์ ๊ตํ
- ์๋ ๊ฒ์? (ํ์ง, ๋์)
- ๊ฐ์ ํ ์ ์๋ ๊ฒ์?
- ์ฐ๋ฆฌ๋ฅผ ๋๋ผ๊ฒ ํ ๊ฒ์?
์ฌํ ๊ฒํ ์ ํ๋ ํญ๋ชฉ์ ์ถ์ ๋๊ณ ์๋ฃ๋์ด์ผ ํ๋ค. ๊ฐ์ ๋ชฉ๋ก์ ๋ง๋ค์์ง๋ง ์๋ฌด๊ฒ๋ ๋ณํ์ง ์๋ ์ฌํ ๊ฒํ ๋ ์์ ์๋ ๊ฒ๋ณด๋ค ๋์๋ค โ ์กฐ์ง์ด ์ค์ ๋ก ๊ฐ์ ์ ๊ด์ฌ์ด ์๋ค๋ ์ ํธ๋ฅผ ๋ณด๋ธ๋ค.
9. DORA ๋ฉํธ๋ฆญ¶
Dr. Nicole Forsgren, Jez Humble, Gene Kim์ด ์ด๋๋ DevOps Research and Assessment(DORA) ํ๋ก๊ทธ๋จ์ ์ํํธ์จ์ด ๋ฉํ ์ฑ๊ณผ์ ๋ํ ๊ฐ์ฅ ํฐ ์ง์์ ์ธ ๊ณผํ์ ์ฐ๊ตฌ๋ค. ์ด ์ฐ๊ตฌ๋ ๊ณ ์ฑ๊ณผ ์์ง๋์ด๋ง ์กฐ์ง๊ณผ ์ ์ฑ๊ณผ ์กฐ์ง์ ๊ตฌ๋ณํ๋ 4๊ฐ์ง ํต์ฌ ๋ฉํธ๋ฆญ์ ํ์ ํ๋ค.
4๊ฐ์ง DORA ๋ฉํธ๋ฆญ¶
| ๋ฉํธ๋ฆญ | ์ ์ | ์๋ฆฌํธ ์ํ์ | ์ ์ฑ๊ณผ ์ํ์ |
|---|---|---|---|
| ๋ฐฐํฌ ๋น๋(Deployment Frequency) | ์ด์ ํ๊ฒฝ์ ์ฝ๋๊ฐ ๋ฐฐํฌ๋๋ ๋น๋ | ํ๋ฃจ ์ฌ๋ฌ ๋ฒ | ์ 1ํ ๋ฏธ๋ง |
| ๋ณ๊ฒฝ ๋ฆฌ๋ ํ์(Lead Time for Changes) | ์ฝ๋ ์ปค๋ฐ์์ ์ด์ ํ๊ฒฝ์์ ์คํ๊น์ง์ ์๊ฐ | 1์๊ฐ ๋ฏธ๋ง | 1โ6๊ฐ์ |
| ๋ณ๊ฒฝ ์คํจ์จ(Change Failure Rate) | ์ด์ ์ฌ๊ณ ๋ฅผ ์ผ์ผํค๋ ๋ฐฐํฌ์ ๋น์จ | 0โ15% | 46โ60% |
| ์๋น์ค ๋ณต๊ตฌ ์๊ฐ(Time to Restore, MTTR) | ์ด์ ์ฅ์ ์์ ๋ณต๊ตฌํ๋ ์๊ฐ | 1์๊ฐ ๋ฏธ๋ง | 1์ฃผ โ 1๊ฐ์ |
๋ฉํธ๋ฆญ์ด ๋๋ฌ๋ด๋ ๊ฒ¶
๋ฐฐํฌ ๋น๋์ ๋ฆฌ๋ ํ์์ ์ฒ๋ฆฌ๋(throughput)์ ์ธก์ ํ๋ค โ ์์ด๋์ด์์ ์ด์๊น์ง ๊ฐ์น๊ฐ ์ผ๋ง๋ ๋น ๋ฅด๊ฒ ํ๋ฅด๋๊ฐ.
๋ณ๊ฒฝ ์คํจ์จ๊ณผ MTTR์ ์์ ์ฑ(stability)์ ์ธก์ ํ๋ค โ ์์คํ ์ด ์ผ๋ง๋ ์ ๋ขฐํ ์ ์๊ณ ์ผ๋ง๋ ๋น ๋ฅด๊ฒ ๋ณต๊ตฌ๋๋๊ฐ.
DORA ์ฐ๊ตฌ์ ๋ฐ์ง๊ด์ ๋ฐ๊ฒฌ: ๋์ ์ฒ๋ฆฌ๋๊ณผ ๋์ ์์ ์ฑ์ ์๊ด๊ด๊ณ๊ฐ ์์ผ๋ฉฐ ํธ๋ ์ด๋์คํ๊ฐ ์๋๋ค. ์๋ฆฌํธ ํ์ ๋ ์์ฃผ ๋ฐฐํฌํ๋ฉฐ ๋์์ ์คํจ๊ฐ ์ ๋ค. ์ด๋ ์ฆ์ ์๊ท๋ชจ ๋ณ๊ฒฝ์ด ๋ณธ์ง์ ์ผ๋ก ๋๋ฌธ ๋๊ท๋ชจ ๋ณ๊ฒฝ๋ณด๋ค ์ํ์ด ์ ๊ณ , ๋น ๋ฅธ ํผ๋๋ฐฑ ๋ฃจํ๊ฐ ๋ฌธ์ ๋ฅผ ๋ ์ผ์ฐ ์ก๊ธฐ ๋๋ฌธ์ด๋ค.
DORA ๋ฉํธ๋ฆญ ์ฌ์ฉ¶
- ์ฑ๊ณผ ํ๊ฐ๊ฐ ์๋ ์ง๋จ ์ ํธ๋ก ์ฌ์ฉํ๋ค. ๋ฐฐํฌ ๋น๋๋ฅผ ๊ฐ๋ณ ์์ง๋์ด๋ฅผ ์์ ๋งค๊ธฐ๋ ๋ฐ ์ฌ์ฉํ์ง ์๋๋ค.
- ์ ๋๊ฐ๋ณด๋ค ์๊ฐ์ ๋ฐ๋ฅธ ์ถ์ธ๊ฐ ๋ ์ ์ฉํ๋ค. ํ์ด ๊ฐ์ ๋๊ณ ์๋๊ฐ?
- DORA ๋ฉํธ๋ฆญ์ ์ง์ฐ ์งํ โ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ์ํ๋ค. ์ด๋ฅผ ๊ฐ์ ํ๋ ค๋ฉด ์ ํ ์ค์ฒ์ ์ง์คํ๋ค (CI, ํ ์คํธ ์ปค๋ฒ๋ฆฌ์ง, ๋ฐฐํฌ ์๋ํ, ๊ด์ฐฐ ๊ฐ๋ฅ์ฑ).
10. DevOps ์ฑ์๋ ๋ชจ๋ธ¶
์กฐ์ง์ DevOps๋ฅผ ์ ์ง์ ์ผ๋ก ์ฑํํ๋ค. ์ฑ์๋ ๋ชจ๋ธ์ ํ์ด ํ์ฌ ์ด๋์ ์๊ณ ๋ค์์ ๋ฌด์์ ํด์ผ ํ๋์ง ์ดํดํ๋ ๋ฐ ๋์์ ์ค๋ค.
| ๋ ๋ฒจ | ๋ช ์นญ | ํน์ง |
|---|---|---|
| 1 | ์ด๊ธฐ(Initial) | ์๋ ๋ฐฐํฌ, ์ ํ๋ ์๋ํ, ์ฌ์ผ๋ก ํ, ์ฌ๊ณ ๋ ์๊ธฐ |
| 2 | ๊ฐ๋ฐ ์ค(Developing) | ๊ธฐ๋ณธ CI ํ์ดํ๋ผ์ธ, ์๋ํ ํ ์คํธ, ์ผ๋ถ ๊ณต์ ์์ ๊ถ, ์ฌํ ๊ฒํ ๋ฐ์ |
| 3 | ์ ์๋จ(Defined) | ์ง์์ ๋ฉํ, IaC, SLO ์๋ ๋ชจ๋ํฐ๋ง, ๋ฌด๊ฒฐ์ ์ฌํ ๊ฒํ , ์ฃผ๊ฐ+ ๋ฐฐํฌ ๋น๋ |
| 4 | ๊ด๋ฆฌ๋จ(Managed) | ์ง์์ ๋ฐฐํฌ, ์์ ํ ๊ด์ฐฐ ๊ฐ๋ฅ์ฑ, DORA ๋ฉํธ๋ฆญ ์ถ์ , ์ค๋ฅ ์์ฐ ์ฌ์ฉ |
| 5 | ์ต์ ํ(Optimizing) | ์คํ ๋ฌธํ, ์นด์ค์ค ์์ง๋์ด๋ง, ์๋ฆฌํธ DORA ๋ฉํธ๋ฆญ, ์ค์ฒ์ ์ฐ์ ์ ํ์ |
๋๋ถ๋ถ์ ์กฐ์ง์ ๋ ๋ฒจ 2โ3์ ์๋ค. ๋ ๋ฒจ 3์์ 4๋ก ์ด๋ํ๋ ๊ฒ์ ์ผ๋ฐ์ ์ผ๋ก ์ถ๊ฐ ๋๊ตฌ๋ณด๋ค ๋ฌธํ์ ๋ณํ๊ฐ ๋ ํ์ํ๋ค.
11. DevOps์ ๋ฌธํ์ ์ธก๋ฉด¶
DevOps์์ ๊ธฐ์ ์ ์ฌ์ด ๋ถ๋ถ์ด๋ค. ๋ฌธํ๊ฐ ์ด๋ ค์ด ๋ถ๋ถ์ด๋ค.
์ฌ์ผ๋ก ํ๋ฌผ๊ธฐ¶
์ ํต์ ์ธ ์กฐ์ง์ ๊ฐ๋ฐ์, QA, ๋ณด์, ์ด์์ ์๋ก ๋ค๋ฅธ ๊ด๋ฆฌ์, ์๋ก ๋ค๋ฅธ ์ ์ธ, ์๋ก ๋ค๋ฅธ ์ดํ๋ฅผ ๊ฐ์ง ๋ณ๋ ๋ถ์๋ก ๋ถ๋ฆฌํ๋ค. DevOps๋ ์ด ๊ทธ๋ฃน๋ค์ด ๊ณต์ ๋ ๊ฒฐ๊ณผ๋ฅผ ํฅํด ํตํฉ๋ ํ์ผ๋ก ์์ ํ๋๋ก ์๊ตฌํ๋ค.
์ฌ์ผ๋ก๋ฅผ ํ๋ฌผ๊ธฐ ์ํด์๋: - ๊ณต์ ๋ชฉํ(Shared goals): ํตํฉ๋ ํ์ ์ถฉ๋ํ๋ ๋ณ๋ ๋ถ์ ๋ชฉํ๊ฐ ์๋ ํ๋์ OKR ์ธํธ๋ฅผ ๊ฐ์ง - ๋ด์ฌ๋ ์ ๋ฌธ์ฑ(Embedded expertise): ๋ณด์๊ณผ ์ด์ ์ ๋ฌธ์ฑ์ด ๋ณ๋ ์น์ธ ๋๊ธฐ์ด์ด ์๋ ์ ํ ํ ๋ด์ ์กด์ฌ - ์ง๋ฌด ๊ตํ ๋ฐ ์๋์(Job rotation and shadowing): ๊ฐ๋ฐ์๊ฐ ์จ์ฝ ์๊ฐ์ ๋ณด๋ด๊ณ ; ์ด์ ์์ง๋์ด๊ฐ CI ํ์ดํ๋ผ์ธ ๊ฐ๋ฐ์ ๊ธฐ์ฌ - ๊ณต์ ๋๊ตฌ(Shared tools): ๊ณตํต ๊ด์ฐฐ ๊ฐ๋ฅ์ฑ ํ๋ซํผ, ๊ณตํต ๋ฐฐํฌ ํ๋ซํผ
๊ณต์ ์ฑ ์¶
"๋น์ ์ด ๋ง๋ค๋ฉด, ๋น์ ์ด ์คํํ๋ค(You build it, you run it)" โ Amazon CTO Werner Vogels, 2006. ์๋น์ค๋ฅผ ๊ตฌ์ถํ๋ ํ์ด ์ด์ ํ๊ฒฝ์์ ์๋น์ค๋ฅผ ์ด์ํ ์ฑ ์์ด ์๋ค. ์ด๋ ๊ฐ๋ฐ์๊ฐ ์ด์ ๊ฐ๋ฅ์ฑ์ ๊ด์ฌ์ ๊ฐ๋๋ก ๊ฐ์ ํ๋ค: ๊ณ์ธก, ์ฐ์ํ ์ ํ(graceful degradation), ๋ฐ๋ถ, ๊ฒฝ๋ณด.
๊ณต์ ์ฑ ์์ ๋ชจ๋ ๊ฐ๋ฐ์๊ฐ 24/7 ์จ์ฝ์ด๋ผ๋ ์๋ฏธ๊ฐ ์๋๋ค. ์ด๊ฒ์ด ์๋ฏธํ๋ ๋ฐ: - ๊ฐ๋ฐ์๊ฐ ์์ ์ ์๋น์ค์ ๋ํ ์จ์ฝ ์ํ์ ์ฐธ์ฌ - ์์ง๋์ด๊ฐ ์ด์ ๊ฐ๋ฅํ ์์คํ ์ ์ค๊ณ (๊ธฐ๋ฅ์ ์ผ ๋ฟ๋ง ์๋๋ผ) - ์ ๋ขฐ์ฑ์ ์ฌํ ์๊ฐ์ด ์๋ ๊ธฐ๋ฅ
์คํจ์์ ๋ฐฐ์ฐ๊ธฐ¶
๊ณ ์ฑ๊ณผ DevOps ์กฐ์ง์ ๋ชจ๋ ์คํจ๋ฅผ ๋ฐฐ์์ ๊ธฐํ๋ก ๋ค๋ฃฌ๋ค. ์ด๋ ์ฌ๋ฆฌ์ ์์ โ ์ฒ๋ฒ ๋๋ ค์ ์์ด ๋ฐ์ธํ๊ณ , ์ค์๋ฅผ ์ธ์ ํ๊ณ , ์ง๋ฌธํ ์ ์๋ค๋ ๋ฏฟ์ โ ์ ํ์๋ก ํ๋ค.
๋ฆฌ๋๋ ๋ค์์ ํตํด ์ฌ๋ฆฌ์ ์์ ์ ๊ฐ๋ฅํ๊ฒ ํ๋ค: - ์ง์ ๋ฌด๊ฒฐ์ ์ฌํ ๊ฒํ ๋ฅผ ์ํํ๊ณ ํ๋์ ๋ชจ๋ธ๋ง - ์์ง๋์ด๊ฐ ๋ฌธ์ ๋ฅผ ์กฐ๊ธฐ์ ํ์งํ๊ณ ๋ณด๊ณ ํ ๋ ์ถํ - ์ฌ๊ณ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ธ ์ฑ๊ณผ ํ๊ฐ์ ์ ๋ ์ฌ์ฉํ์ง ์์ - ๊ณต๊ฐ์ ์ผ๋ก ์์ ์ ์ค์๋ฅผ ์ธ์
์์ฝ¶
DevOps๋ ์ํํธ์จ์ด ๊ฐ๋ฐ๊ณผ ์ด์ ์ฌ์ด์ ๊ฐ๊ฒฉ์ ๋ฉ์ ๋น ๋ฅด๊ณ ์ ๋ขฐํ ์ ์๋ ์ํํธ์จ์ด ๋ฉํ์ ๊ฐ๋ฅํ๊ฒ ํ๋ ๋ฌธํ์ ์ค์ฒ์ ์งํฉ์ด๋ค โ ๋๊ตฌ๊ฐ ์๋๋ค.
ํต์ฌ ๊ฐ๋ : - CALMS (๋ฌธํ, ์๋ํ, ๋ฆฐ, ์ธก์ , ๊ณต์ )๋ DevOps ์ฑ์๋์ ์ฐจ์์ ์ค๋ช ํจ - CI๋ ๋ชจ๋ ์ฝ๋ ๋ณ๊ฒฝ์ด ์๋ํ๋ ๋น๋ ๋ฐ ํ ์คํธ ํ์ดํ๋ผ์ธ์ผ๋ก ๊ฒ์ฆ๋จ์ ๋ณด์ฅ; ๊นจ์ง ๋น๋๋ ์ฆ์ ์์ - ์ง์์ ๋ฉํ์ ์ํํธ์จ์ด๊ฐ ํญ์ ๋ฐฐํฌ ๊ฐ๋ฅํจ์ ์๋ฏธ; ์ง์์ ๋ฐฐํฌ๋ ์๋์ผ๋ก ๋ฐฐํฌ๋จ์ ์๋ฏธ - ๋ฐฐํฌ ์ ๋ต (๋กค๋ง, ๋ธ๋ฃจ-๊ทธ๋ฆฐ, ์นด๋๋ฆฌ, ํผ์ฒ ํ๋๊ทธ)์ ๋ฆด๋ฆฌ์ค ์ค ์ํ์ ๊ด๋ฆฌ - IaC๋ ์ธํ๋ผ ์ค์ ์ ์ ํ๋ฆฌ์ผ์ด์ ์ฝ๋์ ๊ฐ์ ๊ท์จ๋ก ๋ค๋ฃธ - ๊ด์ฐฐ ๊ฐ๋ฅ์ฑ (๋ฉํธ๋ฆญ, ๋ก๊ทธ, ํธ๋ ์ด์ค)์ ์ด์ ์์คํ ์ ์ดํดํ๋ ๋ฐ ํ์ํ ๊ฐ์์ฑ์ ์ ๊ณต - ๋ฌด๊ฒฐ์ ์ฌํ ๊ฒํ ๋ ๊ฐ์ธ์ ์ฒ๋ฒํ์ง ์๊ณ ์คํจ๋ฅผ ๋ฐฐ์์ ๊ธฐํ๋ก ์ ํ - DORA ๋ฉํธ๋ฆญ์ ์์ง๋์ด๋ง ์ฑ๊ณผ์ ๋ํ ์ฆ๊ฑฐ ๊ธฐ๋ฐ ์ฒ๋๋ฅผ ์ ๊ณต; ๋์ ์ฒ๋ฆฌ๋๊ณผ ๋์ ์์ ์ฑ์ ์๊ด๊ด๊ณ๊ฐ ์์ผ๋ฉฐ ํธ๋ ์ด๋์คํ๊ฐ ์๋
์ฐ์ต ๋ฌธ์ ¶
-
ํ์ดํ๋ผ์ธ ์ค๊ณ: ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฐฑ์๋๊ฐ ์๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์ํ CI/CD ํ์ดํ๋ผ์ธ์ ์ค์ผ์นํ๋ผ. ๋ชจ๋ ๋จ๊ณ, ๊ฐ ๋จ๊ณ์์ ํ์ธํ๋ ๊ฒ, ๋๋ต ์์ ์๊ฐ, ํด๋น ๋จ๊ณ์์์ ์คํจ ๊ธฐ์ค์ ๋์ดํ๋ผ. ๋จ๊ณ ์์๋ฅผ ์ ๋นํํ๋ผ.
-
๋ฐฐํฌ ์ ๋ต ์ ํ: ํ์ด 99.99% ๊ฐ๋ ์๊ฐ SLO๋ฅผ ๊ฐ์ง ๊ฒฐ์ ์ฒ๋ฆฌ ์๋น์ค๋ฅผ ์ด์ํ๊ณ ์๋ค. ๋ฐ์ดํฐ๋ฒ ์ด์ค ์คํค๋ง๋ฅผ ๋ณ๊ฒฝํ๋ ์ ๋ฒ์ ์ ๋ฐฐํฌํด์ผ ํ๋ค. ์ด๋ค ๋ฐฐํฌ ์ ๋ต์ ๊ถ์ฅํ๊ฒ ๋๊ฐ, ๊ทธ ์ด์ ๋? ์คํค๋ง ๋ณ๊ฒฝ์ด ์ด๋ค ๋ณต์ก์ฑ์ ๋์ ํ๋๊ฐ?
-
DORA ํ๊ฐ: ํ์ด ์ 1ํ ์ด์ ํ๊ฒฝ์ ๋ฐฐํฌํ๊ณ , ์ปค๋ฐ์์ ์ด์๊น์ง 3์ฃผ๊ฐ ๊ฑธ๋ฆฌ๊ณ , 30% ๋ณ๊ฒฝ ์คํจ์จ์ ๊ฐ์ง๋ฉฐ, ์ฌ๊ณ ์์ ๋ณต๊ตฌํ๋ ๋ฐ ํ๊ท 2์ผ์ด ๊ฑธ๋ฆฐ๋ค. DORA ์ฑ์๋ ๋ฒ์ฃผ๋ฅผ ์ฌ์ฉํ์ฌ ์ด ํ์ ๋ถ๋ฅํ๋ผ. ๊ฐ์ ์ ์ํด ์ด๋ ๋ฉํธ๋ฆญ์ ๋จผ์ ๋ชฉํ๋ก ์ผ๊ฒ ๋๊ฐ, ๊ทธ๋ฆฌ๊ณ ์ด๋ค ๊ตฌ์ฒด์ ์ธ ์ค์ฒ์ ๊ถ์ฅํ๊ฒ ๋๊ฐ?
-
์ฌํ ๊ฒํ ์์ฑ: ํธ๋ํฝ ๊ธ์ฆ ํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ฒฐ ํ์ด ์์ง๋์ด ์ ์์๊ฑฐ๋ ์ฌ์ดํธ๊ฐ ๋ธ๋ ํ๋ผ์ด๋ฐ์ด์ 45๋ถ ์ค๋จ์ ๊ฒฝํํ๋ค. ์ฌํ ๊ฒํ ๊ฐ์๋ฅผ ์์ฑํ๋ผ: ํ์๋ผ์ธ(๊ทธ๋ด๋ฏํ ์ธ๋ถ ์ฌํญ ์์ฑ), "5 Why"๋ฅผ ์ฌ์ฉํ ๊ทผ๋ณธ ์์ธ ๋ถ์, ์ํฅ ์ถ์ , ๊ทธ๋ฆฌ๊ณ ๋ด๋น์์ ์ฐ์ ์์๊ฐ ์๋ ์ต์ 4๊ฐ์ ํ๋ ํญ๋ชฉ.
-
๋ฌด๊ฒฐ์ ๋ฌธํ ๋ถ์: ํ ๋ฆฌ๋๊ฐ ๋งํ๋ค: "์ฐ๋ฆฌ์ ์ฌํ ๊ฒํ ๋ ํญ์ ์ค์๋ฅผ ํ ์ฌ๋์ ํ์ ํ๋ค. ์ฐ๋ฆฌ๋ ์ฑ ์์ด ํ์ํ๋ค." ์ฑ ์๊ณผ ๋น๋์ ์ฐจ์ด๋ฅผ ์ค๋ช ํ๊ณ , ๋ฌด๊ฒฐ์ ์ฌํ ๊ฒํ ๊ฐ ์ ์ค์ ๋ก ๋ ๋์ ๊ฒฐ๊ณผ๋ฅผ ์ด๋๋์ง ์ค๋ช ํ๋ ๋ต๋ณ์ ์์ฑํ๋ผ. ์ฌ๋ฆฌ์ ์์ ๊ณผ ์ฌ๋๋ค์ด ์ฒ๋ฒ์ ๋๋ ค์ํ ๋ ์ ๋ณด ํ๋ฆ์ ๋ฌด์จ ์ผ์ด ์ผ์ด๋๋์ง๋ฅผ ์ฐธ์กฐํ๋ผ.
๋ ์ฝ์๊ฑฐ๋ฆฌ¶
- ๋์:
- The Phoenix Project โ Gene Kim, Kevin Behr, George Spafford (DevOps ์์น์ ๋ํ ์์ค ์คํ์ผ ์๊ฐ)
- Accelerate: The Science of Lean Software and DevOps โ Nicole Forsgren, Jez Humble, Gene Kim (DORA ๋ฉํธ๋ฆญ ๋ค์ ์ฐ๊ตฌ)
- The DevOps Handbook โ Gene Kim, Jez Humble, Patrick Debois, John Willis (ํฌ๊ด์ ์ธ ์ค์ฒ ๊ฐ์ด๋)
-
Site Reliability Engineering โ Google (sre.google์์ ๋ฌด๋ฃ ์จ๋ผ์ธ) โ SRE ์ค์ฒ ์์ธ
-
์ฐ๊ตฌ ๋ฐ ๋ณด๊ณ ์:
- DORA State of DevOps Report (์ฐ๊ฐ, dora.dev) โ ์์ง๋์ด๋ง ์ฑ๊ณผ ๋ฒค์น๋งํฌ ๋ฐ์ดํฐ
-
"Psychological Safety and Learning Behavior in Work Teams" โ Amy Edmondson, ASQ 1999
-
์ํฐํด:
- "Continuous Delivery" โ Martin Fowler (martinfowler.com/bliki/ContinuousDelivery.html)
- "Feature Toggles" โ Pete Hodgson (martinfowler.com)
- "CALMS: A DevOps Framework" โ Atlassian ๋ฌธ์
- "Blameless PostMortems and a Just Culture" โ John Allspaw, Etsy Engineering Blog
์ด์ : ํ๋ก์ธ์ค ๊ฐ์ | ๋ค์: ๊ธฐ์ ๋ฌธ์ํ