본문 바로가기

iOS

[iOS] Fastlane + Github Actions로 CI/CD 파이프라인 구축하기 (1편 - CI/CD란 무엇일까?)

CI/CD란?

Continuous Integration / Continuous Delivery
지속적 통합, 빌드, 테스트 / 지속적 배포

개발자들이 코드를 짜고 테스트를 작성한 코드를 깃허브 Repository에 Push한다. 그러면 팀원들에게 그 내용이 공유가 된다. 여기서 CI/CD 서비스가 역할을 한다. CI/CD 서비스는 개발자가 미리 해둔 설정에 따라 빌드나 테스트를 자동으로 실행한다. 빌드가 성공적으로 되는 것이 확인이 되면, 심사 요청 또한 자동으로 진행한다.

 

만약 빌드나 테스트가 실패하면, 개발자들에게 어디가 실패했는지 메일이나 슬랙으로 알리고, 이를 인지한 개발자들은 문제가 있는 코드나 테스트를 수정할 수 있다.

 

CI/CD 서비스는 위와 같은 과정을 반복하기 때문에, 새 버전의 소프트웨어를 제공하기 위해 거쳐야 하는 일련의 단계라는 의미에서 CI/CD 파이프라인이라고도 부른다.

 

조금 더 세부적으로 들어가서, CI와 CD 각각의 의미를 살펴보면
CI(Continuous Integration) : 지속적 통합, 빌드 테스트 - 소프트웨어의 새로운 코드들이 자동으로 빌드, 테스트되고 버전이 통합되는 과정
CD(Continuous Delivery/Deployment) : 지속적 배포 - CI를 통해서 통합된 새로운 버전을 사용자들에게 수동 또는 자동으로 배포하는 과정. 수동일 때를 Delivery, 자동일 때를 Deployment라고 한다.

 

CI/CD 파이프라인 구축이 의미 있는 이유

개발 과정에서 코드 수정 및 기능 구현을 최대한 쪼개서 테스트하고 기존 버전에 통합하면, 충돌을 줄이고 추후 문제점을 찾는 것도 용이하게 된다. 그러나 작은 단위로 기능을 구현하고 통합하게 되면 앱스토어에 앱을 통합하고 배포하는 횟수 또한 덩달아 증가하게 되고, 개발에 필요한 시간보다 배포에 필요한 시간이 많이 드는 경험을 하게 될 수 있다. 그렇기에 CI/CD 파이프라인을 구축해 놓는다면 이 모든 과정을 단순히 코드 몇줄로 실행할 수 있기에 개발 프로세스를 훨씬 효율적으로 만들 수 있다. 이는 전반적인 생산성 향상으로 이어지고, 소프트웨어 품질로도 직결된다.

CI/CD 구축에 사용할 수 있는 Service

CI/CD 구축에 대한 옵션으로 여러 가지 Service들이 존재하는데, 대표적으로 Jenkins, Bitrise, CircleCI, Github Actions 등이 있고, 이 밖에도 회사에 따라 직접 구현하여 사용하는 곳도 있다.

 

Jenkins
무료이며 많은 사용자를 가졌기에 legacy가 많다. 따라서 문제 상황에 대응하기 용이하다.
서비스 자체는 무료지만 별도 서버를 요구하기 때문에 사실상 무료라고 생각하기에는 무리가 있다. 세팅과 운영 측면에서 러닝 커브가 꽤 높은 편이기에 소규모 프로젝트의 경우 리소스 낭비가 될 수도 있다.

 

Bitrise
GUI가 있어 세팅이 쉽고 관리도 쉽지만, 유료이다.
모바일 앱 개발을 위한 CI/CD 툴이라는 정체성을 가지고 있기에 모바일 개발을 위한 기능, 플러그인들이 많다.

 

Github Actions
깃허브에서 바로 연동하여 무료로 쉽게 사용할 수 있다는 큰 장점이 있다. Jenkins와 비교하여 설정 비용이 훨씬 적지만, 그런 만큼 Jenkins 정도의 깊은 제어는 불가능하다. Github actions에는 비교적 관련 문서나 자료가 적지만, MarketPlace를 통해 다른 개발자가 구현한 Actions를 사용할 수 있다. 따라서 소규모 프로젝트의 경우 Github Actions를 사용하는 것도 좋은 옵션이 될 수 있다.

 


참고문헌

CI/CD
Github Actions와 Jenkins