메인 콘텐츠로 건너뛰기

CI/CD 파이프라인이란 무엇인가요?

기업들은 점점 더 경쟁이 치열해지는 애플리케이션 시장에서 소프트웨어 업데이트, 버그 수정, 새로운 기능 도입에 신속히 대응해야 하는 압박을 받고 있습니다. 소프트웨어와 운영 팀은 사용자 피드백을 반영하고 문제를 해결하며, 비즈니스 운영에 지장을 주지 않으면서 업데이트를 배포하기 위해 긴밀히 협력해야 합니다. 특히 순차적 워터폴 모델에 기반한 기존 소프트웨어 개발 주기는 현대 소프트웨어 배포 속도를 따라가기 어렵습니다. 개발 주기가 점점 짧아짐에 따라, 개발 팀은 정확하고 높은 품질의 안전한 코드를 보다 효율적으로 만들기 위해 지속적 통합과 지속적 전달 방식을 도입하고 있습니다.

CI/CD는 지속적 통합과 지속적 전달을 의미합니다. 경우에 따라 지속적 전달은 지속적 배포를 의미하기도 합니다.

  • 지속적 통합은 여러 개발자가 동시에 코드를 작업하고 병합하더라도 코드 안정성을 유지할 수 있도록 합니다.
  • 지속적 전달은 소프트웨어를 테스트하고 검증하며, 사람이 승인하면 배포할 준비를 자동으로 진행하는 워크플로입니다.
  • 지속적 배포는 지속적 전달과 유사하지만, 승인이 미리 설정된 규칙에 따라 자동으로 이루어진다는 점이 다릅니다.

CI/CD는 이전에 수동으로 수행되던 모든 프로세스를 자동화하는 파이프라인으로 구현될 수 있습니다. CI/CD 파이프라인이 어떻게 작동하는지 더 잘 이해하려면 아래 도표를 참고하십시오.

CI/CD 파이프라인의 각 단계는 소프트웨어 개발 과정 내 특정 활동으로 구성됩니다. 각 단계에는 소프트웨어 빌드가 진행되기 전에 코드의 품질, 취약점, 기타 기술적 문제를 검증하는 자동화된 테스트가 포함됩니다. 이를 통해 개발 팀은 코드 문제를 조기에 발견하고 수정할 수 있으며, 이는 기업의 시간, 자원, 비용을 크게 절약할 수 있습니다.

CI/CD 파이프라인 설정은 겉보기에는 간단해 보입니다. 그러나 기업은 CI/CD 워크플로를 구현할 때, 특히 온프레미스 환경에서는 종종 어려움에 직면합니다. 예를 들어, 더 많은 애플리케이션, 도구, 팀원을 관리해야 할 때 인프라 병목 현상이 발생할 수 있습니다. 이 문제가 해결되지 않으면 개발자는 코드 자체 작업보다는 파이프라인 문제를 해결하는 데 더 많은 시간을 소비하게 됩니다.

CI/CD 워크플로를 AWS 클라우드로 전환하면 팀이 현대 소프트웨어 개발 작업을 확장하고, 변경 사항을 보다 효과적으로 소통하며, 자원을 보다 효율적으로 관리할 수 있습니다. 예를 들어, Duolingo는 CI/CD 파이프라인을 AWS EC2 Mac으로 이전하고 고급 자동 확장 전략을 구현했습니다. 그 결과, 빌드 시간이 50분에서 단 16분으로 단축되었습니다.

CI/CD 파이프라인을 어떻게 구축할 수 있나요?

AWS는 관리형 및 자동화 서비스를 통해 CI/CD 구현을 보다 손쉽고 자동화되며 안전하게 만듭니다. 개발 도구, 서버, 리소스를 수동으로 프로비저닝하는 대신, 팀은 사용자 요청 대응이나 소프트웨어 출시 전략 수립과 같은 부가가치 높은 활동에 집중할 수 있습니다.

먼저, AWS CloudFormation을 사용하면 DevOps 팀이 CI/CD 파이프라인을 구성하기 위해 필요한 클라우드 리소스를 자동으로 배포할 수 있습니다. 템플릿에 필요한 리소스를 직접 기술하거나, 사전 제작된 템플릿을 사용할 수 있습니다. CloudFormation은 CI/CD 기반 환경을 구성하는 리소스를 프로비저닝합니다. 그런 다음, AWS 클라우드에서 CI/CD 파이프라인 단계를 다음과 같이 구현할 수 있습니다.

소스

소스 단계는 개발자가 수행하는 버전 변경 사항을 추적합니다. 개발자는 중앙 공유 리포지토리에서 원본 코드의 버전을 로컬 컴퓨터로 복사합니다. 그런 다음, 코드를 수정하고 컴파일 및 테스트한 후, 수정된 코드를 리포지토리에 병합합니다.

다음은 팀에서 AWS 도구를 활용하여 코드를 변경하고 관리하는 방법입니다.

1단계 - IDE를 사용한 코드 작성

개발자는 인기 있는 프로그래밍 언어를 지원하는 클라우드 기반 통합 개발 환경(IDE)인 AWS Cloud9을 사용하여 새 코드를 작성하거나 기존 코드를 편집할 수 있습니다. Cloud9을 이용하면 인터넷에 액세스할 수 있는 환경에서 웹 브라우저를 통해 소스 코드를 작성, 실행, 디버깅할 수 있습니다. 또는 서드파티 IDE를 설치하고 소프트웨어 개발 키트(SDK)를 다운로드하여 Java, Python, JavaScript 등 다양한 언어로 코드를 작성할 수 있습니다. SDK를 사용하면 선호하는 코딩 환경에서 애플리케이션 프로그래밍 인터페이스(API)를 통해 AWS 리소스와 라이브러리에 접근할 수 있습니다.

2단계 - 코드를 중앙 리포지토리에 커밋

개발자는 GitHub와 같은 서드파티 도구를 활용하여 프라이빗 코드 리포지토리를 생성하고, 풀 리퀘스트를 관리하며, 변경 사항을 병합합니다. 리포지토리는 버전 관리 시스템 역할을 하여, 다른 개발자가 커밋한 변경 사항을 추적하고 필요 시 이전에 정상적으로 동작하던 소스 코드로 되돌릴 수 있습니다.

구축 및 테스트

빌드 단계에서는 중앙 리포지토리에 저장된 코드가 빌드 서버로 전송됩니다. 빌드 서버는 소스 코드와 종속성을 결합하여 아티팩트라고 불리는 소프트웨어 파일로 변환하며, 개발자는 이후 단계에서 이를 실행할 수 있습니다. 예를 들어 Java 프로그램을 빌드하는 경우, JAR 또는 WAR 파일을 생성하게 됩니다. 여기서부터 이 단계에서 단위 및 정적 코드 분석을 비롯한 몇 가지 예비 테스트를 수행할 수 있습니다.

  • 단위 테스트를 통해 개별 소프트웨어 기능이 올바른 결과를 생성하는지 확인할 수 있습니다. 
  • 정적 코드 분석은 소스 코드를 검사하여 버그, 보안 취약성 및 코딩 표준 준수를 식별합니다.

코드가 테스트에 실패하면 개발자는 코드를 이전 상태로 되돌리고 문제를 해결합니다.

일반적으로 소프트웨어 팀은 애플리케이션을 패키징하기 위해 자체 빌드 서버를 설정해야 합니다. 또한 테스트 스크립트를 수동으로 작성하고, 검증하고, 반복되는 반복을 통해 결과를 모니터링해야 합니다. 이제 AWS CodeBuild를 사용하여 CI/CD 빌드 워크플로를 가속화할 수 있습니다. 이를 통해 팀은 변경 시 빌드와 테스트 소프트웨어를 자동화할 수 있습니다. 지정된 리포지토리에서 소스 코드를 찾고 구성한 빌드 스크립트를 실행합니다.

AWS CodeBuild는 빌드 워크로드에 맞게 컴퓨팅 파워를 자동으로 조정합니다. 이렇게 하면 새 빌드를 시작하기 전에 이전 빌드가 완료될 때까지 기다릴 필요가 없습니다. 소프트웨어 팀은 코드 문제를 조기에 식별하고 복잡해지기 전에 해결할 수 있습니다.

예를 들어 Node.js 프로젝트를 구축하는 경우 Jasmine 또는 Jest 테스트 프레임워크를 AWS CodeBuild와 통합할 수 있습니다. 이러한 프레임워크를 사용하면 테스트 사례를 쉽게 작성하고, 예상 결과를 지정하고, 빌드 실행 중에 이를 검증할 수 있습니다. 

테스트 단계는 빌드 직후입니다. 응용 프로그램을 보다 엄격한 테스트에 적용하도록 설계되어 소프트웨어 팀이 코드 품질, 성능, 보안 및 기타 주요 측면을 개선할 수 있습니다. CI/CD 파이프라인을 사용하면 테스트가 자동화되고 여러 영역으로 확장됩니다.

  • 통합 테스트를 통해 애플리케이션에서 사용하는 모든 서비스와 타사 구성 요소가 서로 올바르게 상호 작용하고 있는지 확인합니다.
  • 기능 테스트는 최종 사용자의 관점에서 애플리케이션을 종합적으로 평가합니다.
  • 보안 테스트는 응용 프로그램을 검사하여 가능한 보안 위험 및 취약점을 찾아냅니다.
  • 성능 테스트를 통해 갑작스러운 트래픽 폭증과 같은 극단적이거나 예상치 못한 상황이 발생한 경우에도 애플리케이션이 반응성과 기능을 유지할 수 있도록 합니다.

다시 말하지만, 응용 프로그램은 다음 단계로 이동하기 전에 지정된 모든 테스트를 통과해야 합니다.

스테이징

스테이징을 사용하면 최종 사용자에게 애플리케이션을 릴리스하기 전에 애플리케이션에 대한 최종 검사를 수행할 수 있습니다. 이 단계에서 소프트웨어 팀은 실제 구현을 모방한 환경에 애플리케이션을 배포합니다. 모의 데이터를 사용하고 최종 사용자 그룹을 등록하여 릴리스 전에 발견되지 않은 문제를 찾아내는 것을 목표로 애플리케이션을 테스트하는 경우가 많습니다.

예를 들어 응용 프로그램을 업데이트했는데 사용자 상호 작용에서 어떻게 작동하는지 확인하려는 경우가 이에 해당합니다. 스테이징 환경에 배포하면 비즈니스 운영을 중단하지 않고도 소프트웨어 성능을 평가할 수 있습니다. 소프트웨어 팀은 모든 테스트 조건을 충족한 후 최종 사용자가 액세스할 수 있도록 애플리케이션을 프로덕션 환경에 배포합니다.

환경 간 배포는 어려울 수 있습니다. 특히 팀이 수동으로 배포하는 경우 더욱 그렇습니다. AWS CodeDeploy는 애플리케이션 배포 작업을 간소화할 수 있습니다. 다양한 환경에 애플리케이션 배포를 자동화합니다. 배포 활동을 보고, 변경 사항을 추적하고, 필요한 경우 이전 버전으로 롤백할 수 있습니다. 또한 스테이징과 프로덕션 간의 격차를 해소합니다. 예를 들어 프로덕션 릴리스의 스테이징에 사용하는 정확한 배포 지침을 사용할 수 있습니다.

프로덕션

프로덕션은 실제 사용자가 애플리케이션에 액세스하는 라이브 환경입니다. 소프트웨어 팀은 변경 사항을 수정, 테스트 및 검증한 후 업데이트된 애플리케이션을 프로덕션 환경에 릴리스합니다. 이번 조치는 CI/CD 파이프라인의 종말을 의미하지만 애플리케이션이 성능, 보안 및 비즈니스 요구 사항을 충족하도록 하기 위한 노력은 계속됩니다. 따라서 프로덕션 환경에서 작동하는 애플리케이션을 지속적으로 모니터링해야 합니다.

Amazon CloudWatch는 개발 및 운영 팀이 AWS, 온 프레미스 또는 기타 클라우드 환경에 배포한 애플리케이션에 대한 가시성을 제공하는 서비스입니다. 운영 데이터를 자동으로 수집하고 시각화하므로 실제 상황에서 애플리케이션이 어떻게 작동하는지 더 잘 이해할 수 있습니다. 또한 팀의 즉각적인 주의가 필요한 이벤트에 대해 알림을 설정하고 알림을 받을 수 있습니다.  

CI/CD 파이프라인을 어떻게 자동화할 수 있나요?

서로 다른 제공업체의 CI/CD 도구를 통합하는 것은 특히 광범위한 수동 설정이 필요한 경우 어려울 수 있습니다. 그러나 AWS CodePipeline을 사용하면 유연성을 유지하면서 전체 코드 릴리스 프로세스를 자동화하고, 확장하며, 가속화할 수 있습니다.

AWS CodePipeline은 그래픽 사용자 인터페이스를 통해 CI/CD 워크플로를 모델링할 수 있도록 지원합니다. 또한 기존에 사용 중인 도구나 리소스와 쉽게 통합하거나, AWS 서비스를 파이프라인에 손쉽게 연결할 수 있습니다. 예를 들어, 빌드 서버로 Jenkins를 사용하려는 경우, 이를 AWS CodePipeline과 통합할 수 있습니다.

아래는 그 과정을 요약한 단계입니다.

  1. Jenkins와 Jenkins용 AWS CodePipeline 플러그인을 설치합니다.
  2. 그런 다음 Jenkins에 대해 AWS Identity and Access Management(IAM)를 사용하여 접근 권한을 설정합니다. 이렇게 하면 Jenkins가 권한이 부여된 자격 증명을 사용하여 AWS CodePipeline과 상호 작용할 수 있습니다.
  3. AWS CodePipeline 콘솔에 로그인하고 사용자 지정 파이프라인을 생성합니다.
  4. 파이프라인을 GitHub과 같은 공유 소스 코드 리포지토리에 연결합니다.
  5. 그런 다음, 빌드 단계를 추가하고 빌드 서버로 Jenkins를 선택합니다.
  6. 필요한 테스트 단계와 테스트 작업, 빌드 트리거를 포함한 모든 필수 테스트 단계를 추가합니다.
  7. 마지막으로 배포 단계를 AWS CodeDeploy 또는 다른 배포 서비스에 연결합니다. 

AWS는 CI/CD 파이프라인 요구 사항을 어떻게 지원할 수 있나요?

CI/CD 파이프라인은 기업이 소프트웨어 품질과 보안을 유지하면서 애플리케이션 업데이트를 보다 빠르게 생성, 테스트, 배포할 수 있도록 합니다. 소프트웨어 개발팀은 자동화된 CI/CD 도구를 활용하여 코드를 수정하고, 변경 사항을 병합하며, 테스트를 자동화하고, 배포 일정을 관리하는 등의 작업을 수행합니다. 하지만 일부 팀은 인프라, 자원, 프로세스의 한계로 인해 CI/CD 워크플로를 확장하는 데 어려움을 겪습니다.

AWS는 클라우드 기반 솔루션을 제공하여 CI/CD 파이프라인을 구축하고, 효율화하며, 확장할 수 있도록 지원합니다.

  • AWS 클라우드포메이션은 CI/CD 도구가 실행되는 리소스를 프로비저닝합니다.
  • AWS Cloud9을 사용하면 개발자가 브라우저에서 코드를 작성, 실행 및 디버그할 수 있습니다.
  • AWS CodeBuild를 사용하면 자체 빌드서버를 관리하지 않고도 애플리케이션을 컴파일, 테스트 및 패킹할 수 있습니다.
  • AWS CodeDeploy는 온 프레미스 및 AWS 인스턴스를 비롯한 모든 환경에서 배포를 자동화합니다.
  • AWS CodePipeline을 사용하면 소스에서 라이브 프로덕션 환경에 이르는 전체 CI/CD 워크플로를 모델링할 수 있습니다.
  • 운영 팀은 AWS CloudWatch를 사용하여 배포된 애플리케이션을 지속적으로 모니터링, 로깅 및 분석할 수 있습니다.

CI/CD 파이프라인을 설정하는 데 도움이 더 필요한 경우, Amazon Professional Services 서비스에 문의하십시오.