What is CI/CD?
- 소프트웨어 개발에서 사용되는 지속적인 통합(Continuous Integration)과 지속적인 배포(Continuous Deployment 또는 Continuous Delivery)를 의미하며, 소프트웨어 개발 프로세스를 자동화하고 개선하여 제품을 향상시키고, 배포 프로세스를 더 빠르고 효율적으로 만들기 위해 사용됨
CI(지속적인 통합)
- 개발자들이 코드 변경사항을 주기적으로 메인 브랜치에 통합하는 것을 말함. 이 과정에서 자동화된 빌드와 테스트가 실행되어, 새로운 코드 변경사항이 기존 코드와 잘 통합되는지, 그리고 문제를 일으키지는 않는지를 검증함. 목적은 개발 초기 단계에서 문제를 발견하고 해결하여 큰 규모의 문제로 발전하는 것을 방지하는 것
CD(지속적인 배포 또는 지속적인 딜리버리)
- Continuous Deployment : 지속적인 배포는 모든 코드 변경사항이 테스트를 거쳐 자동으로 프로덕션 환경에 배포되는 것을 말함. 이것은 자동화된 프로세스로, 수동 개입 없이도 신뢰성 있는 소프트웨어 업데이트가 가능하게 함
- Continuous Delivery : 지속적인 딜리버리는 코드 변경사항을 프로덕션에 배포할 준비를 끝마치는 것을 말함. 이것은 배포 프로세스를 자동화하지만, 실제 배포는 결정된 시점에 수동으로 진행될 수 있음
- CI/CD 파이프라인을 구축하는 것은 복잡한 소프트웨어 프로젝트의 효율성을 높이고, 버그를 신속하게 해결하며, 고객에게 더 빠르게 가치를 전달할 수 있도록 도와줌
파이프라인
- 코드 구축부터 시작해서 배포까지의 일련의 과정들을 CI/CD 파이프라인이라고 함
빌드(Build)
- 소스 코드가 실행 가능한 소프트웨어로 변환됨
👉🏻 소스 코드 컴파일, 라이브러리 연결, 애플리케이션 패키징 등을 포함한 일련의 과정
- 빌드 프로세스는 자동화되어 있어야하며, 모든 코드 변경 시마다 또는 정해진 주기에 따라 실행됨
- 빌드 자동화는 개발자가 코드를 커밋하면 자동으로 시작되며, 빌드 서버 또는 CI 서비스에서 관리됨
- 성공적으로 빌드가 완료되면, 이후 단계인 테스트를 위해 바이너리(실행 파일), 패키지, 라이브러리 등이 생성됨
👉🏻 webpack
테스트(Test)
- 코드가 올바르게 작동하는지 확인하기 위해 다양한 유형의 자동 테스트가 수행됨, 이는 단위 테스트(Unit Tests), 통합 테스트(Integration Tests), 기능 테스트(Functional Tests), UI 테스트 등을 포함할 수 있음
- 자동화된 테스트는 코드가 예상대로 작동하는지 확인하고, 버그, 오류 또는 예상치 못한 동작을 조기에 발견하는 데 중요함
- 테스트는 일반적으로 빌드 프로세스와 연동되어 빌드가 성공적으로 완료된 후 자동으로 실행됨
- 테스트 결과는 개발자에게 피드백을 제공하며, 실패한 테스트가 있는 경우 문제를 해결할 때까지 다음 단계로 진행되지 않음
👉🏻 mocha 프레임워크
머지(Merge)
- 빌드와 테스트 단계를 성공적으로 통과한 코드는 공유 저장소의 메인 브랜치로 병합됨. 이 과정에서 코드의 충돌이나 호환성 문제를 확인하고 해결함
- 머지는 코드 리뷰와 승인 과정을 거친 후에 수행될 수 있음. 이는 코드의 품질을 유지하고 팀 내의 기술적 통찰을 공유하는 데 중요함
- 모든 개발자는 머지된 최신 코드를 기반으로 작업을 계속하며, 이는 코드의 일관성과 충돌 최소화에 기여함
배포
- 사용자를 위한 서비스를 배포할 수 있다고 생각할 수 있지만 그 뿐만 아니라 내부적으로 QA엔지니어나 관리자 페이지를 위한 배포, 데이터웨어하우스로부터 데이터를 가공해서 백엔드 개발자를 위한 배포 등을 포함
툴