CI / CD

박형석·2021년 11월 18일
1

CI / CD

목록 보기
2/7
post-thumbnail

CI / CD 배경?

시장과 고객의 요구에 빠르게 반응해서 지속적으로 제품을 출시 및 업데이트하는 것은 중요한 과제이다. 이를 위해서 세계적으로 많은 기업이 'CI / CD' 라는 개발 프로세스로 사용하고 있다. CI / CD는 이전 글에서 살펴본 애자일과 깊은 관련이 있고 애자일의 기반 철학과 함께 현시장의 반응에 발빠르게 답하기 위해 사용하는 개발 프로세스이다.

CI / CD 란?

앱 개발 단계부터 배포까지 모든 단계를 자동화해 효율적으로, 사용자에게 빈번하게 배포할 수 있도록 하는 것이다.

  • CI는 Continuous Integration 지속적인 통합이라는 뜻이고
  • CD는 Continuous Delivery 지속적인 제공, Delivery 대신 Deployment를 사용해 지속적인 배포로 사용하는 경우도 있다. 이 둘의 차이점은 배포 단계의 자동화이다.

CI / CD 자동화 과정

1. Continuous Integration 지속적인 통합

버그 수정, 새로 만드는 기능들이 Main Repository(이하 Main Repo)에 주기적으로 테스트, 빌드되어서 머지되는 것을 말한다. 아래는 CI에서 개발자가 염두해 두어야 하는 점이다.

  • 개발자는 Main Repo에 코드 변경사항을 주기적으로 빈번하게 머지해야 한다. 협업시에 머지되지 않은 코드가 많아지면 많아질 수록 Main Repo에 머지시 더 큰 위험부담을 안게 된다. 코드를 작성하는 시간보다 충돌로 인해서 수정하는 시간이 더 걸릴 수도 있다. 구현하고자 하는 기능을 어떻게 더 작은 단위로 나누어서 반영할 수 있는지, 또는 배포할 수 있을지를 고민해보자.

  • 이렇게 주기적으로 머지된 변경된 코드가 자동으로 빌드되어서 코드 변경 이후에도 빌드가 성공적으로 되는지 확인이 되어야 하고 또 추가된 코드로 인해 기존 시스템에 다른 버그를 초래하지는 않았는지 자동으로 테스트가 되어야 한다. 보통 개발팀에서는 다음과 같이 셋업을 한다.

  1. Main Repo가 있고 개발자들은 주기적, 빈번하게 코드의 변경사항을 머지한다.
    (물론 이전에 코드 리뷰를 통해 적절한 코드인지 확인하는 단계가 필요)

  2. 이렇게 머지가 되었으면, CI의 스크립트를 통해서 추가된 코드와 함께 자동으로 Repo가 빌드가 되고 빌드가 잘 된다면 작성한 Unit test 혹은 Integration test 등등의 테스트가 실행된다.

  3. 이렇게 빌드 및 테스트를 통과하면 green sign과 함께 CD에 반영이 되고 반대로 테스트에 실패하게 되면 red sign과 함께 테스트를 작성한 개발자에게 알려준다.

  • CI의 장점은?
  1. 주기적, 빈번히 머지를 하기 때문에 merge conflict를 피할 수 있다.

  2. 머지되는 모든 코드들은 자동으로 빌드 및 테스트 되기 때문에 변경되는 코드의 문제나 결함을 빠르게 알 수 있다. 1번의 결과에 따라 작고 또 독립적인 단위의 코드를 다루기 때문에 수정할 때도 좋다.

  3. CI를 운영하기 위해서는 모든 개발자가 자신의 코드에 Unit test를 포함해야 한다. 따라서 더 나은 코드 퀄리티를 유지할 수 있다. 안정성이 좋아진다.

2. Continuous Delivery 지속적 제공 / Continuous Deployment 지속적 배포

마지막 배포 단계를 자동화하는 것을 의미한다. CI 단계를 마친 코드가 배포될 준비 단계(prepare Release) 를 거치고 이 릴리즈가 정상 작동하는지, 원하는 기능을 구현했는지를 검증한 다음 최종적으로 사용자에게 배포해도 되겠다고 결정이 되면 수동적으로 배포하는 단계를 Continuous Delivery라고 한다. 또는 릴리즈가 준비되자마자 사용자에게 자동으로 배포 할 수 있도록 모든 과정을 자동화하는 것이 Continuous Deployment라고 한다. 다른 것은 동일하지만 최종 단계가 자동화가 되었는지의 유무에 따라 구분된다. 이런 모든 과정을 어떻게 자동화를 하는지, 어떻게 스크립트를 쓰는지, 어떻게 테스트를 할 것인지, 얼마나 자신감이 있는지에 따라 전자 혹은 후자를 사용한다.

CI / CD 파이프라인 정리

이렇게 CI와 CD가 분리되지 않고 연속성을 가지고 진행되기 때문에 보통 함께 언급된다. 간단하게 정리해보면,

  1. CODE : 개발자가 작은 단위로 나누어서 주기적, 빈번히 Main Repo에 머지하면
  2. BUILD : 자동으로 빌드가 되는지 확인하고
  3. TEST : 빌드가 되면 자동으로 각종 테스트를 진행한다.
  4. RELEASE : 테스트가 성공적으로 진행되면 릴리즈 준비를 한다.
  5. DEPLOY : 릴리즈 단계에서 수동으로 혹은 자동으로 배포한다.

회사마다 CI / CD 를 위한 툴이 다르다. 툴에 대해서 정확하게 알아보고 공부하는 것이 중요하다. 다음 글부터는 Cookid에 사용한 Bitrise(CI를 위한 툴)와 Fastlane(CD를 위한 툴)에 대해서 차근차근 알아가보려고 한다.

profile
IOS Developer

0개의 댓글