CI/CD - AWS Code Series

정연희·2024년 5월 6일
0

AWS

목록 보기
7/18

CI/CD는 현대 소프트웨어 개발에서 매우 중요한 개념으로, 소프트웨어의 품질과 제공 속도를 향상시키는 데 큰 영향을 미친다. 이번 글에서는 각각의 개념과 필요성에 대해 이야기하고자 한다.

CI/CD

CI (Continuous Integration, 지속적 통합)

개념

CI는 빌드/테스트 과정을 자동화함으로써 개발자들이 작성한 코드를 효율적으로 통합할 수 있도록 하는 프로세스이다. 개발자들은 대부분 협업할 때 공유 소스 리포지토리에 코드를 올리게 되는데, CI 시스템은 코드 변경이 발생할 때마다 자동으로 빌드를 수행하고 테스트를 실행하여 코드의 안정성을 확인한다. 이런 프로세스는 개발자가 리포지토리에 푸시할 때마다 작동되며, 변경된 코드가 기존 코드와 에러나 충돌이 일어나지 않는지를 알아서 빌드/테스트해주는 것이 CI라고 생각하면 된다.

필요한 이유

이전에는 팀의 개발자가 장기간 격리된 상태로 작업하고, 작업이 완료된 후에야 변경 사항을 마스터 브랜치에 병합하는 경우가 많았다. 그러나 이렇게 하면 병합 코드가 어렵고 시간 소모적일 뿐만 아니라 버그가 축적될 확률이 높다. 결과적으로 고객에게 업데이트를 신속하게 제공하기 어려워진다.

장점

  • 버그를 신속하게 찾아 해결할 수 있음
    • 테스트를 좀 더 빈번하게 수행함으로써, 팀에서는 이후에 더 큰 문제로 발전하기 전에 버그를 조기에 발견하고 해결할 수 있다
  • 소프트웨어 품질 개선
    • CI는 자동화된 테스트와 코드 분석을 개발 프로세스에 통합하여 개발 팀 전체에서 일관된 코드 품질 기준을 유지할 수 있습니다. 이는 더 깔끔하고 유지보수하기 쉬운 코드베이스로 이어진다
  • 개발자 생산성 향상
    • 지속적 통합을 사용하면 개발자가 수동 작업에 대한 부담을 덜고 고객에게 제공되는 오류 및 버그 수를 줄이는 데 도움이 되는 기능을 활용함으로써 팀의 생산성을 높일 수 있다
  • 업데이트를 더 빠르게 제공
    • 지속적 통합을 사용하면 팀이 좀 더 빠르고 좀 더 빈번하게 고객에게 업데이트를 제공할 수 있다

작동방식

  1. 코드 커밋:
    • 개발자는 코드 변경 사항을 로컬 개발 환경에서 완료한 후, 버전 관리 시스템(Git 등)을 통해 공유된 리포지토리에 변경 사항을 커밋한다.
  2. 자동 빌드:
    • CI 시스템은 리포지토리에 새로운 커밋이 발생하면 자동으로 빌드 프로세스를 시작한다
    • 이 프로세스는 소스 코드를 컴파일하고 필요한 의존성을 다운로드하여 실행 가능한 소프트웨어 패키지를 생성한다
  3. 자동 테스트:
    • 빌드 프로세스가 완료되면 CI 시스템은 자동화된 테스트 스위트를 실행한다
    • 이 테스트는 유닛 테스트, 통합 테스트, 사용자 인터페이스 테스트 등 다양한 유형의 테스트를 포함할 수 있다
  4. 결과 피드백 및 통합 오류 해결:
    • 테스트가 완료되면 CI 시스템은 결과를 분석하여 테스트 통과 여부와 잠재적인 문제를 개발자에게 피드백한다
    • 테스트 중에 오류가 발생하면 CI 시스템은 이를 개발자에게 보고하고, 문제를 신속하게 해결할 수 있도록 도와준다
    • 이를 통해 개발자는 빠르게 코드 변경 사항의 품질을 확인할 수 있다

CD (Continuous Delivery & Continuous Deployment - 지속적 전달)

개념

CD는 소프트웨어를 지속적으로 고객에게 전달하거나 배포하는 프로세스를 의미한다.

  • Continuous Delivery 지속적 전달

    • CI에서 빌드와 단위 및 통합 테스트를 자동화한 다음 검증된 코드를 리포지토리 (ex: GitHub, 컨테이너 레지스트리)로 릴리스하는 것을 자동화 (실제 프로덕션 환경에 배포하기전까지)
    • 최종 배포는 수동으로 실행
  • Continuous Deployment 지속적 개발

    • 모든 과정을 자동화하며,테스트가 통과되면 코드 변경사항이 자동으로 프로덕션 환경에 배포하여 고객이 사용할 수 있도록 하는 것
    • 성숙한 CI/CD 파이프라인의 최종 단계로 많은 선행 투자가 필요

둘의 차이점은 자동화 정도이다. 두 가지 모두 파이프라인의 추가 단계를 자동화하는 것이지만 지속적 전달은 최종 배포가 수동, 지속적 개발은 명시적 승인 없이 자동으로 프로덕션이 일어난다. 지속적 제공과 지속적 배포 중 어느 것을 선택할지는 개발 팀과 운영 팀의 위험 허용 범위와 구체적인 요구 사항에 따라 달라진다!

목표

코드 변경사항을 신속하게, 안정적으로, 그리고 지속적으로 고객에게 전달

장점

개발팀과 비즈니스팀(영업, cs팀 등) 간의 커뮤니케이션 부족 문제를 해결하며, 배포에 이르기까지의 노력을 최소한으로 단축시킨다.

  • 소프트웨어 릴리스 프로세스 자동화
    • 지속적 전달을 사용하면 팀에서 프로덕션에 릴리스하기 위한 코드 변경을 자동으로 빌드, 테스트 및 준비하여, 좀 더 빠르고 효율적으로 소프트웨어를 전달할 수 있다
  • 개발자 생산성 향상
    • 이러한 방식은 개발자가 수동 작업에 대한 부담을 덜고 고객에게 배포되는 오류 및 버그 수를 줄이는 데 도움이 되는 기능을 활용함으로써 팀의 생산성을 높일 수 있다
  • 버그를 더 빠르게 발견 및 해결
    • 좀 더 자주 포괄적으로 테스트를 수행함으로써 더 큰 문제로 발전하기 전에 버그를 발견하고 해결할 수 있다
    • 지속적 개발의 경우 전체 프로세스가 자동화되어 있으므로, 다른 유형의 테스트를 손쉽게 추가하여 수행할 수 있다
  • 업데이트를 더 빠르게 제공
    • 지속적 전달을 사용하면 팀이 좀 더 빠르고 좀 더 빈번하게 고객에게 업데이트를 제공할 수 있다
    • 지속적 전달이 적절하게 구현되면, 언제나 즉시 배포할 수 있고 표준화된 테스트 프로세스를 통과한 빌드 아티팩트를 보유하게 된다

CI/CD 적용 Before & After

적용 전 코드 통합 과정

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

!! 코드의 양이 많다면 에러 추적이 안되므로 어마어마한 양의 디버깅 과정을 마주하게 될 수도 있다. !!

적용 후 코드 통합 과정

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

CI/CD 종류


AWS Code Series

AWS Code 시리즈는 Amazon Web Services (AWS)에서 제공하는 다양한 개발자 도구와 서비스를 포함하는 시르지이다. 이 시리즈는 소프트웨어 개발 및 배포 프로세스를 간소화하는 CI/CD를 지원합니다. 몇 가지 중요한 AWS Code 서비스는 다음과 같습니다:

AWS CodeCommit

Git 기반의 레포지토리를 클라우드 기반으로 제공하는 서비스 - 애플리케이션을 개발하면서 관리할 소스코드를 안전하게 저장하고, 제어할 수 있는 기능을 제공 - AWS의 보안 기능을 사용하여 코드 및 자산을 보호

AWS CodeBuild

CI 도구로, 애플리케이션 개발에 필요한 소스코드를 컴파일 하고 테스트 후 배포 전 까지의 단계를 제공하는 완전관리형 서비스

  • 서버 또는 빌드 인프라 관리 없이 코드 빌드 및 테스트를 수행
  • 컨테이너 기반 빌드를 지원하므로 사용자 정의 빌드 환경을 생성 가능

AWS CodeDeploy

CD 도구로, AWS EC2, AWS ECS 등 컴퓨팅 시스템에 대한 애플리케이션 배포를 자동화 하여 제공하는 완전 관리형 서비스

  • 지속적인 배포를 지원하는 대표적인 CD 도구
  • 다양한 배포 전략을 지원하며, 훅을 사용해 배포 라이프사이클 중에 사용자 정의 스크립트나 작업을 실행

AWS CodePipeline

CI/CD 파이프라인을 자동화하는 완전관리형 서비스

  • 여러 AWS 도구와 통합되어 워크플로를 자동화가능
  • CodePipeline은 코드 변경을 감지하고 이를 빌드,테스트,배포하는 전체 프로세스를 자동화

0개의 댓글