CI / CD
개발자가 애플리케이션을 개발하고나면 애플리케이션을 실제 서버로 배포해야 한다. 보통 배포를 할 때는 애플리케이션을 빌드하고, 작성한 테스트코드를 돌려서 테스트를 진행한 후 모든 테스트가 통과되면 빌드 결과물을 패키징한 후 실제 서버로 배포를 하게 된다.
Java 애플리케이션의 경우, 먼저 빌드를 해서 외부 의존성 라이브러리를 설치하고, 코드를 자바 클래스파일로 컴파일한다. 그리고 테스트 과정에는 애플리케이션 유닛 테스트를 마친 후 패키지 단계에서는 .jar 파일이나 .war 파일으로 패키징하거나 컨테이너로 배포하는 경우 컨테이너 이미지를 빌드한다. 그 다음 실제 서버로 배포를 하게 된다.
그런데 이러한 일련의 과정들을 새로운 기능을 추가할 때마다 해야하므로 애플리케이션 배포를 하는 것이 여간 번거로운 일이 아니다. 자바 애플리케이션 빌드하고 테스트코드를 실행하는 시간은 각각 몇 분이 걸리고 패키징 후 실제 서버로 배포하는 과정도 번거롭다. 애플리케이션을 배포해야 하는 서버가 많아질수록 더 번거롭다.
어차피 빌드, 테스트, 패키징은 빌드를 하기 위한 과정인데, 이러한 일련의 과정들을 자동으로 한방에 처리할 수 있으면 좋을 것이다. 이렇게 빌드부터 시작해서 배포까지의 과정을 자동으로 처리하는 것을 간단히 CI / CD 라고 한다.
CI (Continuous Integration)
CI는 지속적 통합으로, 코드를 Git과 같은 레포지토리로 관리한다면 코드의 변경사항이 발생했을 때 자동으로 빌드하고 테스트하여 테스트가 성공했을 때 공유 레포지토리에 통합되므로 다수의 개발자가 동시에 애플리케이션을 개발하는 경우 서로 충돌할 수 있는 문제를 해결할 수 있다.
CI에서는 빌드, 테스트 과정을 마친 후 정상적으로 통과되었을 경우에만 공유 레포지토리에 통합되기 때문에 기능이 의도된 대로 정상적으로 작동하는지 확인하는 테스트코드를 잘 작성해야 한다. 테스트 코드를 잘 작성한다면 공유 레포지토리에 통합되는 코드는 정상적인 코드로 간주할 수 있기 때문에 배포를 조금 더 안정적으로 할 수 있다.
테스트 뿐만이 아니라 CI 과정에서 코드 규칙을 검사하는 도구(SonarQube 등)를 사용하여 공유 레포지토리에 통합되기 전에 조직 내에서 약속한 코드 규칙이 잘 적용되었는지 확인할 수 있기 때문에 좋은 코드를 항상 유지할 수 있다.
CI를 통해 얻을 수 있는 것
- 코드를 자동으로 빌드하고 테스트할 수 있다.
- 검증된 코드를 통합하여 소프트웨어의 품질을 좋게 유지할 수 있다.
CD (Continuous Delivery / Deploy)
CD는 지속적 제공과 지속적 배포라는 의미를 같이 포함하고 있다.
Continuous Delivery 는 CI에서 통합된 레포지토리의 코드를 배포 가능한 상태로 만드는 것을 말한다. 여기서는 Java의 경우에는 .jar 파일이나 .war 파일을 만들거나, 다른 언어의 애플리케이션의 경우 실행 가능한 파일을 만드는 과정을 거친다. 만약 컨테이너로 배포한다고 하면 컨테이너 이미지를 빌드하고 레지스트리에 올리기도 한다.
Continuous Deploy 는 애플리케이션을 실제 서버로 배포하는 것을 말한다. 보통 애플리케이션을 배포해야 하는 서버가 여러 대 있기 때문에, 이 단계에서는 Rolling / Blue-green / Canary 배포 방식 등의 배포 전략을 구현한다.
CD를 통해 얻을 수 있는 것
- Delivery 단계에서는 실제 배포 가능한 상태에 버전을 명시하여 버전관리를 할 수 있다. 버전 관리를 하는 것은 롤백이 쉽다는 장점이 있다.
- Deploy 단계를 자동화 한다면 결국 항상 같은 버전의 애플리케이션을 배포하기 때문에 일관성을 유지할 수 있다.
CI / CD 파이프라인
CI / CD 파이프라인은 CI부터 CD까지의 일련의 과정을 파이프라인 형태로 한번에 자동화하는 것을 말한다. CI 단계에서 빌드와 테스트를 거친 후 검증된 코드를 공유 레포지토리에 올린 다음, 해당 코드를 통해 배포 가능한 상태로 만든 후 이를 통해 실제 서버까지 배포를 자동으로 한 번에 할 수 있다.
파이프라인을 통해 얻을 수 있는 것
- CI / CD 환경은 데브옵스 조직에서 구축해주기 때문에 개발자는 배포 방식보다 개발에 더욱 집중할 수 있다.
- 클릭 한번으로 빌드부터 배포까지 한 번에 진행할 수 있기 때문에 편하다.
CI / CD 도구
대표적인 CI / CD 도구는 오픈소스 중에서는 Jenkins가 있으며, Kubernetes 환경이라면 CD 툴로 ArgoCD를 많이 사용한다. 그 밖에 광고를 자주하는 Circle CI가 있고, Git을 자주 사용한다면 Github Action과 GitLab Runner를 사용하는 것도 가능하다.
'DevOps > CI.CD' 카테고리의 다른 글
Jenkins pipeline 소개 및 Java 애플리케이션 CI/CD pipeline 작성 (2) | 2024.02.04 |
---|---|
Jenkins 소개 및 Kubernetes에 설치 (0) | 2023.11.07 |
ArgoCD 아키텍처 이해하기 및 여러가지 옵션 (3) | 2023.10.14 |
ArgoCD를 사용하여 Helm chart 배포하기 (1) | 2023.10.13 |
ArgoCD 소개와 설치 (0) | 2023.09.03 |
댓글