λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
🍎 iOS

[CI/CD] 지속적 톡합과 지속적 배포의 κ°œλ…κ³Ό μž₯점

by ν‹΄λ”” 2022. 9. 3.
728x90
λ°˜μ‘ν˜•

Intro

이전에 ꡉμž₯히 ν₯미둜운 μ˜μƒμ„ λ³Έ 적이 μžˆμŠ΅λ‹ˆλ‹€. ν•˜λ‚˜μ˜ μ„œλΉ„μŠ€λ₯Ό μ–΄λ–»κ²Œ κΈ°νšν•˜κ³  μ‚¬μš©μžμ—κ²Œ μ œκ³΅λ˜λŠ”μ§€μ— κ΄€λ ¨λœ μ˜μƒμ΄μ—ˆμŠ΅λ‹ˆλ‹€. μ‚¬μš©μžλ§ˆλ‹€ λ²„νŠΌ 배치λ₯Ό λ‹€λ₯΄κ²Œ 보이게 ν•΄μ„œ μ–΄λ–€ μœ„μΉ˜μ˜ λ²„νŠΌμ΄ 더 λ§Žμ€ μ‚¬μš©μžμ—κ²Œ λˆŒλ ΈλŠ”μ§€ 둜그λ₯Ό μˆ˜μ§‘ν•˜κ³ , 이에 따라 μ˜μ‚¬ 결정을 ν•œλ‹€λŠ” λ‚΄μš©μ΄μ—ˆμŠ΅λ‹ˆλ‹€. μ΄λ•Œ 이 λ²„νŠΌμ˜ μœ„μΉ˜λ₯Ό λ°”κΎΈλŠ” ν”„λ‘œμ„ΈμŠ€λ₯Ό 잘 ꡬ좕해 λ†“μ•„μ„œ 쑰금의 μˆ˜μ •μœΌλ‘œ λΉ λ₯΄κ²Œ Aμ•ˆ B μ•ˆμ„ ν…ŒμŠ€νŠΈ ν•΄ λ³Ό 수 μžˆμ—ˆλ‹€κ³  ν•©λ‹ˆλ‹€.

 

μ΄λ ‡κ²Œ μž‘μ€ 일뢀뢄을 μˆ˜μ • ν•˜λŠ” κ²ƒλΏλ§Œ μ•„λ‹ˆλΌ μ„œλΉ„μŠ€λ₯Ό μš΄μ˜ν•˜λ‹€ 보면 버그λ₯Ό λ°œκ²¬ν•˜κ²Œ 되고 μ½”λ“œλ₯Ό μˆ˜μ •ν•˜κ±°λ‚˜ μƒˆλ‘œμš΄ κΈ°λŠ₯을 μΆ”κ°€ν•˜μ—¬ μ‚¬μš©μžμ—κ²Œ λ°°ν¬ν•˜μ—¬ μ„œλΉ„μŠ€ν•˜λŠ” 일이 μž¦μŠ΅λ‹ˆλ‹€. 

 

μ½”λ“œλ₯Ό μž‘μ„±ν•˜κ±°λ‚˜ μˆ˜μ •ν•˜κ²Œ 되면 이 μ½”λ“œμ— λŒ€ν•œ 검증을 μœ„ν•΄ λ‚΄λΆ€μ μœΌλ‘œ μ½”λ“œ 리뷰λ₯Ό ν•˜κ³  QAκ°€ 이루어진 λ’€ 이 ν…ŒμŠ€νŠΈ κΉŒμ§€ ν†΅κ³Όν•˜κ²Œ 되면 μ΅œμ’…μ μœΌλ‘œ μ‚¬μš©μžκ°€ μ‚¬μš©ν•΄ λ³Ό 수 μžˆλ„λ‘ λ°°ν¬λ©λ‹ˆλ‹€. 

 

κ°œλ°œμžκ°€ μž‘μ„±ν•œ μ½”λ“œκ°€ λ°”λ‘œ 머지(merge)되고 μžλ™μœΌλ‘œ ν…ŒμŠ€νŠΈ λ˜μ–΄ κ·Έ κ²°κ³Όλ₯Ό λ°”λ‘œ μ•Œ 수 μžˆλ‹€λ©΄, 그리고 λ°°ν¬κΉŒμ§€ μžλ™μœΌλ‘œ 이뀄진닀면 개발자뿐만 μ•„λ‹ˆλΌ 이 ν”„λ‘œμ„ΈμŠ€μ— μ°Έμ—¬ν•œ λͺ¨λ“  인λ ₯의 λΉ„μš©μ΄ 쀄어듀고 μ„œλΉ„μŠ€κ°€ ν•„μš”λ‘œ ν•˜λŠ” λ³Έμ§ˆμ— 더 집쀑할 수 μžˆμŠ΅λ‹ˆλ‹€.

 

졜근 μž‘μ€ μˆ˜μ •λ§ŒμœΌλ‘œλ„ μ—¬λŸ¬ 앱을 λ™μ‹œμ— 배포해야 ν•˜λŠ” μƒν™©μ—μ„œ CI/CD에 λŒ€ν•΄ μ΄ν•΄ν•˜κ³  μ–΄λ– ν•œ λ°©λ²•μœΌλ‘œ κ΅¬ν˜„ν•  수 μžˆλŠ”μ§€ μ•Œμ•„λ³΄κΈ° μœ„ν•΄ κ³΅λΆ€ν•œ λ‚΄μš©μ„ κ³΅μœ ν•©λ‹ˆλ‹€. 

 

CI/CDλž€?

μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ 개발 ~ 배포 κΉŒμ§€ μžλ™ν™”ν•˜μ—¬ 효율적이고 λΉ λ₯΄κ²Œ μ‚¬μš©μžμ—κ²Œ 빈번히 배포할 수 μžˆλ„λ‘ ν•˜λŠ” 것이 CI/CD의 ν”„λ‘œμ„ΈμŠ€μž…λ‹ˆλ‹€.

CIλŠ” Continuous Integration 지속적 ν†΅ν•©μ˜ μ•½μžλ‘œ 

Code -> Build -> Test의 μžλ™ν™” 과정이고

CDλŠ” Continuous Delivery 지속적인 제곡 or Continuous Deployment 지속적인 배포λ₯Ό μ˜λ―Έν•©λ‹ˆλ‹€. 

릴리즈 λ˜μ–΄ λ°°ν¬λ˜λŠ” κ³Όμ •μ˜ μžλ™ν™”λ₯Ό μ˜λ―Έν•©λ‹ˆλ‹€.

 

CI 지속적 톡합

μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ 있고 λ™μ‹œμ— κ°œλ°œμžλ“€μ΄ μ½”λ“œλ₯Ό μž‘μ„±ν•©λ‹ˆλ‹€. κ°œλ°œμžλ“€μ€ μƒˆλ‘­κ²Œ μ½”λ“œλ₯Ό μž‘μ„±ν•˜κ³  버그 μˆ˜μ •μ„ ν•©λ‹ˆλ‹€. μ΄λ•Œ λΉŒλ“œ 및 ν…ŒμŠ€νŠΈκ°€ μžλ™μœΌλ‘œ μ§„ν–‰λ˜λ©° μ—¬κΈ°μ—μ„œ λ°œμƒν•œ 버그λ₯Ό κ°œλ°œμžκ°€ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€. λͺ¨λ“  ν”„λ‘œμ„ΈμŠ€κ°€ λλ‚œ μ‹œμ μ΄ μ•„λ‹Œ 개발 진행 쀑인 μ‹œμ μ— λΉŒλ“œμ™€ ν…ŒμŠ€νŠΈκ°€ 이루어 μ§€λ―€λ‘œ μ˜ˆμƒν•˜μ§€ λͺ»ν•œ 버그λ₯Ό λ°œκ²¬ν•˜μ—¬ μ½”λ“œ ν’ˆμ§ˆμ„ 높일 수 μžˆμŠ΅λ‹ˆλ‹€. 

μ΄λ•Œ CIμ—μ„œ 이루어져야 ν•˜λŠ” 것이 μžˆμŠ΅λ‹ˆλ‹€. 

 

머지 μΆ©λŒμ„ μ΅œμ†Œν™”ν•˜κΈ° μœ„ν•΄μ„œ 변경사항을 주기적으둜 λΉˆλ²ˆν•˜κ²Œ λ°”λ‘œ λ°˜μ˜ν•΄μ•Ό ν•©λ‹ˆλ‹€. μ—¬λŸ¬ κ°œλ°œμžκ°€ 같은 μ½”λ“œλ₯Ό μˆ˜μ •ν•˜κ³  μžˆλŠ” μƒν™©μ—μ„œ 머지가 느리게 이루어진닀면 머지 좩돌이 이루어지고 λ¬Έμ œκ°€ λ°œμƒν•  수 μžˆμŠ΅λ‹ˆλ‹€

CIλŠ” μž‘μ€ λ‹¨μœ„λ‘œ λ‚˜λˆ„μ–΄ κ°œλ°œν•˜κ³  μˆ˜μ‹œλ‘œ 곡유 λ ˆν¬μ§€ν† λ¦¬μ— λ°°ν¬ν•©λ‹ˆλ‹€. μ΄λ ‡κ²Œ ν•˜λŠ” μ΄μœ λŠ” λ‹¨μˆœνžˆ 머지 좩돌뿐만 μ•„λ‹ˆλΌ λ‹¨μœ„κ°€ μž‘μ•„μ§ˆμˆ˜λ‘ μ–΄λ””μ—μ„œ λ¬Έμ œκ°€ λ°œμƒν–ˆλŠ”μ§€ νŒŒμ•…μ΄ μ‰½λ‹€λŠ” μž₯점도 μžˆμŠ΅λ‹ˆλ‹€.

 

이 과정이 CIμ—μ„œ μžλ™ν™”λ‘œ μ§„ν–‰λ©λ‹ˆλ‹€. 주기적으둜 곡유 λ ˆν¬μ§€ν† λ¦¬μ— λ¨Έμ§€λœ μ½”λ“œκ°€ μ„±κ³΅μ μœΌλ‘œ λΉŒλ“œλ˜λŠ”μ§€, 결함이 μžˆμ§€λŠ” μ•Šμ€μ§€ ν…ŒμŠ€νŠΈλ˜μ–΄μ•Ό ν•˜κ³  이 κ²°κ³Όλ₯Ό κ°œλ°œμžμ—κ²Œ μ œκ³΅ν•©λ‹ˆλ‹€. (ν…ŒμŠ€νŠΈλ₯Ό μœ„ν•΄ μœ λ‹› ν…ŒμŠ€νŠΈλ₯Ό μž‘μ„±ν•©λ‹ˆλ‹€)

λΉŒλ“œμ—μ„œ λλ‚˜λŠ” 것이 μ•„λ‹ˆλΌ ν…ŒμŠ€νŠΈλ₯Ό μžλ™μœΌλ‘œ μ§„ν–‰ν•˜κΈ° λ•Œλ¬Έμ— μ½”λ“œ 결함과 버그λ₯Ό λΉ λ₯΄κ²Œ λ°œκ²¬ν•  수 있고 개발 진행 쀑에 버그λ₯Ό μˆ˜μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€. CIλ₯Ό μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” 것보닀 μ½”λ“œ 퀄리티λ₯Ό ν–₯μƒν•˜κ³  μ•ˆμ •μ„±μ„ 높일 수 μžˆμŠ΅λ‹ˆλ‹€.

 

CD 지속적인 제곡/배포

CIμ—μ„œ 개발, λΉŒλ“œ, ν…ŒμŠ€νŠΈλœ μ½”λ“œμ˜ 배포λ₯Ό μžλ™ν™”ν•˜λŠ” λ‹¨κ³„μž…λ‹ˆλ‹€. CIμ—μ„œ ν…ŒμŠ€νŠΈκΉŒμ§€ μ™„λ£Œκ°€ λ˜μ—ˆλ‹€λ©΄ μ‚¬μš©μžμ—κ²Œ μ„œλΉ„μŠ€λ₯Ό μ œκ³΅ν•  수 μžˆλŠ” λ‹¨κ³„μž…λ‹ˆλ‹€. 배포λ₯Ό μžλ™μœΌλ‘œ μ§„ν–‰ν•˜κ²Œ 되면 ν…ŒμŠ€νŠΈ ν›„ κ²€μ¦λœ μ½”λ“œκ°€ μ¦‰μ‹œ μ‚¬μš©μžμ—κ²Œ λ°°ν¬λ˜μ–΄ μ„œλΉ„μŠ€λ  수 있기 λ•Œλ¬Έμ— ν”Όλ“œλ°±μ„ μ¦‰κ°μ μœΌλ‘œ λ°˜μ˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

μ΄λ•Œ ν…ŒμŠ€νŠΈ ν›„ λ°°ν¬κΉŒμ§€ μžλ™ν™”ν•˜λŠ” 것이 지속적인 배포라 ν•˜λ©°, μ’€ 더 κ²€μ¦μ˜ 단계λ₯Ό μˆ˜λ™μœΌλ‘œ κ±°μΉ˜λŠ” 것을 지속적인 제곡이라고 ν•©λ‹ˆλ‹€. 

 

μž₯점

곡유 λ ˆν¬μ§€ν† λ¦¬μ— λ¨Έμ§€λœ μ½”λ“œκ°€ μžλ™μœΌλ‘œ ν…ŒμŠ€νŠΈλ˜μ–΄ κ°œλ°œμžλ“€μ€ λΉ λ₯΄κ²Œ κ²°ν•¨μ˜ λ°œμƒκ³Ό 문제λ₯Ό λΉ λ₯΄κ²Œ νŒŒμ•…ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μžλ™ν™”λ‘œ 인해 개발자뿐만 μ•„λ‹ˆλΌ 이해 κ΄€κ³„μžμ™€ νŒ€μ›μ΄ μ–΄λ””μ—μ„œ μ–΄λ–€ 일이 이뀄지고 μžˆλŠ”μ§€ 좔적할 수 있으며 결함을 λΉ λ₯΄κ²Œ μ°Ύμ•„λ‚Ό 수 μžˆμŠ΅λ‹ˆλ‹€. 

ν…ŒμŠ€νŠΈλ₯Ό ν†΅κ³Όν•œ μ½”λ“œλ§Œμ΄ λ ˆν¬μ§€ν† λ¦¬μ— λ¨Έμ§€λ˜κ³  검증 μ‹œκ°„μ΄ μ€„μ–΄λ“­λ‹ˆλ‹€.

κΈ°νšμ—μ„œ 개발자 그리고 ν…ŒμŠ€ν„°μ—μ„œ μš΄μ˜νŒ€μœΌλ‘œ μ „λ‹¬λ˜λ©΄μ„œ λ°œμƒν•  수 μžˆλŠ” 정보 μ†μ‹€μ˜ 문제λ₯Ό μžλ™ν™”ν•˜κΈ° λ•Œλ¬Έμ— μ‚¬λžŒμ˜ κ°œμž…μ€ 쀄어듀고 λΉ„μš©μ„ μ ˆκ°ν•˜λ©° μ•ˆμ •μ„±μ„ 높일 수 μžˆμŠ΅λ‹ˆλ‹€. μ΄λŠ” μ½”λ“œλ₯Ό 더 빨리 λ¦΄λ¦¬μ¦ˆν•˜κ³  μƒˆλ‘œμš΄ κΈ°λŠ₯을 μž‘μ„±ν•˜μ—¬ 개발 및 ν…ŒμŠ€νŠΈν•  수 있게 ν•©λ‹ˆλ‹€. 

 

Tool

Github Actions

Jenkins 

GitLab CI/CD

 

더 곡뢀할 것 

xCode cloud, fastlane, Gihub Actions

unittest μž‘μ„±

 

μ°Έκ³  μ‚¬μ΄νŠΈ

https://youtu.be/0Emq5FypiMM

https://it.donga.com/101955/

https://jud00.tistory.com/entry/CICD%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%BC%EA%B9%8C

좜처: https://www.pexels.com/ko-kr/photo/11897870/

728x90
λ°˜μ‘ν˜•

λŒ“κΈ€