CI/CD란 무엇입니까? 지속적인 통합 및 지속적인 전달

⚡ 스마트 요약

지속적 통합(Continuous Integration)은 팀 구성원이 최소한 매일 자신의 작업을 공유 저장소에 병합하고, 모든 커밋이 자동화된 빌드 및 테스트를 트리거하여 통합 오류를 조기에 발견하는 소프트웨어 개발 방식입니다.

  • 🔄 정의: 개발자들은 매일 코드를 통합하고, 각 커밋은 자동 빌드를 통해 검증됩니다.
  • 🚚 CI와 CD: CI는 모든 변경 사항을 테스트하고, 지속적 배포는 소프트웨어를 언제든지 릴리스할 수 있도록 유지합니다.
  • 🧪 관로: 커밋은 빌드, 테스트 및 배포 단계를 하나의 연속적인 흐름으로 실행합니다.
  • 🧰 도구 : Jenkins, Bamboo예산 및 TeamCity 빌드 및 테스트를 자동화합니다.
  • 📉 이점 : 초기에 빈번하게 테스트하면 버그가 줄어들고 더 빠르고 안전한 릴리스가 가능해집니다.
  • 🤖 AI 지원: AI 도구는 불안정한 테스트를 감지하고 빌드 실패를 자동으로 분류합니다.

CI/CD란 무엇인가요?

CI(지속적 통합)란 무엇입니까?

지속적인 통합 통합(Integration)은 팀 구성원들이 하루에 최소 한 번 이상 자신의 작업을 통합하는 소프트웨어 개발 방법입니다. 모든 통합 작업은 오류를 감지하는 자동 빌드 프로세스를 통해 검증됩니다. 이 개념은 프로젝트 막바지에 통합 작업을 미루는 경우 발생하는 "통합 지옥"을 방지하기 위해 20여 년 전에 도입되었습니다.

코드 커밋 후에는 소프트웨어가 즉시 빌드되고 테스트됩니다. 개발자가 많은 대규모 프로젝트에서는 하루에도 여러 번 커밋이 발생합니다. 커밋이 발생할 때마다 코드가 빌드되고 테스트되며, 테스트가 통과되면 배포를 위한 빌드 상태를 확인하고, 배포가 성공하면 프로덕션 환경에 코드가 배포됩니다. 이러한 커밋, 빌드, 테스트, 배포 주기는 끊임없이 이어지기 때문에 '지속적인 배포(Committed Deployment)'라는 이름이 붙었습니다.

CD(지속적 전달)란 무엇입니까?

연속 배달 이는 팀이 짧은 개발 주기로 소프트웨어를 개발하고 언제든지 안정적으로 출시할 수 있도록 보장하는 소프트웨어 엔지니어링 방법론입니다. 목표는 빠른 속도와 빈번한 빈도로 소프트웨어를 구축, 테스트 및 출시하여 잦은 프로덕션 업데이트를 통해 변경 사항을 제공하는 데 드는 비용, 시간 및 위험을 줄이는 것입니다.

CI와 CD의 차이점

지속적인 통합 테스트는 코드베이스의 모든 변경 사항을 자동으로 테스트하는 접근 방식인 반면, 지속적 배포는 새로운 기능, 구성 및 버그 수정과 같은 변경 사항을 안전하고 신속하게 프로덕션 환경에 배포하는 접근 방식입니다.

CI를 사용하지 않은 개발 vs. CI를 사용한 개발

CI 없이 개발 CI를 활용한 개발
버그가 많아요 버그 감소
드문 커밋 정기적인 커밋
드물고 느린 릴리스 정규 작업 릴리스
어려운 통합 쉽고 효과적인 통합
테스트가 늦게 이루어짐 테스트는 조기에 자주 실시됩니다.
문제를 해결하기가 더 어렵습니다. 문제점을 더 빨리 발견하고 해결할 수 있습니다.
프로젝트 가시성이 좋지 않음 더 나은 프로젝트 가시성

컴파일과 지속적 통합의 차이점

컴파일은 단순히 코드를 기계어로 변환하는 작업인 반면, CI는 그보다 더 광범위한 여러 활동을 수행합니다.

  • 데이터베이스 통합: 데이터베이스와 코드를 동기화 상태로 유지하고 데이터베이스 및 테스트 데이터 생성을 자동화합니다.
  • Code 검사: 건전한 코드베이스를 보장하고, 문제를 조기에 발견하며, 모범 사례를 적용합니다.
  • 자동 배포: 언제든지 제품을 출시할 수 있으며, 지속적으로 데모 가능한 상태를 유지할 수 있습니다.
  • 문서 생성: 문서를 최신 상태로 유지하고 빌드 보고서 및 지표를 생성합니다.
  • 편집: 고급 코드를 기계어로 변환하고 모든 대상 플랫폼에서 컴파일되도록 보장합니다.

이상적으로는 빌드가 IDE에 의존하지 않고 명령줄에서 실행되고, 전용 CI 서버에서 지속적으로 실행되며(cron 작업이 아님), 모든 커밋 시마다 트리거되어 개발자의 추가 작업 없이 즉각적인 피드백을 제공해야 합니다.

지속적 개선(CI) 프로세스를 수행하려면 무엇이 필요합니까?

  • 버전 관리 시스템(VCS): 프로젝트에 대한 변경 사항을 중앙 집중화하고 보존하는 신뢰할 수 있는 방법입니다.
  • 가상 기기: 여분의 서버 또는 최소한 하나 가상 머신 귀하의 시스템을 구축합니다.
  • 호스팅형 CI 도구 솔루션: 서버 관리를 피하기 위해 호스팅 솔루션은 전체 프로세스를 유지 관리하고 더 쉬운 확장성을 제공합니다.
  • 도구 : 자체 호스팅 방식을 선택하는 경우, CI 도구를 설치하십시오. Jenkins, TeamCity, Bamboo또는 GitLab.

지속적 통합은 어떻게 작동하나요?

오래된 사례로 노키아가 한때 '야간 빌드'라는 절차를 사용했던 것을 들 수 있습니다. 여러 개발자가 하루 동안 여러 번 코드를 커밋하면 매일 밤 소프트웨어가 빌드되었습니다. 하루에 한 번만 빌드가 이루어졌기 때문에 대규모 코드베이스에서 오류를 찾아내고 수정하는 것이 매우 어려웠습니다.

Later 팀은 지속적 통합(Continuous Integration)을 도입했습니다. 개발자가 코드를 커밋하는 즉시 소프트웨어를 빌드하고 테스트했기 때문에 오류가 발생하면 즉시 감지되어 담당 개발자가 신속하게 수정할 수 있었습니다.

CI의 특징

  • 단일 소스 저장소를 유지할 수 있도록 해줍니다.
  • 실제 운영 환경과 유사한 복제본을 테스트할 수 있도록 해줍니다.
  • 최신 빌드를 항상 사용할 수 있도록 제공합니다.
  • 빌드, 테스트 및 배포 프로세스 전체를 모든 이해 관계자에게 공개합니다.

CI를 사용하는 이유는 무엇일까요?

  • 더 나은 품질의 소프트웨어를 개발하고 반복 가능한 테스트를 수행하는 데 도움이 됩니다.
  • 엔지니어링 팀의 개발 생산성을 향상시키고 개발자들이 병렬적으로 기능을 개발할 수 있도록 지원합니다.
  • 팀 전체의 가시성과 소통을 향상시킵니다.
  • 문제가 발생하면 즉각적인 피드백을 제공하고 배포 속도를 높이고 예측 가능성을 높여 위험을 줄입니다.
  • 출시 시점에 발생하는 막판 혼란을 방지합니다.

CI 시스템 사용의 최고의 사례

  • 일찍 자주 커밋하고, 절대 오류가 있는 코드는 커밋하지 마세요.
  • 빌드 실패를 즉시 수정하고 지표를 기반으로 조치를 취하십시오.
  • 모든 대상 환경에서 빌드하고 모든 빌드에서 아티팩트를 생성합니다.
  • IDE에 의존하지 않도록 빌드 프로세스를 자동화하세요.
  • 데이터베이스 스키마를 포함하여 변경 사항이 발생할 때마다 모든 것을 빌드하고 테스트하십시오.
  • 빌드 속도를 빠르게 유지하고 자동화된 배포를 사용하세요.

CI의 단점

  • CI 서버를 사용하려면 초기 설정 시간과 교육이 필요합니다.
  • 적절한 테스트 절차를 개발해야 하며, 잘 구축된 테스트 스위트에는 상당한 자원이 필요합니다.
  • 기존 프로세스를 변환해야 하며, 추가 서버와 환경이 필요합니다.
  • 여러 개발자가 동시에 코드를 통합하려고 할 때 대기 시간이 발생할 수 있습니다.

CI 프로세스를 위한 도구

Jenkins

Jenkins 는 오픈 소스 지속적 통합 도구이며 로 작성되었습니다. Java이 도구는 대규모 코드베이스에서 개별 변경 사항에 대한 실시간 테스트 및 보고를 용이하게 하고, 개발자가 빌드 테스트를 자동화하는 동시에 결함을 신속하게 찾아 해결할 수 있도록 지원합니다.

Bamboo

Bamboo 이 플랫폼은 자동화된 빌드, 테스트 및 릴리스를 한 곳에서 수행하는 지속적 통합 빌드 서버입니다. Jira와 완벽하게 연동됩니다. Bitbucket 또한 Docker, Git, SVN, Mercurial, AWS 등 다양한 기술을 지원합니다.

TeamCity

TeamCity 이 도구는 다양한 강력한 기능을 갖춘 지속적 통합(CI) 서버입니다. 빌드가 실행되지 않을 때에도 CI 서버를 안정적이고 건강하게 유지하며, 모든 프로젝트의 코드 품질을 향상시켜 줍니다.

자주 묻는 질문

지속적 배포(Continuous Delivery)는 모든 변경 사항을 릴리스 가능한 상태로 유지하고 수동 승인을 통해 프로덕션 환경에 배포합니다. 지속적 배포(Continuous Deployment)는 이러한 승인 절차를 없애고 파이프라인을 통과한 모든 변경 사항을 자동으로 릴리스합니다.

일반적인 파이프라인은 소스, 빌드, 테스트, 릴리스 및 배포 단계로 구성됩니다. Code 버전 관리 시스템에 커밋된 파일은 컴파일되고, 자동으로 테스트된 후, 프로덕션 환경에 배포될 수 있도록 준비됩니다.

통합 지옥은 프로젝트 막바지에 이르러서야 여러 개발자들이 변경한 내용들이 한꺼번에 병합되는 고통스러운 과정을 말합니다. CI(지속적 통합)는 작은 변경 사항들을 지속적으로 통합하고 테스트함으로써 이러한 통합 지옥을 방지합니다.

변경 사항은 하루에 최소 한 번, 작은 단위로 자주 커밋하세요. 이렇게 자주 커밋하면 변경 사항을 쉽게 테스트하고, 병합하고, 필요한 경우 롤백할 수 있습니다.

빌드 아티팩트는 JAR 파일, 컨테이너 이미지 또는 바이너리 파일과 같이 빌드의 패키지화된 출력물입니다. 일관성을 유지하기 위해 테스트 환경과 프로덕션 환경 모두에서 동일한 아티팩트가 사용됩니다.

자체 호스팅 CI는 사용자가 관리하는 서버에서 실행되므로 완벽한 제어 권한을 갖지만 유지 관리 비용이 더 많이 듭니다. 호스팅(클라우드) CI는 공급업체에서 유지 관리하며 인프라 관리가 필요 없이 쉽게 확장할 수 있습니다.

AI는 변경 사항에 대해 실행할 테스트를 예측하고, 위험 영역의 우선순위를 정하며, 오류 발생 시 분류 작업을 자동화합니다. 이를 통해 피드백 시간을 단축하고 코드베이스가 증가하더라도 파이프라인 속도를 유지할 수 있습니다.

예. 머신러닝 모델은 일관성 없이 통과하거나 실패하는 테스트, 클러스터 관련 빌드 실패를 감지하고 근본 원인을 파악하는 데 도움을 줍니다.ping 팀들이 파이프라인의 안정성을 유지합니다.

이 게시물을 요약하면 다음과 같습니다.