DevOps/CI&CD

CI/CD λž€ 무엇인가?

ν”„λ‘œκ·Έλž˜λ¨Έ μ˜€μ›” 2024. 7. 17.

CI / CD

ν΄λΌμš°λ“œ μ»΄ν“¨νŒ… μ„œλΉ„μŠ€λ₯Ό μ΄μš©ν•˜μ—¬ 가상 ν™˜κ²½μ— μ½”λ“œλ₯Ό ν†΅ν•©ν•˜μ—¬ λ°°ν¬ν•˜λŠ” 것을 CI/CD 라고 λΆ€λ¦…λ‹ˆλ‹€. CI/CDλŠ” Continuous Integration(지속적 톡합)κ³Ό Continuous Deployment(지속적 배포) λ˜λŠ” Continuous Delivery(지속적 전달)λ₯Ό ν¬ν•¨ν•˜λŠ” μ†Œν”„νŠΈμ›¨μ–΄ 곡학 λ°©λ²•λ‘ μœΌλ‘œμ„œ, CI/CDλŠ” μ†Œν”„νŠΈμ›¨μ–΄ 개발 ν”„λ‘œμ„ΈμŠ€λ₯Ό μžλ™ν™”ν•˜κ³ , μ½”λ“œ λ³€κ²½ 사항을 더 자주, 더 μ‹ λ’°ν•  수 있게 배포할 수 μžˆλ„λ‘ λ„μ™€μ€λ‹ˆλ‹€. μ΄λŠ” 개발 μ£ΌκΈ°λ₯Ό λ‹¨μΆ•ν•˜κ³ , ν’ˆμ§ˆμ„ 높이며, μ‚¬μš©μžμ—κ²Œ 더 λΉ λ₯΄κ²Œ κ°€μΉ˜λ₯Ό μ œκ³΅ν•  수 있게 ν•©λ‹ˆλ‹€.

좜처 : https://www.synopsys.com/glossary/what-is-cicd.html

1. CI - Continuous Integration(지속적 톡합)

지속적 톡합은 κ°œλ°œμžλ“€μ΄ μž‘μ„±ν•œ μ½”λ“œ λ³€κ²½ 사항을 μ •κΈ°μ μœΌλ‘œ, ν†΅μƒμ μœΌλ‘œλŠ” ν•˜λ£¨μ—λ„ μ—¬λŸ¬ 번 쀑앙 μ €μž₯μ†Œμ— ν†΅ν•©ν•˜λŠ” κ³Όμ •μž…λ‹ˆλ‹€. CI의 μ£Όμš” λͺ©ν‘œλŠ” μ½”λ“œ 병합 κ³Όμ •μ—μ„œ λ°œμƒν•  수 μžˆλŠ” 문제λ₯Ό 쑰기에 λ°œκ²¬ν•˜κ³  ν•΄κ²°ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. 이λ₯Ό 톡해 νŒ€μ€ 보닀 λΉ λ₯΄κ³  효율적으둜 ν˜‘μ—…ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

 

μ£Όμš” νŠΉμ§•

  1. 버전 관리 μ‹œμŠ€ν…œ (VCS)
    • λͺ¨λ“  μ½”λ“œ λ³€κ²½ 사항을 쀑앙 μ €μž₯μ†Œ(예: Git, SVN)에 μ €μž₯ν•˜μ—¬ 버전을 κ΄€λ¦¬ν•©λ‹ˆλ‹€.
    • 각 κ°œλ°œμžλŠ” μƒˆλ‘œμš΄ κΈ°λŠ₯을 κ°œλ°œν•˜κ±°λ‚˜ 버그λ₯Ό μˆ˜μ •ν•  λ•Œ λ³„λ„μ˜ 브랜치λ₯Ό μ‚¬μš©ν•˜μ—¬ μž‘μ—…ν•©λ‹ˆλ‹€.
  2. μžλ™ λΉŒλ“œ
    • μ½”λ“œκ°€ 쀑앙 μ €μž₯μ†Œμ— ν‘Έμ‹œλ  λ•Œλ§ˆλ‹€ μžλ™μœΌλ‘œ λΉŒλ“œκ°€ μ‹€ν–‰λ©λ‹ˆλ‹€.
    • λΉŒλ“œ 도ꡬ(예: Maven, Gradle, Make)λŠ” μ†ŒμŠ€ μ½”λ“œλ₯Ό μ»΄νŒŒμΌν•˜κ³ , 쒅속성을 ν•΄κ²°ν•˜λ©°, μ΅œμ’… μ‚°μΆœλ¬Όμ„ μƒμ„±ν•©λ‹ˆλ‹€.
  3. μžλ™ ν…ŒμŠ€νŠΈ
    • λΉŒλ“œκ°€ μ™„λ£Œλ˜λ©΄ μžλ™μœΌλ‘œ ν…ŒμŠ€νŠΈκ°€ μ‹€ν–‰λ©λ‹ˆλ‹€.
    • λ‹¨μœ„ ν…ŒμŠ€νŠΈ, 톡합 ν…ŒμŠ€νŠΈ, κΈ°λŠ₯ ν…ŒμŠ€νŠΈ 등을 톡해 μ½”λ“œμ˜ ν’ˆμ§ˆμ„ κ²€μ¦ν•©λ‹ˆλ‹€.
  4. ν”Όλ“œλ°± μ‹œμŠ€ν…œ
    • λΉŒλ“œμ™€ ν…ŒμŠ€νŠΈ κ²°κ³ΌλŠ” κ°œλ°œμžμ—κ²Œ μ¦‰μ‹œ ν”Όλ“œλ°±μœΌλ‘œ μ œκ³΅λ©λ‹ˆλ‹€.
    • CI μ„œλ²„(예: Jenkins, Travis CI, CircleCI)λŠ” λΉŒλ“œμ™€ ν…ŒμŠ€νŠΈ μƒνƒœλ₯Ό μ‹œκ°μ μœΌλ‘œ 보여주고, μ•Œλ¦Όμ„ 톡해 κ°œλ°œμžμ—κ²Œ κ²°κ³Όλ₯Ό μ „λ‹¬ν•©λ‹ˆλ‹€.

지속적인 톡합(CI)λ₯Ό ν†΅ν•΄μ„œ κ°œλ°œμžλŠ” μ½”λ“œ λ³€κ²½ 사항에 λŒ€ν•œ ν”Όλ“œλ°±μ„ λΉ λ₯΄κ²Œ λ°›μ•„ λ³Ό 수 있게 λ˜μ—ˆκ³ , 버그λ₯Ό 쑰기에 λ°œκ²¬ν•˜κ³  μˆ˜μ •ν•  수 있게 λμŠ΅λ‹ˆλ‹€. λ˜ν•œ μžλ™ν™” ν…ŒμŠ€νŠΈλ₯Ό 톡해 μ½”λ“œ ν’ˆμ§ˆμ„ μ§€μ†μ μœΌλ‘œ κ²€μ¦ν•˜κ³ , 체크 μŠ€νƒ€μΌ μ»¨λ²€μ…˜μ„ μ„€μ •ν•˜μ—¬ μ—¬λŸ¬ κ°œλ°œμžκ°€ ν•œ ν”„λ‘œμ νŠΈλ₯Ό κ°œλ°œν•˜μ—¬λ„, μ€‘κ΅¬λ‚œλ°© μ½”λ“œ μŠ€νƒ€μΌμ΄ μ•„λ‹Œ, ν•œλͺ…이 κ°œλ°œν•œ 것과 같은 가독성 높은 ν”„λ‘œκ·Έλž˜λ°μ΄ κ°€λŠ₯ν•΄μ‘ŒμŠ΅λ‹ˆλ‹€. μ΄λŸ¬ν•œ κ³Όμ • 덕뢄에 개발 속도가 ν–₯μƒλ˜κ³  μ½”λ“œ λ³‘ν•©μ‹œ λ°œμƒν•˜λŠ” 문제λ₯Ό 쀄일 수 있게 λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

 

2. CD - Continuous Deployment(지속적 배포) & Continuous Delivery(지속적 전달)

지속적 배포와 지속적 전달은 λͺ¨λ‘ CI의 μ—°μž₯μ„ μœΌλ‘œ, μžλ™ν™”λœ 배포 νŒŒμ΄ν”„λΌμΈμ„ 톡해 μ½”λ“œλ₯Ό μ‹€μ œ 운영 ν™˜κ²½μ— λ°°ν¬ν•˜λŠ” 것을 μ˜λ―Έν•©λ‹ˆλ‹€.

지속적 전달은 λͺ¨λ“  μ½”λ“œ λ³€κ²½ 사항이 λΉŒλ“œ, ν…ŒμŠ€νŠΈ, νŒ¨ν‚€μ§• 과정을 거쳐 μ€€λΉ„λ˜λ©΄, 이λ₯Ό 운영 ν™˜κ²½μ— 배포할 수 μžˆλŠ” μƒνƒœλ‘œ μœ μ§€ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. λ°°ν¬λŠ” μ—¬μ „νžˆ μˆ˜λ™μœΌλ‘œ μ΄λ£¨μ–΄μ§ˆ 수 μžˆμ§€λ§Œ, 배포 μ€€λΉ„ μƒνƒœλŠ” 항상 μœ μ§€λ©λ‹ˆλ‹€.

지속적 λ°°ν¬λŠ” 지속적 μ „λ‹¬μ˜ μ—°μž₯μ„ μœΌλ‘œ, μ½”λ“œ λ³€κ²½ 사항이 μžλ™μœΌλ‘œ 운영 ν™˜κ²½μ— λ°°ν¬λ˜λŠ” 것을 μ˜λ―Έν•©λ‹ˆλ‹€. 즉, λͺ¨λ“  μ½”λ“œ λ³€κ²½ 사항이 λΉŒλ“œ, ν…ŒμŠ€νŠΈ, νŒ¨ν‚€μ§• 과정을 거친 ν›„ μžλ™μœΌλ‘œ λ°°ν¬λ©λ‹ˆλ‹€.

 

μ£Όμš”νŠΉμ§•

 

  1. 배포 νŒŒμ΄ν”„λΌμΈ
    • μ½”λ“œκ°€ μ €μž₯μ†Œμ— ν‘Έμ‹œλ˜λ©΄, CI λ‹¨κ³„μ—μ„œ λΉŒλ“œμ™€ ν…ŒμŠ€νŠΈλ₯Ό 거쳐 CD λ‹¨κ³„λ‘œ λ„˜μ–΄κ°‘λ‹ˆλ‹€.
    • 배포 νŒŒμ΄ν”„λΌμΈμ€ μ—¬λŸ¬ 단계λ₯Ό 포함할 수 μžˆμŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, μŠ€ν…Œμ΄μ§• ν™˜κ²½μ— λ¨Όμ € λ°°ν¬ν•œ ν›„ μ΅œμ’…μ μœΌλ‘œ 운영 ν™˜κ²½μ— λ°°ν¬ν•©λ‹ˆλ‹€.
  2. μžλ™ν™”λœ 배포
    • 배포 도ꡬλ₯Ό 톡해 μ½”λ“œλ₯Ό λ‹€μ–‘ν•œ ν™˜κ²½μ— μžλ™μœΌλ‘œ λ°°ν¬ν•©λ‹ˆλ‹€.
    • 배포 과정은 μ½”λ“œκ°€ μ˜¬λ°”λ₯΄κ²Œ μž‘λ™ν•˜λŠ”μ§€ ν™•μΈν•˜κΈ° μœ„ν•΄ 좔가적인 ν…ŒμŠ€νŠΈλ₯Ό 포함할 수 μžˆμŠ΅λ‹ˆλ‹€.
  3. λͺ¨λ‹ˆν„°λ§ 및 ν”Όλ“œλ°±
    • 운영 ν™˜κ²½μ—μ„œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ μƒνƒœλ₯Ό λͺ¨λ‹ˆν„°λ§ν•˜μ—¬ λ¬Έμ œκ°€ λ°œμƒν•˜λ©΄ μ¦‰μ‹œ ν”Όλ“œλ°±μ„ μ œκ³΅ν•©λ‹ˆλ‹€.
    • λͺ¨λ‹ˆν„°λ§ 도ꡬ (예: Prometheus, Grafana)λ₯Ό 톡해 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ μ„±λŠ₯, 였λ₯˜, μ‚¬μš©μž 행동 등을 μΆ”μ ν•©λ‹ˆλ‹€.

 

지속적인 전달/배포λ₯Ό 톡 μ½”λ“œ λ³€κ²½ 사항이 μžλ™μœΌλ‘œ 운영 ν™˜κ²½μ— λ°°ν¬λ˜μ–΄ μ‚¬μš©μžμ—κ²Œ λΉ λ₯΄κ²Œ μ œκ³΅λ©λ‹ˆλ‹€. 배포 과정이 μžλ™ν™”λ˜μ–΄ 인적 였λ₯˜λ₯Ό 쀄이고, μΌκ΄€λœ 배포가 κ°€λŠ₯ν•©λ‹ˆλ‹€. 자주 λ°°ν¬ν•¨μœΌλ‘œμ¨ μ‚¬μš©μž ν”Όλ“œλ°±μ„ λΉ λ₯΄κ²Œ λ°˜μ˜ν•˜κ³ , μ§€μ†μ μœΌλ‘œ μ„œλΉ„μŠ€λ₯Ό κ°œμ„ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

 

CI/CDλŠ” μ†Œν”„νŠΈμ›¨μ–΄ 개발과 배포λ₯Ό μžλ™ν™”ν•˜μ—¬ 개발 속도λ₯Ό 높이고, ν’ˆμ§ˆμ„ κ°œμ„ ν•˜λ©°, μ‚¬μš©μžμ—κ²Œ 더 λΉ λ₯΄κ²Œ κ°€μΉ˜λ₯Ό μ œκ³΅ν•  수 μžˆλ„λ‘ ν•©λ‹ˆλ‹€. CI/CDλ₯Ό μ„±κ³΅μ μœΌλ‘œ κ΅¬ν˜„ν•˜κΈ° μœ„ν•΄μ„œλŠ” μ μ ˆν•œ 도ꡬ와 κΈ°μˆ μ„ μ„ νƒν•˜κ³ , ν…ŒμŠ€νŠΈ μžλ™ν™”, λ³΄μ•ˆ 관리, 문화적 λ³€ν™”λ₯Ό ν¬ν•¨ν•œ λ‹€μ–‘ν•œ 과제λ₯Ό ν•΄κ²°ν•΄μ•Ό ν•©λ‹ˆλ‹€. 이λ₯Ό 톡해 κ°œλ°œμžλŠ” 지속적인 μ½”λ“œ κ°œμ„ κ³Ό κΎΈμ€€ν•˜κ²Œ λ°œμ „λœ μ„œλΉ„μŠ€λ₯Ό μ œκ³΅ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

 

λŒ“κΈ€