메인 콘텐츠로 건너뛰기

CI/CD란 무엇인가요?

CI/CD는 IT 팀이 소프트웨어 변경 사항을 빈번하고 안정적으로 제공할 수 있도록 지원하는 소프트웨어 개발 프로세스입니다. 일반적으로 모든 소프트웨어 프로젝트에는 개발 전용 환경(드래프트 또는 개발자 전용 환경)에서 소프트웨어를 개선하고 유지 관리하는 개발자 팀이 존재합니다. 개발자들은 개발 환경에서 코드를 수정한 후, 최종 버전을 엔드유저가 업데이트에 접근할 수 있는 프로덕션 환경으로 이동시킵니다. 이 프로세스는 코드 작성 및 컴파일에서 시작하여, 테스트, 종속성 패키징, 버전 관리에 이르기까지 여러 단계를 포함합니다.

 CI/CD는 소프트웨어 변경 프로세스 전반에 자동화를 적용하여, 애플리케이션 업데이트가 최종 사용자에게 지속적으로 전달되도록 하는 것을 의미합니다. 이 프로세스는 소프트웨어 제공 워크플로를 간소화하여 복잡성을 감소시키고, 대규모 환경에서의 효율성을 향상시킵니다. 일부 팀은 하루에도 여러 차례 변경 사항을 배포하여, 사용자가 지속적으로 개선되는 애플리케이션을 경험할 수 있도록 합니다.

CI/CD를 사용하면 어떤 이점이 있나요?

CI/CD 구현은 조직에 다음과 같은 가치를 제공합니다.

기능 릴리스 가속화

지속적인 배포를 통해 팀은 소프트웨어 기능 릴리스를 구현하기 위한 노력을 가속화하여 경쟁 우위를 확보할 수 있습니다. 기존에는 소프트웨어 팀이 사일로에서 변경 작업을 하기 때문에 업데이트를 배포하는 데 몇 주 또는 몇 달이 걸렸습니다. 게다가 일부 변경 사항은 복잡하며 기존 개발 방식으로는 더 많은 시간이 필요합니다.

개발자는 CI/CD 워크플로를 통해 소프트웨어 수정 작업을 더 작고 관리하기 쉬운 부분으로 나누고 팀 전체에 배포할 수 있습니다. 또한 CI/CD를 사용하면 소프트웨어 개발이 더욱 투명해지고 추적 가능해지기 때문에 배포 마일스톤을 자신 있게 예측하고 약속할 수 있습니다. 가속화된 소프트웨어 개발 수명주기는 이제 업데이트에 더 빠르게 액세스할 수 있는 고객에게도 간접적으로 도움이 됩니다.

소프트웨어 품질 개선

소규모 업데이트를 더 자주 도입하면 잠재적인 소프트웨어 버그, 취약성 및 사내 테스트를 거치지 못하는 기타 문제의 위험을 줄일 수 있습니다. 개발자가 코드베이스를 변경하면 CI/CD 파이프라인이 소프트웨어 테스트를 자동화하여 개발자가 이상 징후를 즉시 식별하고 수정할 수 있도록 합니다. 모든 변경이 이루어진 후 소프트웨어 테스트를 수행하는 대신 개발자는 작성한 코드를 테스트하고 이동 중에도 문제를 해결할 수 있습니다.

이를 통해 기업은 소프트웨어 품질 향상에 전념하여 사용자 만족도를 높일 수 있습니다. 일부 문제가 테스트 단계를 거치지 않더라도 변경 사항을 이전에 작동하던 소프트웨어 버전으로 롤백할 수 있습니다. 이를 통해 개발자는 서비스 가용성을 중단하지 않고도 버그를 해결할 수 있는 충분한 시간을 확보할 수 있습니다. 

개발자 경험 강화

소프트웨어 개발자는 디버깅, 테스트 및 검증과 같은 반복적이거나 힘든 작업에 시간을 할애하는 경우가 많습니다. 이러한 작업에는 상당한 시간이 소요되어 가치가 높은 작업에 소요될 수 있습니다. 이러한 문제를 해결하지 않고 방치하면 개발자들은 스트레스를 겪을 수 있으며, 이로 인해 번아웃과 생산성 저하로 이어질 수 있습니다.

지속적 전달을 소프트웨어 개발 프로세스에 통합하면 팀의 워크로드가 줄어듭니다. 개발자는 CI/CD 도구를 사용하여 많은 시간이 소요되는 수동 작업을 자동화합니다. 더 중요한 것은 쉽게 예방할 수 있었던 소프트웨어 문제를 해결하는 데 드는 시간을 줄였다는 것입니다. 결과적으로 소프트웨어 개발 팀의 사기가 높아져 비즈니스 성과가 향상됩니다.

CI/CD는 어떻게 작동하나요?

CI/CD는 구축 및 배포 프로세스를 자동화하여 애플리케이션 개발 주기와 소프트웨어 업데이트를 가속화합니다. 투명하고 확장 가능한 최신 소프트웨어 개발 관행에서 더 빠른 피드백을 가능하게 하여 개발 팀과 운영 팀 간의 격차를 해소합니다. 아래에서는 CI/CD 파이프라인의 핵심 구성 요소를 공유합니다.

지속적 통합

지속적 통합은 개발자가 공유 코드 리포지토리의 변경 사항을 통합하는 방식을 자동화합니다. 저장소는 성공적인 빌드를 위한 소스 코드, 라이브러리, 테스트 스크립트 및 기타 리소스로 구성됩니다. 지속적 통합을 통해 개발자는 품질 저하 없이 코드를 더 자주 제공할 수 있습니다.

일반적으로 개발자는 빌드 서버에서 변경한 내용을 컴파일, 빌드 및 테스트하기 전에 합의된 시간까지 기다려야 했습니다. 이러한 지연으로 인해 시간이 지날수록 해결하기가 더 어려워지는 코드 충돌과 같은 중대한 문제가 발생할 수 있습니다.

코드 충돌은 한 개발자가 변경한 사항으로 인해 응용 프로그램의 다른 부분에 오류가 발생하는 경우를 말합니다. 여러 개발자가 코드를 공유 리포지토리와 병합하면 코드 충돌 위험이 커집니다. 지속적 통합을 통해 개발자는 다른 사람의 코드를 손상시키지 않고 동시에 작업할 수 있으므로 코드 릴리스가 더 빨라집니다.

지속적 전달

지속적 전달은 지속적 통합 단계에서 검증된 코드를 프로덕션 배포에 사용할 준비가 되도록 합니다. CI 단계에서 변경 사항을 병합한 후 코드는 지속적 전달 단계에서 추가 자동 테스트를 거칩니다.

여기서 개발 팀은 단위, 통합, 회귀, API 안정성 테스트를 비롯한 여러 테스트를 자동화합니다. 이러한 테스트를 통해 개발자는 문제를 조기에 식별하고 문제가 있는 코드를 재작업할 수 있습니다. 검증이 완료되면 개발자는 서버리스 리소스, 클라우드 서버 및 애플리케이션 실행에 필요한 기타 리소스와 같은 인프라를 자동으로 프로비저닝합니다. 그러면 운영 팀이 프로덕션 환경에 애플리케이션을 수동으로 배포할 수 있습니다.

지속적 배포

지속적 배포는 배포 단계에서 사람의 수동 개입을 제거하여 코드 자동화를 더욱 발전시킵니다. 지속적 배포와 마찬가지로 지속적 배포는 자동화된 테스트 도구를 사용하여 고품질 소프트웨어를 생성합니다. 그러나 운영 팀의 승인을 기다리는 대신 DevOps 팀은 애플리케이션 승인 기준을 설정할 수 있습니다. 애플리케이션 승인은 검증이 완료되면 최종 사용자에게 배포됩니다. 

모범 사례는 무엇인가요?

다음은 효율성, 비용 절감 및 적시 소프트웨어 제공을 위해 CI/CD 워크플로를 최적화하는 방법입니다.

단일 리포지토리 유지

단일 공유 리포지토리로 시작하세요. 그런 다음 각 개발자의 브랜치 또는 중앙 리포지토리 사본을 생성합니다.  혼동과 의사소통 오류를 방지하기 위해 더 많은 하위 브랜치나 추가 로컬 사본을 만들지 마십시오. 모든 개발자는 자신의 브랜치에서 변경 사항을 만들고 테스트한 다음 중앙 리포지토리에 병합합니다.

레프트 시프트 애플리케이션 테스트

테스트를 왼쪽으로 이동하여 지속적 테스트를 코드 통합 워크플로의 일부로 만드세요. 예를 들어 개발자는 코드 편집 후 즉시 코드 품질 검사, 정적 코드 분석 및 기타 테스트를 자동화합니다. 소프트웨어 릴리스 프로세스를 가속화하려면 테스트 스크립트를 사용하는 것이 좋습니다. 테스트 스크립트는 소프트웨어 테스트를 실행할 때 자동화된 CI/CD 도구를 안내합니다. 사전 빌드 테스트에 실패한 코드는 개발자가 수정할 때까지 파이프라인의 후속 프로세스를 중단합니다.

작은 변화 만들기

개발자가 코드 충돌과 같은 문제를 해결하는 데 더 많은 시간이 필요할 수 있으므로 업데이트를 크게 변경하지 마십시오. 대신 조금씩 점진적으로 변경하여 문제를 해결하고 고객에게 신속하게 릴리스를 푸시하십시오. 또한 사용자 환경에 큰 영향을 주지 않으면서 작은 변경 사항을 롤백할 수 있습니다.

투명성 우선 순위 지정

모든 개발자에게 공유 소스 코드 리포지토리에 대한 액세스 권한을 제공하고 팀에서 변경한 내용을 추적할 수 있습니다. 버전 관리 시스템을 사용하면 특정 코드 변경, 변경 날짜, 담당 개발자를 식별할 수 있습니다. 또한 개발자 간의 피드백과 커뮤니케이션을 촉진하여 업데이트 작업 시 모든 사람이 동일한 이해를 바탕으로 작업할 수 있도록 합니다.

프로덕션 환경과 유사한 환경에서 테스트하세요.

프로덕션 환경에서 코드를 테스트하는 것은 비즈니스 운영을 방해할 위험이 있으므로 가능하지 않습니다. 하지만 개발자는 실제 조건을 모방한 테스트 환경을 만들 수 있습니다. 통제되었지만 현실적인 조건에서 애플리케이션을 테스트하면 초기 단계 테스트를 거치지 않는 코드 문제를 찾아내고 배포 위험을 줄일 수 있습니다. 

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

AWS CodeBuild는 소스 코드를 컴파일하고 테스트를 실행한 다음 바로 배포 가능한 패키지를 생성하는 완전관리형의 지속적 통합 서비스입니다. 빌드 서버를 프로비저닝, 관리 및 확장할 필요가 없습니다.

AWS CodePipeline은 소프트웨어 구축, 테스트, 배포를 자동화하는 데 도움이 되는 확장 가능한 엔드 투 엔드 CI/CD 솔루션입니다. 전체 릴리스 프로세스를 모델링하고 시각화할 수 있으며, 코드 변경이 발생할 때마다 AWS CodePipeline이 정의된 워크플로에 따라 애플리케이션을 빌드, 테스트, 배포하도록 할 수 있습니다. 파트너 도구와 사용자 지정 도구를 릴리스 프로세스의 어느 단계에나 통합할 수 있습니다.

Amazon CodeCatalyst는 작업 계획, 코드 협업, CI/CD 도구를 활용한 애플리케이션 빌드, 테스트, 배포를 한 곳에서 제공하는 통합 DevOps 서비스입니다. 다음을 수행할 수 있습니다.

  • 기존 언어나 도구 기반의 프로젝트 블루프린트를 활용하여 새 프로젝트를 생성하면, 샘플 코드, 빌드 스크립트, 배포 작업, 가상 서버, 서버리스 리소스 등 준비된 소스 리포지토리를 바로 활용할 수 있습니다.
  • 소프트웨어 개발을 위한 AI 에이전트인 Amazon Q Developer를 사용하면, 단 몇 번의 클릭과 자연어 입력만으로 이슈 속 아이디어를 완전히 테스트되고 병합 준비가 된 애플리케이션 코드로 전환할 수 있습니다.
  • AWS 계정을 Amazon CodeCatalyst 공간에 연결하여 프로젝트와 AWS 리소스를 통합할 수 있습니다.

애플리케이션 수명 주기의 모든 단계와 요소를 하나의 도구에서 관리할 수 있기 때문에, 소프트웨어를 빠르고 자신 있게 제공할 수 있습니다.

지금 바로 무료 계정을 만들어 AWS에서 CI/CD를 시작해 보세요.