CD_rewrite - 100-hours-a-week/21-iceT-wiki GitHub Wiki

CD(์ง€์†์  ๋ฐฐํฌ) ํŒŒ์ดํ”„๋ผ์ธ ๊ตฌ์ถ•


1. CD ๊ฐœ์š” ๋ฐ ์ ์šฉ ๋ฒ”์œ„

1.1 CD ๋„์ž… ๋ฐฐ๊ฒฝ ๋ฐ ๋ชฉ์ 

1. ๋ฐฐํฌ ์†๋„ ๋ฐ ์ •ํ™•์„ฑ ํ–ฅ์ƒ

  • ๊ธฐ์กด Koco ์„œ๋น„์Šค์—๋Š” ๋กœ์ปฌ ๋นŒ๋“œ โ†’ Git pull โ†’ ์ˆ˜๋™ ์žฌ์‹œ์ž‘ ๋“ฑ ์—ฌ๋Ÿฌ ๋‹จ๊ณ„๋ฅผ ์‚ฌ๋žŒ์ด ์ง์ ‘ ์ˆ˜ํ–‰
  • ์ด ๊ณผ์ •์—์„œ ์‹ค์ˆ˜ ๊ฐ€๋Šฅ์„ฑ์ด ์กด์žฌํ•˜๊ณ , ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆผ (์•ฝ 10๋ถ„ ์†Œ์š”)
  • CD ํŒŒ์ดํ”„๋ผ์ธ์„ ํ†ตํ•ด ๋ฐฐํฌ ๊ณผ์ •์„ ์ž๋™ํ™”ํ•˜๋ฉด, ํด๋ฆญ ํ•œ ๋ฒˆ ๋˜๋Š” Git ํƒœ๊ทธ ํ‘ธ์‹œ๋งŒ์œผ๋กœ 3~5๋ถ„ ๋‚ด ์•ˆ์ •์ ์œผ๋กœ ๋ฐฐํฌ ๊ฐ€๋Šฅ
  • ๋˜ํ•œ, ๋งค์ผ ์ƒˆ๋กœ์šด ์ฝ”ํ…Œ ์ •๋‹ต ์—…๋ฐ์ดํŠธ, ์ฑ—๋ด‡, ์ปค๋ฎค๋‹ˆํ‹ฐ ๊ธฐ๋Šฅ์„ ๊ฐ–์ถ˜ ๋ณธ ์„œ๋น„์Šค๋Š” ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ์„ ์ž์ฃผ ์—…๋ฐ์ดํŠธํ•  ํ•„์š”๊ฐ€ ์žˆ์–ด, ๋น ๋ฅด๊ณ  ์‹ ๋ขฐ์„ฑ ์žˆ๋Š” ์ž๋™ ๋ฐฐํฌ ์ฒด๊ณ„๊ฐ€ ํ•„์š”ํ•˜๋‹ค.

2. ๋ฌด์ค‘๋‹จ ์„œ๋น„์Šค ์šด์˜

  • ์„œ๋น„์Šค๋Š” ๋งค์ผ ์˜ค์ „ 9์‹œ 30๋ถ„~10์‹œ ์‚ฌ์ด๊ฐ€ ์ตœ๋Œ€ ํŠธ๋ž˜ํ”ฝ ์‹œ๊ฐ„๋Œ€(๋™์‹œ ์ ‘์†์ž ์•ฝ 150๋ช… ์˜ˆ์ƒ)
  • ์ •๊ธฐ ๋ฐฐํฌ๋Š” ๊ธˆ์š”์ผ 18์‹œ๋กœ ์„ค์ •๋˜์–ด ์žˆ์ง€๋งŒ, ๋ฐฐํฌ ์‹คํŒจ ์‹œ ๋ณต๊ตฌ๊ฐ€ ๋А๋ฆฌ๋ฉด ์‚ฌ์šฉ์ž์—๊ฒŒ ์˜ํ–ฅ์ด ๊ฐˆ ์ˆ˜ ์žˆ์Œ
  • CD๋ฅผ ํ†ตํ•ด ํ—ฌ์Šค ์ฒดํฌ + ๋กค๋ฐฑ ์ „๋žต ํฌํ•จ๋œ Blue-Green ๋ฐฐํฌ๋ฅผ ๊ตฌ์„ฑํ•จ์œผ๋กœ์จ(์ถ”ํ›„ ์นด๋‚˜๋ฆฌ ๋ฐฐํฌ ์ ์šฉ), ๋ฐฐํฌ ์ค‘์—๋„ ์„œ๋น„์Šค ์ค‘๋‹จ ์—†์ด ์•ˆ์ •์ ์ธ ์ „ํ™˜ ๊ฐ€๋Šฅ

3. ์„œ๋น„์Šค ์‹ ๋ขฐ๋„ ํ™•๋ณด

  • ํ•ด์„ค ์ œ๊ณต ์„œ๋น„์Šค๋Š” ์ •ํ™•์„ฑ๊ณผ ์‹ ๋ขฐ๊ฐ€ ํ•ต์‹ฌ์ธ๋ฐ, ๋ฐฐํฌ ์˜ค๋ฅ˜๋‚˜ ์žฅ์• ๊ฐ€ ๋นˆ๋ฒˆํ•˜๋ฉด ์‚ฌ์šฉ์ž ์‹ ๋ขฐ๊ฐ€ ๊ธ‰๊ฒฉํžˆ ์ €ํ•˜๋จ
  • ์ž๋™ํ™”๋œ CD ํŒŒ์ดํ”„๋ผ์ธ์€ ํ…Œ์ŠคํŠธ, ํ—ฌ์Šค ์ฒดํฌ, ๋ชจ๋‹ˆํ„ฐ๋ง๊นŒ์ง€ ํฌํ•จํ•˜์—ฌ ๋ฐฐํฌ ์ดํ›„ ์•ˆ์ •์„ฑ์„ ํ™•๋ณดํ•˜๊ณ , ์ด์ƒ ์ง•ํ›„ ๋ฐœ์ƒ ์‹œ ๋น ๋ฅด๊ฒŒ ๋Œ€์‘ ๊ฐ€๋Šฅํ•จ

4. ๊ฐœ๋ฐœ ํšจ์œจ์„ฑ ํ–ฅ์ƒ ๋ฐ ๋ฐ˜๋ณต ๊ฐ€๋Šฅํ•œ ๋ฐฐํฌ

  • ์ˆ˜๋™ ๋ฐฐํฌ๋Š” ๊ฐ ๊ณผ์ •๋ณ„ (3๋ช…)๋‹ด๋‹น์ž๊ฐ€ ์—†์œผ๋ฉด ์‹คํ–‰์ด ์–ด๋ ต๊ณ , ์ฃผ์„/๋ช…๋ น ์‹ค์ˆ˜๋กœ ๋ฐฐํฌ ์ƒํƒœ๊ฐ€ ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ์Œ
  • CD๋Š” ๋ˆ„๊ฐ€ ํ•ด๋„ ๋™์ผํ•œ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜ค๋Š” ๋ฐ˜๋ณต ๊ฐ€๋Šฅํ•œ ๋ฐฐํฌ ํ™˜๊ฒฝ์„ ์ œ๊ณตํ•˜์—ฌ, ํŒ€์›Œํฌ์™€ ์ƒ์‚ฐ์„ฑ ํ–ฅ์ƒ์— ๊ธฐ์—ฌํ•จ

5. MVP ๋‹จ๊ณ„์—์„œ์˜ ๋ฏผ์ฒฉํ•œ ๋ฐ˜๋ณต ๊ฐœ์„ ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•จ

  • ํ˜„์žฌ๋Š” MVP ๋‹จ๊ณ„๋กœ, ๊ธฐ๋Šฅ ๊ฐœ์„ ๊ณผ ์ˆ˜์ •์ด ๋นˆ๋ฒˆํ•˜๊ฒŒ ์ด๋ค„์ง
  • CD ํŒŒ์ดํ”„๋ผ์ธ์„ ํ†ตํ•ด ์ž‘์€ ๋ณ€๊ฒฝ๋„ ๋น ๋ฅด๊ฒŒ ๋ฐ˜์˜ํ•˜๊ณ  ์ฆ‰์‹œ ๋ฐฐํฌ ๊ฐ€๋Šฅ, ์‚ฌ์šฉ์ž ํ”ผ๋“œ๋ฐฑ์„ ๋น ๋ฅด๊ฒŒ ๋ฐ˜์˜ํ•˜๋Š” ์• ์ž์ผํ•œ ๊ฐœ๋ฐœ/๋ฐฐํฌ ์‚ฌ์ดํด์„ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ์Œ

๊ธฐ๋Œ€ ํšจ๊ณผ ์š”์•ฝ:

  • ๋ฐฐํฌ ํ”„๋กœ์„ธ์Šค์˜ ํ‘œ์ค€ํ™” ๋ฐ ๋ฌธ์„œํ™”๋กœ ํ˜‘์—… ํšจ์œจ์„ฑ ํ–ฅ์ƒ

  • ์žฅ๊ธฐ์ ์œผ๋กœ๋Š” ์šด์˜ ์ž๋™ํ™” ์ „ํ™˜ ๊ฐ€๋Šฅ์„ฑ์„ ๊ณ ๋ คํ•œ ํ™•์žฅ์„ฑ ํ™•๋ณด


2. ๋ฐฐํฌ ์ „๋žต ๋ฐ ๋ฐฉ์‹ ์„ ์ •

2.1 ๋ฐฐํฌ ์ „๋žต ๋น„๊ต

์ „๋žต ์„ค๋ช… ์žฅ์  ๋‹จ์ 
Blue-Green ๋‘ ๊ฐœ์˜ ๋™์ผํ•œ ํ™˜๊ฒฝ์„ ๋ฒˆ๊ฐˆ์•„ ์‚ฌ์šฉ ๋ฌด์ค‘๋‹จ ๋ฐฐํฌ, ์‰ฌ์šด ๋กค๋ฐฑ ์ธํ”„๋ผ ๋น„์šฉ ์ฆ๊ฐ€
Canary ์ ์ง„์  ๋ฐฐํฌ๋กœ ๋ชจ๋‹ˆํ„ฐ๋ง ๋ณ‘ํ–‰ ๋น ๋ฅธ ๋ฌธ์ œ ๊ฐ์ง€ ์„ค์ • ๋ณต์žก๋„ ์žˆ์Œ
Rolling Update ์ˆœ์ฐจ์  ๊ต์ฒด ๋ฐฐํฌ ์ž์› ์ ˆ์•ฝ ๋กค๋ฐฑ ์–ด๋ ค์›€

2.2 ์„ ํƒํ•œ ์ „๋žต

  • ์ดˆ๊ธฐ: Blue-Green ๋ฐฐํฌ ์ „๋žต ์ ์šฉ
    • ๊ธฐ์กด ์„œ๋น„์Šค ๋ฒ„์ „(Green)์„ ์œ ์ง€ํ•œ ์ƒํƒœ์—์„œ ์ƒˆ๋กœ์šด ๋ฒ„์ „(Blue)์„ ๋ณ„๋„๋กœ ๋ฐฐํฌ
    • ๋ฐฐํฌ ์™„๋ฃŒ ํ›„ ๊ฒ€์ฆ์„ ๊ฑฐ์ณ ํŠธ๋ž˜ํ”ฝ์„ ์ƒˆ๋กœ์šด ๋ฒ„์ „์œผ๋กœ ์ „ํ™˜
    • ์˜ค๋ฅ˜ ๋ฐœ์ƒ ์‹œ ์ฆ‰์‹œ ๊ธฐ์กด ๋ฒ„์ „์œผ๋กœ ๋ณต๊ท€ ๊ฐ€๋Šฅ

  • ์ถ”ํ›„: ์นด๋‚˜๋ฆฌ ๋ฐฐํฌ ์ „๋žต ๋„์ž… ์˜ˆ์ •
    • ์ดˆ๊ธฐ์—๋Š” ์ผ๋ถ€ ์‚ฌ์šฉ์ž์—๊ฒŒ๋งŒ ์ƒˆ๋กœ์šด ๋ฒ„์ „์„ ๋…ธ์ถœํ•˜์—ฌ ์•ˆ์ •์„ฑ์„ ๊ฒ€์ฆ
    • ์ ์ง„์ ์œผ๋กœ ์ „์ฒด ์‚ฌ์šฉ์ž๋กœ ํŠธ๋ž˜ํ”ฝ์„ ํ™•์žฅ
    • ์žฅ์•  ๋ฐœ์ƒ ์‹œ ์˜ํ–ฅ์„ ์ตœ์†Œํ™”ํ•˜๊ณ  ๋น ๋ฅด๊ฒŒ ๋ณต๊ตฌ ๊ฐ€๋Šฅ

2.3 ์„ ํƒ ๋ฐฐ๊ฒฝ ๋ฐ ์„œ๋น„์Šค ํŠน์„ฑ๊ณผ์˜ ์—ฐ๊ด€์„ฑ

์šฐ๋ฆฌ ์„œ๋น„์Šค๋Š” ์ฝ”๋”ฉํ…Œ์ŠคํŠธ ํ•ด์„ค์ง‘์„ ์ œ๊ณตํ•˜๋Š” ํ”Œ๋žซํผ์œผ๋กœ, ๋งค์ผ ์˜ค์ „ 9์‹œ 30๋ถ„๋ถ€ํ„ฐ 10์‹œ๊นŒ์ง€๊ฐ€ ์ตœ๋Œ€ ํŠธ๋ž˜ํ”ฝ ์‹œ๊ฐ„๋Œ€์ด๋ฉฐ, ์ด๋•Œ ์ตœ๋Œ€ ๋™์‹œ ์ ‘์†์ž ์ˆ˜๋Š” ์•ฝ 150๋ช…์œผ๋กœ ์˜ˆ์ƒ๋ฉ๋‹ˆ๋‹ค.

์‚ฌ์šฉ์ž๋Š” ์งง์€ ์‹œ๊ฐ„ ์•ˆ์— ๋ฌธ์ œ ํ’€์ด ๋ฐ ํ•ด์„ค์„ ํ™•์ธํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ์ˆœ๊ฐ„์ ์ธ ์ ‘์† ์ง€์—ฐ์ด๋‚˜ ์„œ๋น„์Šค ์ค‘๋‹จ์€ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์— ๋งค์šฐ ์น˜๋ช…์ ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

MVP ์ดˆ๊ธฐ์—๋Š” ์„œ๋น„์Šค ์‹ ๋ขฐ์„ฑ๊ณผ ๋ฌด์ค‘๋‹จ์„ ์ตœ์šฐ์„ ์œผ๋กœ ํ•ด์•ผ ํ•˜๋ฏ€๋กœ, ๊ฒ€์ฆ ํ›„ ํ•œ ๋ฒˆ์— ์ „์ฒด ํŠธ๋ž˜ํ”ฝ์„ ์ „ํ™˜ํ•˜๋Š” Blue-Green ๋ฐฐํฌ๋ฅผ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๋น ๋ฅธ ๋กค๋ฐฑ์ด ๊ฐ€๋Šฅํ•˜๊ณ , ์„œ๋น„์Šค ์ดˆ๊ธฐ ํ’ˆ์งˆ์„ ์•ˆ์ •์ ์œผ๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์„œ๋น„์Šค๊ฐ€ ์ ์ฐจ ์•ˆ์ •๋˜๊ณ  ๊ธฐ๋Šฅ ๊ฐœ์„  ๋ฐ ๋ฒ„๊ทธ ์ˆ˜์ •์ด ์žฆ์•„์งˆ ๊ฒฝ์šฐ,

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

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

๋˜ํ•œ, ์šฐ๋ฆฌ ์„œ๋น„์Šค๋Š” ๋งค์ผ ์ƒˆ๋กœ์šด ๋ฌธ์ œ์™€ ํ•ด์„ค ์—…๋ฐ์ดํŠธ๊ฐ€ ํ•„์š”ํ•œ ๊ตฌ์กฐ์ด๊ธฐ ๋•Œ๋ฌธ์—,

  • ์ฝ˜ํ…์ธ  ํŠน์„ฑ์ƒ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋งค์ผ ์ƒˆ๋กœ์šด ๋ฌธ์ œ๋ฅผ ์ œ๊ณตํ•ด์•ผ ํ•˜๋ฉฐ,
  • ์ด์— ๋”ฐ๋ผ ๋ฌธ์ œ ๋ฐ์ดํ„ฐ, ํ•ด์„ค ๋ฐ์ดํ„ฐ๋ฟ ์•„๋‹ˆ๋ผ ๊ด€๋ จ ๊ธฐ๋Šฅ(์ถœ์ œ ๋กœ์ง, ํ•ด์„ค ํŽ˜์ด์ง€ ๋ Œ๋”๋ง ๋“ฑ) ์—…๋ฐ์ดํŠธ๋„ ๋นˆ๋ฒˆํ•˜๊ฒŒ ๋ฐœ์ƒํ•  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์Šต๋‹ˆ๋‹ค.
  • ๊ฒฐ๊ณผ์ ์œผ๋กœ ๋ฐฐํฌ ์ฃผ๊ธฐ๊ฐ€ ์งง์•„์ง€๊ณ , ๋ฐฐํฌ ๋นˆ๋„ ๋˜ํ•œ ์ ์ฐจ ์ฆ๊ฐ€ํ•  ์ˆ˜๋ฐ–์— ์—†์Šต๋‹ˆ๋‹ค.

๋นˆ๋ฒˆํ•œ ๋ฐฐํฌ ํ™˜๊ฒฝ์—์„œ๋Š”, ๋Œ€๊ทœ๋ชจ ์ผ๊ด„ ๋ฐฐํฌ ๋ฐฉ์‹๋ณด๋‹ค๋Š” ์†Œ๊ทœ๋ชจ ๋ถ„์‚ฐ ๋ฐฐํฌ๋ฅผ ํ†ตํ•œ ๋ฆฌ์Šคํฌ ํ†ต์ œ๊ฐ€ ํ•„์ˆ˜์ ์ด๊ธฐ ๋•Œ๋ฌธ์—, ์นด๋‚˜๋ฆฌ ๋ฐฐํฌ ๋ฐฉ์‹์ด ์ ์ง„์ ์œผ๋กœ ํ•„์š”ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ, ๊ธˆ์š”์ผ ์˜คํ›„ 18์‹œ ์ •๊ธฐ ๋ฐฐํฌ ์ดํ›„ ๋น„๊ต์  ์‚ฌ์šฉ์ž ์ ‘์†์ด ์ ์€ ์•ผ๊ฐ„ ์‹œ๊ฐ„๋Œ€๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๋ชจ๋‹ˆํ„ฐ๋ง ๋ฐ ์•ˆ์ •์„ฑ ํ™•๋ณด ์‹œ๊ฐ„์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์–ด, ์šด์˜ ํšจ์œจ์„ฑ ์ธก๋ฉด์—์„œ๋„ ์œ ๋ฆฌํ•ฉ๋‹ˆ๋‹ค.


3. CD ํŒŒ์ดํ”„๋ผ์ธ ํ๋ฆ„ ์„ค๊ณ„

3.1 ์ „์ฒด ํŒŒ์ดํ”„๋ผ์ธ ๊ฐœ์š”

CD(Continuous Delivery/Deployment) ํŒŒ์ดํ”„๋ผ์ธ์€ Blue-Green ๋˜๋Š” ์นด๋‚˜๋ฆฌ ๋ฐฐํฌ โ†’ QA ๋ฐ ๋ชจ๋‹ˆํ„ฐ๋ง โ†’ ์ตœ์ข… ํ™•์ •๊นŒ์ง€ ์ฒด๊ณ„์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๋Š” ๊ตฌ์กฐ๋กœ ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

ํŠนํžˆ, Blue-Green ๋ฐฐํฌ์™€ ์นด๋‚˜๋ฆฌ ๋ฐฐํฌ๋ฅผ ์ ์šฉํ•˜๋“ , ์ˆ˜๋™ ๋ฐฐํฌ๋ฅผ ์ง„ํ–‰ํ•˜๋“  ๊ด€๊ณ„์—†์ด, Slack ์•Œ๋ฆผ ๋ฐœ์†ก, ์šด์˜ QA ์ ๊ฒ€, ์ดˆ๊ธฐ ์ง‘์ค‘ ๋ชจ๋‹ˆํ„ฐ๋ง ๋“ฑ์˜ ์šด์˜ ํ๋ฆ„์€ ๋™์ผํ•˜๊ฒŒ ํ•„์ˆ˜ ์ ˆ์ฐจ๋กœ ํฌํ•จ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ˆ˜๋™ ๋ฐฐํฌ ํ™˜๊ฒฝ์—์„œ๋„ ์ด๋Ÿฌํ•œ ์šด์˜ ํ”„๋กœ์„ธ์Šค๋ฅผ ์—„๊ฒฉํžˆ ์ค€์ˆ˜ํ•˜์—ฌ ์„œ๋น„์Šค ์•ˆ์ •์„ฑ๊ณผ ๋ฐฐํฌ ์‹ ๋ขฐ์„ฑ์„ ํ™•๋ณดํ•ฉ๋‹ˆ๋‹ค.

3.2 ๋‹จ๊ณ„๋ณ„ ์ ˆ์ฐจ

1. CI ์™„๋ฃŒ โ†’ ์•„ํ‹ฐํŒฉํŠธ ์ƒ์„ฑ

  • ๊ฐœ๋ฐœ์ž๊ฐ€ release ํƒœ๊ทธ๋ฅผ Pushํ•˜๋ฉด CI ํŒŒ์ดํ”„๋ผ์ธ์ด ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

  • ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ๋นŒ๋“œํ•˜์—ฌ ๋ฐฐํฌ ๊ฐ€๋Šฅํ•œ ์•„ํ‹ฐํŒฉํŠธ(JAR, Docker ์ด๋ฏธ์ง€ ๋“ฑ)๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

2. ์„œ๋ฒ„ ์ž๋™ ๋ฐฐํฌ

  • ์ƒ์„ฑ๋œ ์•„ํ‹ฐํŒฉํŠธ๋Š” ์„œ๋ฒ„ ํ™˜๊ฒฝ์— ์ž๋™์œผ๋กœ ๋ฐฐํฌ๋ฉ๋‹ˆ๋‹ค.

  • ๋ฐฐํฌ ์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰ ํ›„, ์„œ๋น„์Šค๊ฐ€ ๊ธฐ๋™๋˜๊ณ  ์ •์ƒ ์ƒํƒœ๊ฐ€ ํ™•์ธ๋ฉ๋‹ˆ๋‹ค.

3. ํ—ฌ์Šค ์ฒดํฌ ๋ฐ ์ž๋™ํ™” ํ…Œ์ŠคํŠธ ์‹คํ–‰

  • /health ์—”๋“œํฌ์ธํŠธ๋ฅผ ํ†ตํ•œ ์ƒํƒœ ์ ๊ฒ€ ์ˆ˜ํ–‰

  • ์‚ฌ์ „ ์ •์˜๋œ E2E ํ…Œ์ŠคํŠธ ๋˜๋Š” API ํ…Œ์ŠคํŠธ๊ฐ€ ์ž๋™์œผ๋กœ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

4. ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ์— ๋”ฐ๋ฅธ ๋ถ„๊ธฐ ์ฒ˜๋ฆฌ

  • ์„ฑ๊ณต ์‹œ: ์šด์˜ ๋ฐฐํฌ ์Šน์ธ ์š”์ฒญ ์ž๋™ ์•Œ๋ฆผ(Slack)

  • ์‹คํŒจ ์‹œ: ๋ฐฐํฌ ์ค‘๋‹จ ๋ฐ Slack์œผ๋กœ ์‹คํŒจ ์•Œ๋ฆผ ์ „์†ก (์šด์˜ ๋ฐฐํฌ ์ฐจ๋‹จ)

5. ์šด์˜ ์„œ๋ฒ„์— Blue ๋ฒ„์ „ ๋ฐฐํฌ (Blue-Green ์ „๋žต)

  • ์Šน์ธ ์™„๋ฃŒ ํ›„, ๊ธฐ์กด Green ๋ฒ„์ „๊ณผ ๋ณ‘๋ ฌ๋กœ ์ƒˆ๋กœ์šด Blue ๋ฒ„์ „์ด ๋ฐฐํฌ๋ฉ๋‹ˆ๋‹ค.

  • ๋ฐฐํฌ ํ›„ Blue ๋ฒ„์ „์— ๋Œ€ํ•ด ํ—ฌ์Šค ์ฒดํฌ๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

6. ํŠธ๋ž˜ํ”ฝ ์ „ํ™˜ ๋ฐ ์šด์˜ ํ™˜๊ฒฝ ๋ฐฐํฌ ์™„๋ฃŒ

  • Blue ๋ฒ„์ „์˜ ์ƒํƒœ๊ฐ€ ์ •์ƒ์ธ ๊ฒฝ์šฐ, ํŠธ๋ž˜ํ”ฝ์„ Green์—์„œ Blue๋กœ ์ „ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

  • ์ „ํ™˜ ํ›„ QA ๊ฒ€์ฆ ๋ฐ ์ดˆ๊ธฐ ์ง‘์ค‘ ๋ชจ๋‹ˆํ„ฐ๋ง์„ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

  • ์ด์ƒ ์ง•ํ›„ ๋ฐœ์ƒ ์‹œ ์ฆ‰์‹œ Green ๋ฒ„์ „์œผ๋กœ ๋กค๋ฐฑ๋ฉ๋‹ˆ๋‹ค.

7. ์ถ”ํ›„ ์ ์šฉ ์˜ˆ์ •: Canary ๋ฐฐํฌ ํ๋ฆ„

  • ์šด์˜ ์•ˆ์ •ํ™” ์ดํ›„, Canary ์ „๋žต์œผ๋กœ ์ „ํ™˜ ๊ณ„ํš์ด ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์ดˆ๊ธฐ 5~10% ํŠธ๋ž˜ํ”ฝ๋งŒ ์‹ ๊ทœ ๋ฒ„์ „์— ์ „๋‹ฌ

  • ์ด์ƒ ์—†์„ ์‹œ ์ ์ง„์ ์œผ๋กœ 30% โ†’ 70% โ†’ 100%๊นŒ์ง€ ํ™•์žฅ

  • ๋ฌธ์ œ ๋ฐœ์ƒ ์‹œ ํ•ด๋‹น ๋ฒ„์ „ ๋กค๋ฐฑ

8. ๊ธด๊ธ‰ ์ƒํ™ฉ ๋Œ€์‘ ์ ˆ์ฐจ

  • Health Check ์‹คํŒจ ๋˜๋Š” SLA ์œ„๋ฐ˜ ์‹œ, ์ž๋™ ๋ฐฐํฌ ์ค‘๋‹จ ๋ฐ ์ด์ „ ๋ฒ„์ „์œผ๋กœ ๋กค๋ฐฑ

  • ๋ฐฐํฌ ํ›„ ์ดˆ๊ธฐ ๋ชจ๋‹ˆํ„ฐ๋ง ์ค‘ ๋ฌธ์ œ ๊ฐ์ง€ ์‹œ, ๊ธด๊ธ‰ ํ•ซํ”ฝ์Šค ๋˜๋Š” ์ˆ˜๋™ ๋กค๋ฐฑ ์‹คํ–‰

3.3 CD ํ๋ฆ„๋„

๋‹จ๊ณ„ Blue-Green ์นด๋‚˜๋ฆฌ ๋ฐฐํฌ
์ดˆ๊ธฐ ๋ฐฐํฌ ๋ฐฉ์‹ ์ „์ฒด ํŠธ๋ž˜ํ”ฝ ํ•œ ๋ฒˆ์— ์ „ํ™˜ ์†Œ์ˆ˜ ํŠธ๋ž˜ํ”ฝ๋ถ€ํ„ฐ ์ ์ง„์  ์ „ํ™˜
์žฅ์•  ๋Œ€์‘ Green์œผ๋กœ ์ „์ฒด ๋ณต๊ท€ ์นด๋‚˜๋ฆฌ ํŠธ๋ž˜ํ”ฝ๋งŒ ๋กค๋ฐฑ
๋ฆฌ์Šคํฌ ๊ด€๋ฆฌ ๋น ๋ฅธ ๋กค๋ฐฑ ๊ฐ€๋Šฅ ์ ์ง„์  ํ™•์žฅ์œผ๋กœ ๋ฆฌ์Šคํฌ ์ตœ์†Œํ™”
์ ์šฉ ์‹œ์  MVP ๋ฐฐํฌ ์ดํ›„ ์ ์šฉ ์„œ๋น„์Šค ๊ณ ๋„ํ™” ์ดํ›„ ์ ์šฉ
๋Œ€์ฒดํ…์ŠคํŠธ

4. CD ๊ตฌ์„ฑ ์š”์†Œ ๋ฐ ํŠธ๋ฆฌ๊ฑฐ ์กฐ๊ฑด

4.1 ๋ธŒ๋žœ์น˜ ๊ธฐ๋ฐ˜ ํŠธ๋ฆฌ๊ฑฐ ์กฐ๊ฑด

  • main โ†’ ์šด์˜ ํ™˜๊ฒฝ ๋ฐฐํฌ

4.2 CI ์—ฐ๋™ ๋ฐฉ์‹

  • CI ๋„๊ตฌ: GitHub Actions
  • ๋ฐฐํฌ ํ๋ฆ„: push to GitHub โ†’ GitHub Actions โ†’ build โ†’ upload to S3 โ†’ trigger AWS CodeDeploy โ†’ deploy to EC2 แ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ซแ„‰แ…ฃแ†บ 2025-05-01 แ„‹แ…ฉแ„’แ…ฎ 2 52 40

์„ธ๋ถ€ ์ ˆ์ฐจ

  1. ๊ฐœ๋ฐœ์ž๊ฐ€ main ๋ธŒ๋žœ์น˜์— push ๋˜๋Š” PR merge
  2. GitHub Actions ์›Œํฌํ”Œ๋กœ์šฐ ์‹คํ–‰
    • ๋นŒ๋“œ ์‚ฐ์ถœ๋ฌผ S3์— ์—…๋กœ๋“œ
  3. S3 ์—…๋กœ๋“œ ์™„๋ฃŒ ํ›„ AWS CodeDeploy ํŠธ๋ฆฌ๊ฑฐ
    • appspec.yml ๊ธฐ๋ฐ˜์œผ๋กœ ๋ฐฐํฌ ์ˆ˜ํ–‰
    • BeforeInstall, AfterInstall, ApplicationStart ์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰
  4. ๋ฐฐํฌ ์„ฑ๊ณต ์‹œ ํ—ฌ์Šค ์ฒดํฌ ๋ฐ Slack ์•Œ๋ฆผ ์ „์†ก

์‚ฌ์šฉ ํŒŒ์ผ ์˜ˆ์‹œ

  • .github/workflows/deploy.yml : GitHub Actions ์„ค์ • ํŒŒ์ผ
  • appspec.yml : CodeDeploy ๋ฐฐํฌ ๊ตฌ์„ฑ ํŒŒ์ผ
  • scripts/start.sh, scripts/stop.sh : EC2 ๋ฐฐํฌ์šฉ ์Šคํฌ๋ฆฝํŠธ

4.3 ๋„๊ตฌ ์„ ํƒ ์ด์œ 

  • GitHub Actions

    • GitHub ์ €์žฅ์†Œ์™€ ์™„๋ฒฝํ•˜๊ฒŒ ํ†ตํ•ฉ๋จ
    • ๊ฐ„๋‹จํ•œ YAML ๊ธฐ๋ฐ˜ ์„ค์ •์œผ๋กœ ์œ ์ง€๋ณด์ˆ˜ ์šฉ์ด
    • Secret ๊ด€๋ฆฌ ๋ฐ ๋ธŒ๋žœ์น˜ ์กฐ๊ฑด๋ณ„ ์›Œํฌํ”Œ๋กœ์šฐ ๊ตฌ์„ฑ ์šฉ์ด
  • AWS CodeDeploy

    • EC2 ์ธ์Šคํ„ด์Šค์— ์ž๋™ ๋ฐฐํฌ ๊ฐ€๋Šฅ
    • AppSpec.yml ๊ธฐ๋ฐ˜์˜ ์ƒ์„ธํ•œ ๋ฐฐํฌ ์ œ์–ด ์ œ๊ณต
    • ๋ฐฐํฌ ๊ทธ๋ฃน ๊ธฐ๋ฐ˜ ๋กค๋ฐฑ ๋ฐ ํ—ฌ์Šค์ฒดํฌ ์„ค์ • ๊ฐ€๋Šฅ

5. ๋ฐฐํฌ ์Šคํฌ๋ฆฝํŠธ ๋ฐ ์„ค์ • ๋ช…์„ธ

5.1 ๋ฐฐํฌ ์Šคํฌ๋ฆฝํŠธ ๊ตฌ์กฐ

Cloud/deploy.yml

5.2 ํ™˜๊ฒฝ ๊ตฌ์„ฑ ํŒŒ์ผ ์˜ˆ์‹œ

5.3 ์‹œํฌ๋ฆฟ ๊ด€๋ฆฌ ๋ฐฉ์‹

5.4 ๋กค๋ฐฑ ์Šคํฌ๋ฆฝํŠธ


6. ๊ฒ€์ฆ ๋ฐ ๋ชจ๋‹ˆํ„ฐ๋ง

6.1 ๋ฐฐํฌ ํ›„ ๊ฒ€์ฆ ๋ฐฉ์‹

  • /health ์—”๋“œํฌ์ธํŠธ๋ฅผ ํ†ตํ•œ ์ƒํƒœ ํ™•์ธ

  • ํ…Œ์ŠคํŠธ ํŠธ๋ž˜ํ”ฝ์„ ํ†ตํ•œ ์‹ค์ œ ๊ธฐ๋Šฅ ํ™•์ธ

6.2 ๋ชจ๋‹ˆํ„ฐ๋ง ์‹œ์Šคํ…œ

  • CloudWatch ๋˜๋Š” Grafana ์‚ฌ์šฉ

  • Slack ๋˜๋Š” ์ด๋ฉ”์ผ ์•Œ๋ฆผ ์„ค์ •

6.3 ์‹คํŒจ ๊ฐ์ง€ ๋ฐ ์•Œ๋ฆผ ํ๋ฆ„

  • ๋ฐฐํฌ ์‹คํŒจ ์‹œ Slack์œผ๋กœ ์ž๋™ ์•Œ๋ฆผ ์ „์†ก

  • ์ˆ˜๋™ ๋กค๋ฐฑ ์œ ๋„ ๋˜๋Š” ์ž๋™ ์žฌ๋ฐฐํฌ ์‹คํ–‰

6.4 ๋ฐฐํฌ ์ „ ์ ๊ฒ€ ์‚ฌํ•ญ ์ฒดํฌ๋ฆฌ์ŠคํŠธ

ํ•ญ๋ชฉ ์ฒดํฌ ์—ฌ๋ถ€ ์„ค๋ช…
๋ฐฐํฌ ๋ธŒ๋žœ์น˜ ํ™•์ธ (main, develop) โœ… ์˜๋„ํ•œ ๋ธŒ๋žœ์น˜์ธ์ง€ ํ™•์ธ
๋นŒ๋“œ ์™„๋ฃŒ ๋ฐ ์—๋Ÿฌ ์—†์Œ โœ… CI ํ†ต๊ณผ ์—ฌ๋ถ€ ํ™•์ธ
ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์„ค์ • ํŒŒ์ผ ํ™•์ธ โœ… .env, application-prod.yml ๋“ฑ ์กด์žฌ ์—ฌ๋ถ€
๋Œ€์ƒ ์„œ๋ฒ„ ์ •์ƒ ์ž‘๋™ ์—ฌ๋ถ€ โœ… SSH ์ ‘์†, ๋””์Šคํฌ/๋ฉ”๋ชจ๋ฆฌ ์—ฌ์œ  ํ™•์ธ
๋กค๋ฐฑ ๋ฒ„์ „ ์กด์žฌ ์—ฌ๋ถ€ โœ… ์ด์ „ ๋ฒ„์ „ JAR ๋˜๋Š” Docker ์ด๋ฏธ์ง€ ํ™•์ธ
DB ๋ฐฑ์—… ํŒŒ์ผ ์กด์žฌ ํ™”์ธ โœ… sqlํŒŒ์ผ ์‚ฌ์ „ ํ™•์ธ
์™ธ๋ถ€ ์—ฐ๋™ API ์ƒํƒœ ํ™•์ธ โœ… kakao ouath ๋กœ๊ทธ์ธ ์ •์ƒ ์—ฌ๋ถ€

6.5 ๋ฐฐํฌ ํ›„ ์ ๊ฒ€ ์‚ฌํ•ญ ์ฒดํฌ๋ฆฌ์ŠคํŠธ

ํ•ญ๋ชฉ ์ฒดํฌ ์—ฌ๋ถ€ ์„ค๋ช…
์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ธฐ๋™ ์—ฌ๋ถ€ โœ… systemctl, ํ”„๋กœ์„ธ์Šค ํ™•์ธ ๋“ฑ
/health ์—”๋“œํฌ์ธํŠธ ์ •์ƒ ์‘๋‹ต โœ… HTTP 200 ์‘๋‹ต
์ฃผ์š” ๊ธฐ๋Šฅ ์ •์ƒ ๋™์ž‘ ์—ฌ๋ถ€ โœ… ํšŒ์›๊ฐ€์ž…, ๋ฌธ์ œํ’€์ด ๋“ฑ ์‹ค์ œ ๊ธฐ๋Šฅ ํ…Œ์ŠคํŠธ
์—๋Ÿฌ ๋กœ๊ทธ ๋ฐœ์ƒ ์—ฌ๋ถ€ ํ™•์ธ โœ… ๋กœ๊ทธ ํŒŒ์ผ ํ™•์ธ
๋ฆฌ์†Œ์Šค ์‚ฌ์šฉ๋Ÿ‰ ์ ๊ฒ€ โœ… CPU, ๋ฉ”๋ชจ๋ฆฌ, ๋””์Šคํฌ ๋“ฑ
๋ชจ๋‹ˆํ„ฐ๋ง ์•Œ๋žŒ ์—†์Œ โœ… Slack, CloudWatch ๋“ฑ ์•Œ๋žŒ ํ™•์ธ
๋กค๋ฐฑ ๊ฐ€๋Šฅ ์ƒํƒœ ์œ ์ง€ โœ… ์ง์ „ ๋ฐฐํฌ ํŒŒ์ผ ๋˜๋Š” ์ด๋ฏธ์ง€ ํ™•์ธ

6.6 QA ์ฒดํฌ๋ฆฌ์ŠคํŠธ

ํ•ญ๋ชฉ ๋ฒˆํ˜ธ ์ฒดํฌ ํ•ญ๋ชฉ ํ™•์ธ ์—ฌ๋ถ€
1 ๋ฉ”์ธ ํŽ˜์ด์ง€ ์ •์ƒ ์ ‘์† ์—ฌ๋ถ€ โœ… / โŒ
2 ๋กœ๊ทธ์ธ/ํšŒ์›๊ฐ€์ž… ์ •์ƒ ์ž‘๋™ ์—ฌ๋ถ€ โœ… / โŒ
3 ์˜ค๋Š˜์˜ ๋ฌธ์ œ ๋ฆฌ์ŠคํŠธ ์ •์ƒ ํ‘œ์‹œ ์—ฌ๋ถ€ โœ… / โŒ
4 ๋ฌธ์ œ ์ƒ์„ธ ํŽ˜์ด์ง€ ์ •์ƒ ์กฐํšŒ ์—ฌ๋ถ€ โœ… / โŒ
5 ํ•ด์„ค ํŽ˜์ด์ง€ ์ •์ƒ ์กฐํšŒ ์—ฌ๋ถ€ โœ… / โŒ
6 ์ฃผ์š” ๋ฒ„ํŠผ(์ œ์ถœ, ํ•ด์„ค ํ™•์ธ ๋“ฑ) ์ •์ƒ ๋™์ž‘ ์—ฌ๋ถ€ โœ… / โŒ
7 ์—๋Ÿฌ ํŽ˜์ด์ง€(404, 500) ๋ฐœ์ƒ ์—ฌ๋ถ€ โœ… / โŒ
8 ์‘๋‹ต ์†๋„ ์ง€์—ฐ ์—ฌ๋ถ€ ํ™•์ธ (API ํ˜ธ์ถœ) โœ… / โŒ
9 ๋ฐฐํฌ ํ›„ ์‹ ๊ทœ ์—๋Ÿฌ ๋กœ๊ทธ ์œ ์ž… ์—ฌ๋ถ€ โœ… / โŒ
10 ๊ธฐํƒ€ ์ด์ƒ ํ˜„์ƒ ๋ฐœ์ƒ ์—ฌ๋ถ€ โœ… / โŒ

7. ์šด์˜ ๋ฐ ๋‹ด๋‹น์ž ์ฒด๊ณ„

7.1 ๋ฐฐํฌ ๋‹ด๋‹น์ž ๋ฐ ์—ญํ•  ๋ถ„๋‹ดํ‘œ

ํ•ญ๋ชฉ ์—ญํ•  ์„ค๋ช… ๋‹ด๋‹น์ž
๋ฐฐํฌ ์Šน์ธ์ž ์ตœ์ข… ๋ฐฐํฌ ์Šน์ธ evan.kim
๋ชจ๋‹ˆํ„ฐ๋ง ๋‹ด๋‹น์ž ๋ฐฐํฌ ์งํ›„ ์‹œ์Šคํ…œ ์ƒํƒœ ๋ชจ๋‹ˆํ„ฐ๋ง noah.hwang, sophie.kim
๋กค๋ฐฑ ๋‹ด๋‹น์ž ์žฅ์•  ๋ฐœ์ƒ ์‹œ ์ฆ‰์‹œ ๋กค๋ฐฑ evan.kim, noah.hwang
๊ธด๊ธ‰ ํ•ซํ”ฝ์Šค ๋‹ด๋‹น์ž ๋น ๋ฅธ ์ˆ˜์ • ๋ฐ ์žฌ๋ฐฐํฌ ๋‹ด๋‹น noah.hwang
์‚ฌ์šฉ์ž ๋ฌธ์˜ ๋Œ€์‘ ๋‹ด๋‹น์ž (CS) ์‚ฌ์šฉ์ž ๋ฌธ์ œ ๋Œ€์‘ sophie.kim
๋ฆฌํฌํŠธ ์ •๋ฆฌ ๋‹ด๋‹น์ž ๋ฐฐํฌ/QA ๊ฒฐ๊ณผ ๊ธฐ๋ก ๋ฐ ๊ณต์œ  sophie.kim
Slack ์•Œ๋ฆผ ๋‹ด๋‹น์ž ๋ฐฐํฌ ์™„๋ฃŒ ๋“ฑ ์•Œ๋ฆผ ๋ฐœ์†ก evan.kim
QA ์ฒดํฌ๋ฆฌ์ŠคํŠธ ์ž‘์„ฑ์ž ์šด์˜ QA ์ฒดํฌ๋ฆฌ์ŠคํŠธ ์ž‘์„ฑ ๋ฐ ์ ๊ฒ€ noah.hwang

8. ๋ฐฐํฌ ๋ณ€ํ™” ๋ฐ ๊ธฐ๋Œ€ ํšจ๊ณผ ์š”์•ฝ

8.1 CD ๋„์ž… ์ „/ํ›„ ํ”„๋กœ์„ธ์Šค ๋น„๊ต

๊ตฌ๋ถ„ ๊ธฐ์กด ๋ฐฉ์‹ CD ๋„์ž… ํ›„
๋ฐฐํฌ ์‹œ๊ฐ„ ์ˆ˜๋™ ๋ฐฐํฌ, 30๋ถ„ ์ด์ƒ ์ž๋™ํ™”๋กœ 5๋ถ„ ์ด๋‚ด
์˜ค๋ฅ˜ ๋Œ€์‘ ์ˆ˜๋™ ํ™•์ธ ๋ฐ ๋ณต๊ตฌ ์ž๋™ ์•Œ๋ฆผ ๋ฐ ๋กค๋ฐฑ ๊ฐ€๋Šฅ
๋ฐฐํฌ ๋นˆ๋„ ์ฃผ 1ํšŒ ํ•˜๋ฃจ 1~2ํšŒ ๊ฐ€๋Šฅ

8.2 ๊ธฐ๋Œ€ ํšจ๊ณผ

  • ๋ฐฐํฌ ์‹ค์ˆ˜ ๊ฐ์†Œ

  • ๋น ๋ฅธ ๋กค๋ฐฑ ๊ฐ€๋Šฅ

  • ํŒ€ ์ƒ์‚ฐ์„ฑ ํ–ฅ์ƒ

โš ๏ธ **GitHub.com Fallback** โš ๏ธ