1. CI/CD
출처 : 드림코딩 (https://youtu.be/0Emq5FypiMM)
빠르게 변하는 시장과 고객의 요구에 빠르게 반응해서 제품을 출시, 업데이트할 것인가는 중요한 문제입니다. 바로 이것을 위해서 세계적으로 많은 기업들이 CI/CD를 개발 프로세스로 사용하고 있습니다. 대부분의 회사에서 CI/CD 환경에서 일하고 있기 때문에 개발자이거나 소프트웨어 제품 관련 일을 한다면, 꼭 알아야 합니다.
CI/CD는 간단하게 말해,
- 어플리케이션 개발 단계부터 배포까지의 모든 단계들을 자동화를 통해,
- 효율적이고 빠르게 사용자에게 빈번히 배포하도록 만드는 것을 의미합니다.
CI (Continuous Integration, 지속적인 통합)CD (Continuous Delivery, 지속적인 제공)or(Continuous Deployment=배포)
2. CI : 지속적인 통합

버그 수정이나 새로 만드는 기능들이 매일 Repository에 주기적으로 빌드되고 테스트되어서 Merge되는 것을 말합니다.
1991년 Grady Booch에 의해서 처음으로 사용되어 지다가, 나중에 extreme programming방법론에 채택됩니다.
CI는 2가지 포인트가 있습니다.
- 코드 변경사항을 주기적으로 빈번하게 머지해야 한다.
- 예를 들어, 두 개발자 오랜 기간 머지하지 않고, 머지하려고 하면 코드 충돌이 많아 어디서부터 해결할지 문제
- 통합을 위한 단계(빌드, 테스트, 머지)의 자동화
- 주기적으로 머지된 코드 변경사항이 자동으로 빌드되어서 성공적으로 동작하는지 확인해야 함
- 새로 추가된 변경사항 뿐만 아니라 기존 시스템의 다른 버그를 처리하지는 않았는지 자동으로 테스트도 되어야 함
2.1 장점
이렇게 CI 원칙을 따랐을 떄, 장점은 다음과 같습니다.
- 주기적으로 머지하기 때문에, 머지 충돌을 피할 수 있어 개발 생산성 향상
- 머지되는 모든 코드들은 자동으로 빌드되고 테스트되기 때문에 코드 결함이나 문제점이 빠르게 발견될 수 있음
- 발생한 결함은 빠르게 수정이 가능
- 주기적으로 머지를 하기 위해서는 코드의 변경사항이 작기 때문에,
- 문제를 수정할 떄도 조금 더 고립된 작은 단위의 문제를 확인이 가능
- 위 장점들로 조금 더 나은 코드의 퀄리티를 가질 수 있음
3. CD
CD는 2가지 종류가 있습니다. 각각 서로 연관이 있고, 섞어서 사용하는 경우가 있기에 비슷하다고 보면 됩니다.
- Continuous Delivery, 지속적인 제공
- Continuous Deployment, 지속적인 배포

예를 들어, CI를 통해 주기적으로 머지된 코드의 변경사항들이 자동으로 빌드되고, 테스트되면,
배포하는 단계에서 배포(릴리즈)할 준비과정을 거치고, 준비된 릴리즈가 괜찮은지 정상적인지 직접 개발자나 검증팀이 검증한 다음에,
최종적으로 배포해도 되겠다고 판단하면, 수동적으로 배포하는 단계를 Continuous Delivery라고 합니다.

또는 릴리즈가 준비되자 마자 사용자에게 자동으로 배포할 수도 있습니다.
이렇게 배포를 자동화하는 단계를 Continuous Deployment라고 합니다.
Delivery와 차이는 최종 배포단계가 자동화되었는지 유무에 따라 구분할 수 있습니다.
이런 모든 과정을 어떻게 할 지는 회사마다, 팀마다 다릅니다. 회사마다 어느정도의 얼마만큼 자동화할지 달라지기 때문에, 모든 회사가 똑같은 CI/CD과정을 거치지 않습니다.
4. CI/CD 파이프라인 정리

- 개발자가 작은 단위로 기능을 나누어 주기적으로 main repository에 build하고 테스트
- 테스트 과정을 거쳐서 릴리즈 준비를 하고, 여기서 수동 또는 자동으로 최종 배포를 거칩니다.
5. CI/CD를 위한 툴
- Jenkins
- 가장 많이 사용되는 툴 중 하나
- 지속적 통합과 지속적 배포를 지원
- 개발한 프로그램의 빌드, 테스트, 패키지화, 배포 단계를 모두 자동화해 개발 단계를 표준화
- 개발된 코드의 빠른 적용과 효과적인 관리를 통해 개발 생산성을 높이는데 초점
- Buildkite
- 가장 많이 사용되는 툴 중 하나
- Github Actions
- 요즘 많이 사용되는 툴
- GitLab CI/CD
- Bitbucket Pipelins
- circleci
- … 다양한 툴들이 존재