CI/CD

Yonghyun·2024년 3월 17일
0

2024

목록 보기
1/3
post-thumbnail

CI

CI는 간단히 요약하자면 빌드/테스트 자동화 과정 CI는 개발자를 위한 자동화 프로세스인 지속적인 통합(Continuous Integration)을 의미한다. CI를 성공적으로 구현할 경우 애플리케이션에 대한 새로운 코드 변경 사항이 정기적으로 빌드 및 테스트되어 공유 리포지토리에 통합되므로 여러 명의 개발자가 동시에 애플리케이션 개발과 관련된 코드 작업을 할 경우 서로 충돌할 수 있는 문제를 해결할 수 있다.

  • CI 단계에서 빌드와 테스트를 자동으로 진행해주면 아래와 같은 장점이 있다.
    • 여러 개발자가 관련된 코드를 작업하여 발생하는 충돌 문제를 해결할 수 있다.
    • 커밋 할 때 마다 빌드와 자동 테스트가 이루어져 잘못된 merge를 예방할 수 있다.
    • 코드 검증에 들어가는 시간이 줄어들며, 개발 편의성이 좋아진다.

개발자가 직접 코드를 병합하고 빌드, 테스트를 검증하는 것은 시간이 많이 소요될 뿐만 아니라 귀찮고 그 양도 프로젝트의 크기가 커질수록 많아질 수밖에 없다.

이를 자동화하면 개발자가 빌드와 테스트를 직접 하지 않고도 수정한 코드를 브랜치에 병합하기만 하면 자동으로 빌드와 테스트를 검증할 수 있다.

CI의 간단한 순서

  • 개발자가 구현한 코드를 기존 코드와 병합한다.
  • 병합된 코드가 올바르게 동작하고 빌드되는지 검증한다.
  • 테스트 결과 문제가 있다면 수정하고 다시 1로 돌아간다. 문제가 없다면 배포를 진행한다.

CD

CD는 간단히 말하면 배포 자동화 과정이다. CD는 지속적인 서비스 제공(Continuous Delivery) 또는 지속적인 배포(Continuous Deployment)를 의미하며 이 두 용어는 상호 교환적으로 사용된다.

지속적 배포는 빌드, 테스트 및 배포 단계를 자동화하는 DevOps 방식을 논리적 극한까지 끌어 올립니다. 코드 변경이 파이프라인의 이전 단계를 모두 성공적으로 통과하면 수동 개입 없이 해당 변경 사항이 프로덕션에 자동으로 배포됩니다. 지속적 배포를 채택하면 품질 저하 없이 최대한 빨리 사용자에게 새로운 기능을 제공할 수 있습니다.

CD 단계에서

  • 지속적 제공 ( Continuous Delivery )
    • CI를 마치고 릴리즈가 가능한 상태라면 배포까지 자동으로 해주는 것
  • 지속적 배포 ( Continuous Deployment )
    • CI를 마치고 릴리즈가 가능한 상태라면 사람의 검증을 통해 수동으로 배포하는 것

CI/CD 종류

  • Jenkins
  • CircleCI
  • TravisCI
  • Github Actions
  • etc

CI/CD 적용 전과후 비교

CI/CD를 적용하기 전

  • 개발자들이 개발하여 코드를 수정
  • 각자의 feature 브랜치에 코드를 push
  • 각자의 코드를 git에 올리고 통합
  • 에러가 발생했지만 어느 부분에서 에러가 났는지 모르므로 다시 어느 부분에 에러가 있는지 디버깅하고 코드를 수정
  • 위의 과정을 반복
  • 많은 시간을 할애하여 에러가 해결되었으면 배포를 시작 하지만 배포과정 또한, 개발자가 직접 배포과정을 거치므로 많은 시간을 소요

CI/CD를 적용 후

  • 개발자들이 개발하여 feature브랜치에 코드를 push
  • git push를 통해 Trigger되어 CI서버에서 알아서 Build, Test, Lint를 실행하고 결과를 전송
  • 개발자들은 결과를 전송받고 에러가 난 부분이 있다면 에러부분을 수정하고 코드를 master 브랜치에 merge
  • master 브랜치에 코드를 merge하고 Build, Test가 정상적으로 수행이 되었다면 CI서버에서 알아서 Deploy 과정을 수행

Jenkins

장점: Jenkins는 오픈 소스이며, 확장성이 뛰어나고 커뮤니티의 지원이 풍부합니다. 다양한 플러그인과 통합 가능한 도구들이 있어 다양한 시스템과 플랫폼에서 사용할 수 있습니다.

단점: 설정과 관리가 복잡할 수 있으며, 초기 설정에 시간이 걸릴 수 있습니다.

GitLab CI/CD

장점: GitLab은 코드 저장소와 CI/CD 기능을 한 플랫폼에서 제공하여 통합이 용이합니다. 코드 관리와 CI/CD 파이프라인을 단일 도구로 통합할 수 있으며, 사용이 간편하고 배포 설정을 쉽게 구성할 수 있습니다.
단점: 비교적 적은 플러그인이 있으며, 확장성 측면에서 다른 도구들에 비해 제한적일 수 있습니다.

CircleCI

장점: CircleCI는 설정이 간단하며, 클라우드에서 호스팅되기 때문에 관리 부담이 적습니다. 빠른 빌드와 테스트 속도를 제공하며, 커뮤니티와의 통합이 잘 이루어져 있습니다.
단점: 무료 플랜이 제한적이며, 높은 트래픽이나 큰 규모의 프로젝트에는 추가 비용이 발생할 수 있습니다.

Travis CI

장점: Travis CI는 깃허브와 연동이 원활하며, 사용이 간편합니다. 무료 플랜으로 시작할 수 있고, 프로젝트 설정이 간단하고 직관적입니다.
단점: 깃허브와의 연동에 의존하기 때문에 다른 소스 코드 관리 플랫폼과는 호환성이 제한될 수 있습니다. 무료 플랜에서는 제한적인 기능만 제공될 수 있습니다.

깃헙 액션(GitHub Actions)

깃헙 액션(GitHub Actions)은 깃허브에서 제공하는 자체 CI/CD 도구입니다. 깃헙 액션은 코드 저장소와 직접 통합되어 사용자가 작성한 워크플로우 파일을 기반으로 자동화된 빌드, 테스트, 배포 등의 작업을 수행할 수 있습니다.


깃헙 액션(GitHub Actions) 장점:

깃헙 액션은 깃허브와의 강력한 통합을 제공합니다. 코드 저장소와 직접 연동되기 때문에 워크플로우를 쉽게 작성하고 관리할 수 있습니다.

설정이 간단하고 사용이 편리합니다. YAML 기반의 워크플로우 파일을 작성하여 필요한 작업을 정의할 수 있으며, 버전 관리도 손쉽게 할 수 있습니다.

다양한 이벤트와 트리거를 지원하여, 코드에 변경이 발생하거나 일정 시간마다 주기적으로 작업을 실행할 수 있습니다.

깃헙 액션 마켓플레이스에서 다른 사용자가 작성한 워크플로우 템플릿을 공유하고 활용할 수 있습니다.

깃헙 액션(GitHub Actions) 단점:

초보자에게는 초기 설정이 다소 복잡할 수 있습니다. 기본 개념과 YAML 문법을 이해해야 하며, 복잡한 워크플로우를 작성할 경우 학습 곡선이 존재할 수 있습니다.

실행 환경이 깃허브에서 호스팅되기 때문에, 프라이빗 환경에서 실행해야 하는 경우 추가적인 설정이 필요할 수 있습니다.

사용량에 따라 요금이 부과될 수 있습니다. 무료 플랜에서는 제한된 자원과 기능만을 제공하며, 대규모 프로젝트나 상업적 용도로 사용할 경우 요금을 지불해야 할 수 있습니다.

깃헙 액션은 깃허브와의 강력한 통합과 사용의 편의성을 제공하는 도구로, 특히 오픈 소스 프로젝트나 깃허브를 중심으로 개발하는 경우에는 매우 유용합니다. 하지만 프로젝트의 규모와 요구 사항에 따라 다른 CI/CD 도구들과 비교하여 선택하는 것이 좋습니다.

가장 훌륭한 선택은 사용자의 요구 사항과 프로젝트의 특성에 따라 다를 수 있습니다. 그러나 현재 시장에서 가장 널리 사용되고 커뮤니티의 지원이 많은 Jenkins와 GitLab CI/CD는 많은 사람들에게 추천되고 있습니다. Jenkins는 다양한 플러그인과 확장성을 제공하며, GitLab CI/CD는 코드 저장소와 통합된 단일 플랫폼으로 편의성을 제공합니다. 이러한 도구들은 대규모 프로젝트에서도 안정적으로 사용되고 있으며, 사용자 경험과 개발 팀의 선호도에 따라 선택할 수 있습니다.

profile
Life is all about timing.

0개의 댓글