IT 직무에 있어서 자주 듣는 개념들인데 이 부분을 확실하게 정리해보고자 합니다.
먼저 CI는 Continuous Intergration을 의미하며, 지속적인 통합입니다.
개발자를 위한 자동화 프로세스를 말하며 애플리케이션에 대한 새로운 코드 변경 사항들이 정기적으로 빌드 및 테스트 되어 공유 저장소에 통합되면서 여러 개발자가 애플리케이션 개발과 관련된 코드 작업을 할 경우 서로 충돌할 수 있는 문제를 해결할 수 있습니다.
CI가 나오기 전 까지는 개발을 끝마치면 배포를 해야지만 코드에 오류가 있는지, 올바르게 작동하는지를 검증할 수 있었습니다. 하지만 CI를 적용하게 되면 각자의 개발자가 자신의 기능을 구현하고 완성되면 Main 브랜치와 통합하고 빌드 및 정상적으로 동작하는지 테스트할 수 있습니다.
간단하게 다음과 같은 순서로 이해하시면 편합니다.
개발자가 구현한 코드를 기존 코드와 병합 -> 병합된 코드가 올바르게 작동하는지 빌드하고 검증 ->
테스트 후 문제가 있다면 수정하고 다시 처음으로 돌아간다. 문제가 없다면 배포를 진행한다.
다음은 CD입니다 Continuous Deployment, Continuouse Delievery를 의미하며, 지속적인 배포 및 제공입니다.
배포 자동화 과정으로 빌드, 테스트 및 배포 단계를 자동화하는 DevOps 방식을 극한까지 끌어 올립니다. 코드 변경이 배포 이전 단계를 모두 성공한다면 수동적인 개입 없이 변경사항들이 프로덕션에 자동으로 배포됩니다. 그럼으로 품질 저하 없이 최소한의 시간으로 사용자에게 새로운 기능을 제공할 수 있습니다.
지속적인 제공은 CI를 통해서 새로운 소스코드의 빌드와 테스트 병합까지 성공적으로 진행됐다면 최종적으로 빌드와 테스트를 거쳐 Github와 같은 저장소에 업로드하는 것을 의미합니다.
지속적인 배포는 성공적으로 병합된 내역을 저장소뿐만 아니라 사용자가 사용할 수 있는 배포환경까지 릴리즈 하는 것을 의미합니다.
CI / CD의 대표적인 툴로는 Jenkins, Circleci, Teamcity 등이 있는데 이들의 차이점은 추후에 다뤄보도록 하겠습니다.
'이론' 카테고리의 다른 글
Maven, Mvn 명령어 및 옵션 정리 (0) | 2022.05.13 |
---|---|
TCP와 UDP의 차이 (0) | 2022.04.08 |
Grafana란? (0) | 2022.03.15 |
Prometheus란? (0) | 2022.03.15 |
앤서블과 테라폼의 차이 (0) | 2022.03.14 |