๋ ˆ์Šจ 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 ์›์น™

  1. ๋‹จ์ผ ์†Œ์Šค ์ €์žฅ์†Œ ์œ ์ง€: ๋ชจ๋“  ์ฝ”๋“œ๊ฐ€ ํ•˜๋‚˜์˜ ๋ฉ”์ธ ๋ธŒ๋žœ์น˜์— ์žˆ๊ฑฐ๋‚˜ ์ž์ฃผ ๋ณ‘ํ•ฉ๋จ
  2. ๋นŒ๋“œ ์ž๋™ํ™”: ๋ˆ„๊ตฌ๋“  ์ฝ”๋“œ๋ฅผ ์ฒดํฌ์•„์›ƒํ•˜๊ณ  ๋‹จ์ผ ๋ช…๋ น์œผ๋กœ ๋นŒ๋“œํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•จ
  3. ๋นŒ๋“œ๋ฅผ ์ž์ฒด ํ…Œ์ŠคํŠธ๋กœ: ๋นŒ๋“œ๊ฐ€ ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•˜๊ณ , ๋นŒ๋“œ ํ†ต๊ณผ๋Š” ์ฝ”๋“œ๊ฐ€ ์˜ฌ๋ฐ”๋ฆ„์„ ์˜๋ฏธํ•จ
  4. ๋ชจ๋“  ์ปค๋ฐ‹์ด ๋นŒ๋“œ๋ฅผ ํŠธ๋ฆฌ๊ฑฐ: ํŒŒ์ดํ”„๋ผ์ธ์ด ๋ชจ๋“  ํ‘ธ์‹œ์—์„œ ์ž๋™์œผ๋กœ ์‹คํ–‰๋จ
  5. ๊นจ์ง„ ๋นŒ๋“œ ์ฆ‰์‹œ ์ˆ˜์ •: ๊นจ์ง„ ๋ฉ”์ธ ๋ธŒ๋žœ์น˜๋Š” ์ตœ์šฐ์„  ์ˆœ์œ„ โ€” "๋‚˜์ค‘์— ๊ณ ์น ๊ฒŒ"๊ฐ€ ์•„๋‹˜
  6. ๋นŒ๋“œ๋ฅผ ๋น ๋ฅด๊ฒŒ ์œ ์ง€: 45๋ถ„์ด ๊ฑธ๋ฆฌ๋Š” CI ํŒŒ์ดํ”„๋ผ์ธ์€ ๋‚˜์œ ํ”ผ๋“œ๋ฐฑ์„ ์ œ๊ณต โ€” ํ•ต์‹ฌ ํŒŒ์ดํ”„๋ผ์ธ์€ 10๋ถ„ ๋ฏธ๋งŒ ๋ชฉํ‘œ
  7. ์šด์˜๊ณผ ์œ ์‚ฌํ•œ ํ™˜๊ฒฝ์—์„œ ํ…Œ์ŠคํŠธ: ํ…Œ์ŠคํŠธ์™€ ์šด์˜ ํ™˜๊ฒฝ ๊ฐ„์˜ ์ฐจ์ด๊ฐ€ ์œ„ํ—˜์„ ๋„์ž…ํ•จ
  8. ๊ฒฐ๊ณผ๋ฅผ ๊ฐ€์‹œ์ ์œผ๋กœ: ๋นŒ๋“œ ์ƒํƒœ๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ๋Œ€์‹œ๋ณด๋“œ๋Š” ํŒ€ ๊ฑด๊ฐ• ์ง€ํ‘œ์ž„

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 ๋ฉ”ํŠธ๋ฆญ์€ ์—”์ง€๋‹ˆ์–ด๋ง ์„ฑ๊ณผ์— ๋Œ€ํ•œ ์ฆ๊ฑฐ ๊ธฐ๋ฐ˜ ์ฒ™๋„๋ฅผ ์ œ๊ณต; ๋†’์€ ์ฒ˜๋ฆฌ๋Ÿ‰๊ณผ ๋†’์€ ์•ˆ์ •์„ฑ์€ ์ƒ๊ด€๊ด€๊ณ„๊ฐ€ ์žˆ์œผ๋ฉฐ ํŠธ๋ ˆ์ด๋“œ์˜คํ”„๊ฐ€ ์•„๋‹˜


์—ฐ์Šต ๋ฌธ์ œ

  1. ํŒŒ์ดํ”„๋ผ์ธ ์„ค๊ณ„: ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ฐฑ์—”๋“œ๊ฐ€ ์žˆ๋Š” ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์œ„ํ•œ CI/CD ํŒŒ์ดํ”„๋ผ์ธ์„ ์Šค์ผ€์น˜ํ•˜๋ผ. ๋ชจ๋“  ๋‹จ๊ณ„, ๊ฐ ๋‹จ๊ณ„์—์„œ ํ™•์ธํ•˜๋Š” ๊ฒƒ, ๋Œ€๋žต ์†Œ์š” ์‹œ๊ฐ„, ํ•ด๋‹น ๋‹จ๊ณ„์—์„œ์˜ ์‹คํŒจ ๊ธฐ์ค€์„ ๋‚˜์—ดํ•˜๋ผ. ๋‹จ๊ณ„ ์ˆœ์„œ๋ฅผ ์ •๋‹นํ™”ํ•˜๋ผ.

  2. ๋ฐฐํฌ ์ „๋žต ์„ ํƒ: ํŒ€์ด 99.99% ๊ฐ€๋™ ์‹œ๊ฐ„ SLO๋ฅผ ๊ฐ€์ง„ ๊ฒฐ์ œ ์ฒ˜๋ฆฌ ์„œ๋น„์Šค๋ฅผ ์šด์˜ํ•˜๊ณ  ์žˆ๋‹ค. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์Šคํ‚ค๋งˆ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ์ƒˆ ๋ฒ„์ „์„ ๋ฐฐํฌํ•ด์•ผ ํ•œ๋‹ค. ์–ด๋–ค ๋ฐฐํฌ ์ „๋žต์„ ๊ถŒ์žฅํ•˜๊ฒ ๋Š”๊ฐ€, ๊ทธ ์ด์œ ๋Š”? ์Šคํ‚ค๋งˆ ๋ณ€๊ฒฝ์ด ์–ด๋–ค ๋ณต์žก์„ฑ์„ ๋„์ž…ํ•˜๋Š”๊ฐ€?

  3. DORA ํ‰๊ฐ€: ํŒ€์ด ์›” 1ํšŒ ์šด์˜ ํ™˜๊ฒฝ์— ๋ฐฐํฌํ•˜๊ณ , ์ปค๋ฐ‹์—์„œ ์šด์˜๊นŒ์ง€ 3์ฃผ๊ฐ€ ๊ฑธ๋ฆฌ๊ณ , 30% ๋ณ€๊ฒฝ ์‹คํŒจ์œจ์„ ๊ฐ€์ง€๋ฉฐ, ์‚ฌ๊ณ ์—์„œ ๋ณต๊ตฌํ•˜๋Š” ๋ฐ ํ‰๊ท  2์ผ์ด ๊ฑธ๋ฆฐ๋‹ค. DORA ์„ฑ์ˆ™๋„ ๋ฒ”์ฃผ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด ํŒ€์„ ๋ถ„๋ฅ˜ํ•˜๋ผ. ๊ฐœ์„ ์„ ์œ„ํ•ด ์–ด๋А ๋ฉ”ํŠธ๋ฆญ์„ ๋จผ์ € ๋ชฉํ‘œ๋กœ ์‚ผ๊ฒ ๋Š”๊ฐ€, ๊ทธ๋ฆฌ๊ณ  ์–ด๋–ค ๊ตฌ์ฒด์ ์ธ ์‹ค์ฒœ์„ ๊ถŒ์žฅํ•˜๊ฒ ๋Š”๊ฐ€?

  4. ์‚ฌํ›„ ๊ฒ€ํ†  ์ž‘์„ฑ: ํŠธ๋ž˜ํ”ฝ ๊ธ‰์ฆ ํ›„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ ํ’€์ด ์†Œ์ง„๋˜์–ด ์ „์ž์ƒ๊ฑฐ๋ž˜ ์‚ฌ์ดํŠธ๊ฐ€ ๋ธ”๋ž™ ํ”„๋ผ์ด๋ฐ์ด์— 45๋ถ„ ์ค‘๋‹จ์„ ๊ฒฝํ—˜ํ–ˆ๋‹ค. ์‚ฌํ›„ ๊ฒ€ํ†  ๊ฐœ์š”๋ฅผ ์ž‘์„ฑํ•˜๋ผ: ํƒ€์ž„๋ผ์ธ(๊ทธ๋Ÿด๋“ฏํ•œ ์„ธ๋ถ€ ์‚ฌํ•ญ ์ž‘์„ฑ), "5 Why"๋ฅผ ์‚ฌ์šฉํ•œ ๊ทผ๋ณธ ์›์ธ ๋ถ„์„, ์˜ํ–ฅ ์ถ”์ •, ๊ทธ๋ฆฌ๊ณ  ๋‹ด๋‹น์ž์™€ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ์žˆ๋Š” ์ตœ์†Œ 4๊ฐœ์˜ ํ–‰๋™ ํ•ญ๋ชฉ.

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


๋” ์ฝ์„๊ฑฐ๋ฆฌ

  • ๋„์„œ:
  • 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

์ด์ „: ํ”„๋กœ์„ธ์Šค ๊ฐœ์„  | ๋‹ค์Œ: ๊ธฐ์ˆ  ๋ฌธ์„œํ™”

to navigate between lessons