CI/CD 파이프 라인

GyungHo Go·2021년 9월 2일
0

CI/CD 는 어플리케이션 개발 단계부터 배포까지 모든 단계들을 자동화하고, 짧은 주기로 효율적이고 빠르게 배포하여 고객에게 제공하는 방법이다.

어플리케이션의 전체적인 라이프사이클에 지속적인 자동화와 모니터링을 제공한다. 이러한 것을 일반적으로 CI/CD 파이프 라인 이라 부르고, 개발 및 운영팀의 애자일 방식을 통해 지원된다.

CI

Continuous Integration(지속적인 통합)

CI는 개발자들을 위한 자동화 프로세스인 지속적인 통합을 의미한다.
어플리케이션의 버그나 새로운 코드 변경 사항들이 주기적으로 빌드 및 테스트 되어 메인 리포지토리에 머지 되는 것을 뜻한다.
여러 개발자가 함께 작업을 할 경우, 공유되는 리포지토리에 수많은 commit이 쌓이게 된다. 이때마다 빌드-테스트-머지 까지 하면 상당히 번거롭고, 이때 충돌이 생길수 있다. 이를 해결하는데 또 다시 시간이 소요된다.
이런 경우 자동화된 빌드-테스트는 원천 소스코드의 충돌 등을 막을 수 있다.

새로운 코드 변경 사항이 생길 때마다 정기적으로 빌드 및 테스트 하여 공유 리포지토리에 통합한다. 따라서 여러 개발자가 동시에 코드 작업을 할 경우 서로 충돌할 수 있는 문제를 사전에 해결할 수 있다.

CI는 두 가지 포인트를 잡고 가야한다.

  1. 코드 변경사항을 메인 리포에 주기적으로 빈번하게 머지해야한다.
    • 동일한 소스파일에서 여러 개발자가 서로 다른 코딩을 하고, 오랜 시간을 거쳐 변경을 하다가 머지를 하게되면 충돌이 발생한다. 이렇게 되면 머지 충돌을 해결하는데 더 많은 시간이 소요된다.
    • 따라서 얼마나 작은 단위로 나눠서 주기적으로 개발하고, 통합해 나갈지 중요하다.
  2. 통합을 위한 빌드, 테스트, 머지의 자동화
    • 개발자들은 하루에 몇번이고 주기적으로 코드의 변경사항을 메인 리포에 머지를 한다. 그러면 팀에서 만든 CI스크립트를 통해서 추가된 코드와 함께 빌드가 되고, 테스트까지 실행이 된다.

CI의 장점

  • 주기적으로 머지를 하기 때문에 충돌을 피할수 있기 때문에 개발 생산성을 향상시킨다.
  • 머지되는 모든 코드들은 자동으로 빌드되고 테스트를 하기 때문에 버그를 신속하게 찾아 해결할 수 있다.
  • 새로운 업데이트의 검증 및 릴리즈 시간을 단축 시킬수 있다.
  • 이러한 과정을 통해서 코드의 퀄리티가 향상 될수가 있다.

CD

CI가 코드의 새로운 변경 사항을 빌드-테스트-머지(병합)까지를 의미하고, CD는 CI이후에 고객의 프로덕션 환경까지 릴리즈 되는 것을 의미한다.

Continuous Delivery(지속적인 제공)

CI를 통해 주기적으로 빌드와 테스트를 거쳐 머지된 유효한 코드들을 리포지토리에 자동으로 릴리즈 한다. 그러므로 지속적인 제공 프로세스를 실현하기 위해서는 CI가 먼저 선행 되어야 한다.
CI가 잘 선행이 되었다면 배포할 준비를 거치는데, 이때 개발자나 QA팀에서 검증을 하고, 검증이 완료되면 수동으로 사용자에게 배포를 진행하는 것을 지속적인 제공이라고 한다.

Continuous Deployment(지속적 배포)

CI/CD 파이프 라인의 마지막 단계는 지속적 배포이다. 릴리즈가 준비가 되자마자 사용자에게 자동으로 배포할 수 있는데, 이렇게 프로덕션으로 릴리즈를 자동화 해놓는 것을 지속적 배포라고 한다. 지속적 제공과 비슷하지만 최종 배포가 자동화가 되었는지 아닌지 차이가 있다.

참고

드림코딩 by 엘리 https://www.youtube.com/watch?v=0Emq5FypiMM
https://www.redhat.com/ko/topics/devops/what-is-ci-cd

profile
기록하는 습관

0개의 댓글