CI & CD

CI (Continuous Integration - 지속적 톡합)

VCS μ‹œμŠ€ν…œ(Gitκ³Ό 같은 버전 관리 μ‹œμŠ€ν…œ)에 λ³€κ²½ 사항이 PUSH되면 μžλ™μœΌλ‘œ ν…ŒμŠ€νŠΈμ™€ λΉŒλ“œκ°€ μˆ˜ν–‰λ˜μ–΄ μ•ˆμ •μ μΈ 배포 νŒŒμΌμ„ λ§Œλ“œλŠ” 과정을 λ§ν•œλ‹€.

CIλΌλŠ” κ°œλ…μ΄ λ“±μž₯ν•˜κ²Œ 된 λ°°κ²½

ν•˜λ‚˜μ˜ ν”„λ‘œμ νŠΈλŠ” μ—¬λŸ¬ κ°œλ°œμžκ°€ ν•¨κ»˜ κ°œλ°œμ„ μ§„ν–‰ν•œλ‹€.

λ•Œλ¬Έμ— κ°μžκ°€ κ°œλ°œν•œ μ½”λ“œλ₯Ό ν•©μΉ˜λŠ” 것이 큰 일이고, 이λ₯Ό μˆ˜λ™μœΌλ‘œ μ§„ν–‰ν•˜λŠ” 것은 λ§Žμ€ μ‹œκ°„μ„ μ†Œμš”ν•˜κ²Œ λœλ‹€. μ΄λŠ” 생산성 μ €ν•˜λ‘œ μ΄μ–΄μ§ˆ 수 μžˆλ‹€.

μ΄λŸ¬ν•œ 문제λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ κ°μžκ°€ 원격 μ €μž₯μ†Œμ— ν‘Έμ‹œν–ˆμ„ λ•Œ μ½”λ“œλ₯Ό μžλ™μœΌλ‘œ λ³‘ν•©ν•˜κ³  ν…ŒμŠ€νŠΈ, λΉŒλ“œλ₯Ό μˆ˜ν–‰ν•΄μ£ΌλŠ” CI ν™˜κ²½μ„ κ΅¬μΆ•ν•˜κ²Œ 된 것이닀.

CIλ₯Ό λ„μž…ν•˜κΈ° μœ„ν•œ 4κ°€μ§€ κ·œμΉ™

  1. λͺ¨λ“  μ†ŒμŠ€ μ½”λ“œκ°€ μ‹€ν–‰ 쀑에 μžˆμ–΄μ•Ό ν•˜λ©°, λˆ„κ΅¬λ“  이 μ½”λ“œμ— μ ‘κ·Όν•  수 μžˆλŠ” 단일 지점을 μœ μ§€ν•΄μ•Ό 함

  2. λΉŒλ“œ ν”„λ‘œμ„ΈμŠ€λ₯Ό μžλ™ν™”ν•΄μ„œ λˆ„κ΅¬λ“  μ†ŒμŠ€λ‘œλΆ€ν„° 단일 λͺ…λ Ήμ–΄λ₯Ό 톡해 μ‹œμŠ€ν…œμ„ λΉŒλ“œν•  수 μžˆμ–΄μ•Ό 함

  3. ⭐ ν…ŒμŠ€νŒ…μ„ μžλ™ν™”ν•΄μ„œ μ–Έμ œλ“  μ‹œμŠ€ν…œμ— λŒ€ν•œ ν…ŒμŠ€νŠΈ 수트(suite)λ₯Ό μ‹€ν–‰ν•  수 μžˆμ–΄μ•Ό 함

    • ν”„λ‘œμ νŠΈμ˜ μ™„μ „μ„± 보μž₯을 μœ„ν•œ κ°€μž₯ μ€‘μš”ν•œ μš”μ†Œ

  4. λˆ„κ΅¬λ“  ν˜„μž¬ 얻은 μ‹€ν–‰ 파일이 κ°€μž₯ μ™„μ „ν•œ 것이어야 함

CD (Continuous Deployment - 지속적 배포)

μœ„μ˜ λΉŒλ“œ κ²°κ³Όλ¬Ό(배포 파일)을 μžλ™μœΌλ‘œ 운영 μ„œλ²„μ— 무쀑단 배포λ₯Ό μˆ˜ν–‰ν•˜λŠ” 과정을 λ§ν•œλ‹€.

CDλΌλŠ” κ°œλ…μ΄ λ“±μž₯ν•˜κ²Œ 된 λ°°κ²½

λŒ€λŸ‰μ˜ νŠΈλž˜ν”½μ„ μ²˜λ¦¬ν•˜κΈ° μœ„ν•΄ μ„œλ²„μ˜ κ°œμˆ˜λŠ” μˆ˜μ‹­, 수백 λŒ€κ°€ 될 수 μžˆλ‹€.

λ§Žμ€ μ„œλ²„μ— μˆ˜λ™μœΌλ‘œ 배포λ₯Ό μˆ˜ν–‰ν•˜λŠ” 것은 λ§Žμ€ μ‹œκ°„μ„ μ†Œμš”ν•œλ‹€. μ΄λŠ” 생산성 μ €ν•˜λ‘œ μ΄μ–΄μ§ˆ 수 μžˆλ‹€.

CDλ₯Ό μ μš©ν•˜λŠ” 방법

  • AWS Blue-Green 무쀑단 배포

  • Docker 이용

  • Nginx 이용

  • L4, L7 μŠ€μœ„μΉ˜ 적용

CD(무쀑단 배포) μ•Œκ³ λ¦¬μ¦˜

λ‘œλ“œ λ°ΈλŸ°μ‹±μ„ μ΄μš©ν•œλ‹€.

Rolling Development

  • μ„œλ²„λ₯Ό ν•˜λ‚˜μ”© λ‘œλ“œλ°ΈλŸ°μ„œμ˜ λΌμš°νŒ… λŒ€μƒμ—μ„œ μ œμ™Έν•˜κ³ , μ—…λ°μ΄νŠΈν•˜κ³ , λ‹€μ‹œ μ—°κ²°ν•˜λŠ” 것을 반볡

  • μž₯점

    • 배포λ₯Ό μœ„ν•΄ 좔가적인 μžμ›(μƒˆλ‘œμš΄ μΈμŠ€ν„΄μŠ€ λ“±)을 μ‚¬μš©ν•˜μ§€ μ•ŠμŒ

  • 단점

    • νŠΉμ • μΈμŠ€ν„΄μŠ€κ°€ μš”μ²­μ„ μ²˜λ¦¬ν•˜μ§€ λͺ»ν•˜κ²Œ 됨으둜써 λΆ€ν•˜ λ°œμƒ κ°€λŠ₯

    • ꡬ 버전과 μƒˆ λ²„μ „μ˜ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ κ³΅μ‘΄ν•˜κ²Œ λ˜μ–΄ ν˜Έν™˜μ„± 문제 λ°œμƒ κ°€λŠ₯

Canary Development

  • 일뢀 μ‚¬μš©μžμ—κ²Œ μƒˆ λ²„μ „μ˜ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μ œκ³΅ν•˜κ³ , λ¬Έμ œκ°€ μ—†λ‹€λ©΄ μ „ μ„œλ²„μ— 반영

  • μž₯점

    • μƒˆ 버전에 λ¬Έμ œκ°€ μžˆλ‹€λ©΄ λΉ λ₯΄κ²Œ κ°μ§€ν•˜κ³  μˆ˜μ • κ°€λŠ₯

  • 단점

    • μƒˆ 버전 μ‚¬μš©μžλ₯Ό λŒ€μƒμœΌλ‘œ λͺ¨λ‹ˆν„°λ§μ„ μˆ˜ν–‰ν•΄μ•Ό 함 (λͺ¨λ‹ˆν„°λ§ λΉ„μš©)

    • Rolling 방식과 λ§ˆμ°¬κ°€μ§€λ‘œ ν˜Έν™˜μ„± 문제 λ°œμƒ κ°€λŠ₯

Blue/Green Development

  • 두 개의 μΈμŠ€ν„΄μŠ€ 그룹을 μ€€λΉ„ν•˜κ³ , ν•˜λ‚˜λ₯Ό 운영

  • μƒˆ 버전을 배포할 λ•Œ λ‚˜λ¨Έμ§€ ν•œ 그룹에 μƒˆ 버전을 λ°˜μ˜ν•˜κ³  ν•΄λ‹Ή 그룹으둜 λΌμš°νŒ… λ³€κ²½

  • μΆ”ν›„ μƒˆ 버전이 배포될 λ•Œμ—λŠ” λ‹€λ₯Έ ν•œ 그룹에 λ°˜μ˜ν•˜κ³  λ‹€μ‹œ λΌμš°νŒ… λ³€κ²½

  • GC Copy μ•Œκ³ λ¦¬μ¦˜κ³Ό μœ μ‚¬ν•˜κ²Œ λ™μž‘

  • μž₯점

    • μƒˆ 버전 반영 속도가 빠름

    • μƒˆ 버전에 λ¬Έμ œκ°€ μžˆλ‹€λ©΄ λ‘€λ°±ν•˜λŠ” 속도도 빠름

  • 단점

    • λ¦¬μ†ŒμŠ€κ°€ 두 배둜 ν•„μš” (κΈ°μ‘΄ λŒ€λΉ„ 두 배의 μΈμŠ€ν„΄μŠ€κ°€ ν•„μš”ν•˜λ―€λ‘œ)

Last updated