Close

지속적 통합이란 무엇입니까?

더 빠른 피드백으로 팀의 민첩성을 구축하세요. 팀은 테스트 속도만큼만 빠르게 움직이기 때문입니다.


지속적 통합(CI)은 여러 기여자의 코드 변경을 하나의 소프트웨어 프로젝트에 통합하는 작업의 자동화 관행입니다. 개발자가 중앙 집중식 리포지토리 코드 변경 사항을 자주 병합하여 빌드와 테스트가 실행되도록 하는 것은 DevOps의 주요 모범 사례입니다. 통합 전에 자동화된 도구를 사용하여 새 코드의 정확성을 검증합니다.

소스 코드 버전 관리 시스템은 CI 프로세스의 핵심입니다. 버전 관리 시스템은 자동 코드 품질 테스트, 구문 스타일 검토 도구 등으로 보완됩니다.

지속적 통합을 달성하는 방법

지속적 통합 및 자동 테스트를 도입하는 방법을 5단계로 알아보세요. 문서 읽기

CI 친화적인 Git 리포지토리를 위한 5가지 팁

Git과 지속적 통합 도구를 최대한 활용하는 다섯 가지 팁! 문서 읽기

지속적 통합 도구

Git과 지속적 통합 도구를 최대한 활용하는 다섯 가지 팁! 문서 읽기

트렁크 기반 개발

개발자가 잦은 소규모 업데이트를 핵심 “트렁크”나 메인 브랜치에 병합하는 버전 제어 관리 방식인 트렁크 기반 개발에 대해 자세히 알아보세요. 문서 읽기

지속적 통합 자습서

이 자습서에는 간단한 세 단계로 지속적 통합을 시작하는 방법이 나와 있습니다. 자습서 읽어보기


지속적 통합의 중요성

CI의 중요성을 이해하려면 먼저 CI의 부재로 자주 발생하는 몇 가지 문제점을 논의하는 것이 좋습니다. CI가 없다면 개발자는 최종 제품에 코드를 제공할 때 수동으로 조정하고 소통해야 합니다. 이 조정은 개발 팀을 넘어 운영 팀 및 조직의 나머지 부분으로 확장됩니다. 제품 팀은 기능 및 수정 사항을 순차적으로 출시할 시기와 담당할 팀원을 조율해야 합니다.

비 CI 환경의 통신 오버헤드는 복잡하고 얽힌 동기화 작업이 될 수 있으며 이것으로 인해 프로젝트에 불필요한 관료적 비용이 추가될 수 있습니다. 그러면 개발자가 통합에 민감하고 많은 생각을 들여야 하기 때문에 코드 릴리스 속도가 느려지고 실패율이 높아집니다. 이 위험은 엔지니어링 팀과 코드베이스 규모가 커질수록 기하급수적으로 증가합니다.

강력한 CI 파이프라인이 없으면 엔지니어링 팀과 나머지 조직 간의 연결이 끊어질 수 있습니다. 제품 및 엔지니어링 팀 간 커뮤니케이션은 복잡할 수 있습니다. 엔지니어링 팀은 나머지 팀원이 요구 사항과 기능을 입력하고 예상된 결과를 돌려받을 수도 있는 블랙박스가 됩니다. 새로운 변경 사항을 통합하는 데 걸리는 시간이 알 수 없는 위험으로 이어지므로 엔지니어링 팀이 요청 시 제공 시간을 예측하기가 더 어려워집니다.

CI의 역할

CI를 통해 엔지니어링 팀의 인원수와 납품 성과를 늘릴 수 있습니다. 앞서 언급한 시나리오에 CI를 도입하면 소프트웨어 개발자가 독립적으로 기능을 병렬로 작업할 수 있습니다. 이 기능을 최종 제품에 통합할 준비가 되면 독립적으로 신속하게 병합할 수 있습니다. CI는 최신 고성능 소프트웨어 엔지니어링 조직에서 가치 있고 잘 알려진 관행입니다.

CI를 사용할 수 있는 방법

CI는 보통 애자일 소프트웨어 개발 워크플로와 함께 사용됩니다. 조직은 제품 로드맵 구성하는 작업 목록을 작성합니다. 그런 다음 이 작업을 소프트웨어 엔지니어링 팀원들 간에 분배하여 제공합니다. CI를 사용하면 배정된 개발자 사이에서 이 소프트웨어 개발 작업을 독립적으로 그리고 병렬로 개발할 수 있습니다. 작업 중 하나가 완료되면 개발자가 CI 시스템에 새 작업을 도입하여 나머지 프로젝트와 통합됩니다.

CI, 지속적 배포, 지속적 제공 비교

Continuous integration, deployment, and delivery are three phases of an automated software release pipeline, including a DevOps pipeline. These three phases take software from idea to delivery to the end-user. The integration phase is the first step in the process. Continuous integration covers the process of multiple developers attempting to merge their code changes with the main code repository of a project.

지속적 제공은 지속적 통합의 다음 확장입니다. 제공 단계에서는 최종 사용자에게 제공하기 위해 아티팩트를 함께 패키징하는 일이 이루어집니다. 이 단계에서는 자동화된 조립 도구를 실행하여 이 아티팩트를 생성합니다. 이 빌드 단계는 '초록색'으로 유지됩니다. 즉, 언제든지 아티팩트를 사용자에게 배포할 준비가 되어 있어야 합니다.

지속적 배포는 파이프라인의 마지막 단계입니다. 배포 단계는 소프트웨어 아티팩트를 자동으로 실행하여 최종 사용자에게 배포하는 것입니다. 배포 시 아티팩트가 통합 및 전달 단계를 성공적으로 통과합니다. 이제 아티팩트를 자동으로 배포해야 할 차례입니다. 아티팩트를 공용 서버나 앱 스토어와 같은 기타 배포 메커니즘으로 자동으로 옮기는 스크립트나 도구를 통해 이루어집니다.


지속적 통합의 이점 및 문제점

지속적 통합은 DevOps와 고성능 소프트웨어 팀의 필수적인 측면입니다. 하지만 CI의 이점은 엔지니어링 팀으로만 제한되지 않고 조직 전체에 큰 도움이 됩니다. CI를 사용하면 소프트웨어 개발 및 제공 프로세스에 대한 투명성과 인사이트를 높일 수 있습니다. 이 이점을 통해 나머지 조직은 시장 진출 전략을 더 효과적으로 계획하고 실행할 수 있습니다. 조직 차원에서 CI의 전반적인 이점 중 몇 가지는 다음과 같습니다.

확장 지원

CI를 사용하면 조직이 엔지니어링 팀 규모, 코드베이스 규모, 인프라를 확장할 수 있습니다. CI는 코드 통합 관료주의와 커뮤니케이션 오버헤드를 최소화하여 DevOps 및 애자일 워크플로를 구축할 수 있습니다. 각 팀원이 릴리스까지 새 코드 변경을 소유할 수 있습니다. CI를 사용하면 개별 기능 개발 사이의 조직적 종속성을 제거하여 확장이 가능합니다. 이제 개발자는 고립된 사일로에서 기능 작업을 할 수 있고 자신의 코드가 핵심 DevOps 프로세스인 나머지 코드베이스와 원활하게 통합될 것을 확신할 수 있습니다.

피드백 루프를 개선

비즈니스 결정에 대한 피드백이 빨라진다는 것도 CI의 또다른 강력한 부수 효과입니다. 제품 팀은 최적화된 CI 플랫폼으로 아이디어를 테스트하고 제품 설계를 더 빠르게 반복할 수 있습니다. 변화를 빠르게 추진하고 성공으로 측정할 수 있습니다. 버그나 다른 문제를 신속하게 해결하고 고칠 수 있습니다.

커뮤니케이션 향상

CI는 전반적인 엔지니어링 커뮤니케이션과 책임성을 향상하여 DevOps 팀에서 개발 및 운영 간의 더 나은 공동 작업을 지원합니다. CI에 연결된 풀리퀘스트 워크플로를 도입하면 개발자가 수동적인 지식 공유를 얻게 됩니다. 풀리퀘스트를 통해 개발자는 다른 팀원의 코드를 관찰하고 댓글을 달 수 있습니다. CI 파이프라인을 통해 기능이 진행되면서 개발자는 이제 기능 브랜치를 보고 다른 개발자와 공동 작업할 수 있습니다. CI는 QA 리소스 지출에도 사용될 수 있습니다. 신뢰도가 높은 자동 테스트 커버리지를 갖춘 효율적인 CI 파이프라인은 회귀를 방지하고 사양에 맞는 새 기능을 보장합니다. 새 코드를 병합하기 전에 코드는 새 회귀를 방지하는 CI 테스트 어설션 스위트를 통과해야 합니다.

CI의 이점은 채택과 관련된 어떤 어려움보다도 훨씬 큽니다. 하지만 CI의 어려움에 주의하는 것이 중요합니다. CI의 실제 어려움은 프로젝트를 CI가 아예 없는 상태에서 CI로 전환할 때 발생합니다. 대부분의 최신 소프트웨어 프로젝트는 초기 단계부터 CI를 채택하고 나중에 도입해야 하는 어려움을 덜어줄 것입니다.

채택 및 설치

지속적 통합의 어려움은 주로 팀 채택 및 초기 기술 설치와 관련되어 있습니다. 현재 팀에 CI 솔루션이 없다면 솔루션을 선택하여 시작하는 데 다소 노력이 필요할 수 있습니다. 따라서 CI 파이프라인을 설치할 때는 기존 엔지니어링 인프라를 고려해야 합니다.

기술 학습 곡선

CI 기능에는 팀이 해야 하는 학습 곡선 투자가 될 수 있는 보조 기술 목록이 함께 제공됩니다. 이 기술은 버전 제어 시스템, 호스팅 인프라, 오케스트레이션 기술입니다.


CI 모범 사례

테스트 중심 개발

프로젝트에서 자동 테스트 커버리지를 갖춘 CI 파이프라인을 설정한 후에는 테스트 커버리지를 지속해서 개발 및 개선하는 것이 모범 사례입니다. CI 파이프라인을 통해 전달되는 각각의 새로운 기능에는 새 코드가 예상대로 동작하는지 확인하는 테스트 세트가 함께 제공되어야 합니다.

테스트 주도 개발(TDD)은 실제 기능 코딩을 하기 전에 테스트 코드와 테스트 케이스를 작성하는 관행입니다. Pure TDD는 제품 팀과 긴밀하게 협력하여 예상되는 비즈니스 행동 사양을 작성한 다음 테스트 사례로 변환할 수 있습니다. 순수한 TDD 시나리오에서는 개발자와 제품 팀이 사양이나 요구 사항 목록을 만나 토론합니다. 그러면 요구 사항의 목록이 코드 어설션 체크리스트로 전환되고 개발자가 해당 어설션과 일치하는 코드를 작성합니다.

풀리퀘스트 및 코드 검토

최신 소프트웨어 개발 팀은 대부분 풀리퀘스트와 코드 검토 워크플로를 연습합니다. 풀리퀘스트는 효과적인 CI를 위한 중요한 관행입니다. 풀리퀘스트는 개발자가 새 코드를 메인 코드베이스에 병합할 준비가 되면 만들어집니다. 풀리퀘스트는 다른 개발자에게 통합 준비가 된 새로운 변경 사항을 알립니다.

풀리퀘스트는 CI 파이프라인을 시작하고 일련의 자동 승인 단계를 실행하기에 좋은 기회입니다. 일반적으로 풀리퀘스트 시 수동 승인 단계가 추가되며 이 단계에서는 이해 관계자가 아닌 엔지니어가 기능에 대한 코드 검토를 수행합니다. 그러면 새로운 눈으로 새 코드와 기능을 검토할 수 있습니다. 이해 관계자가 아닌 관계자가 편집 제안을 하고 풀리퀘스트를 승인 또는 거부합니다.

풀리퀘스트나 코드 검토는 엔지니어링 팀 간의 수동적 커뮤니케이션과 지식 공유를 촉진하는 강력한 도구입니다. 코드베이스의 특정 기능에 대해 특정 엔지니어가 유일한 이해 관계자가 되는 지식 사일로의 형태로 발생하는 기술적 부채를 방지할 수 있습니다.

파이프라인 속도 최적화

CI 파이프라인이 중앙에서 자주 사용되는 프로세스라는 점을 감안하면 실행 속도를 최적화하는 것이 중요합니다. 기능 출시 속도, 팀 규모, 코드베이스 규모가 커질수록 CI 워크플로에서 조금이라도 지연되는 것은 기하급수적으로 복잡해집니다. CI 파이프라인 속도를 측정하고 필요에 따라 최적화하는 것이 모범 사례입니다.

CI 파이프라인이 빨라지면 제품 피드백 루프가 빨라집니다. 개발자는 빠르게 변화를 추진하고 사용자 경험을 개선할 수 있는 새로운 기능 아이디어를 실험해볼 수 있습니다. 모든 버그 수정은 발견되는 대로 신속하게 패치하고 해결될 수 있습니다. 실행 속도가 빨라지면 다른 경쟁업체보다 우위를 선점하고 고객에게는 전반적으로 더 높은 수준의 경험을 제공할 수 있습니다.


지속적 통합으로 시작하기

CI의 기본 종속성은 버전 관리 시스템(VCS)입니다. CI 설치의 타겟 코드베이스에 VCS가 없다면 첫 단계는 VCS를 설치하는 것입니다. 최신 코드베이스에서는 VCS가 없을 가능성이 매우 낮습니다. 인기 있는 VCS로는 Git, Mercurial, Subversion이 있습니다.

버전 관리를 갖췄다면 다음 단계는 버전 관리 호스팅 플랫폼을 찾는 것입니다. 대부분의 최신 버전 관리 호스팅 도구에는 CI에 대한 지원 및 기능이 내장되어 있습니다. 인기 있는 버전 관리 호스팅 플랫폼으로는 Bitbucket, GitHub, GitLab이 있습니다.

프로젝트에 버전 관리가 설정된 후에는 통합 승인 단계를 추가해야 합니다. 가장 중요한 통합 승인 단계는 자동 테스트입니다. 프로젝트에 자동 테스트를 추가하면 초기 비용 오버헤드가 발생할 수 있습니다. 테스트 프레임워크를 설치하려면 개발자가 테스트 코드와 테스트 케이스를 작성해야 합니다.

비용이 낮은 다른 CI 승인 메커니즘을 추가할 수 있는 아이디어는 구문 검사기, 코드 스타일 서식 지정기, 종속성 취약점 스캔입니다. 버전 관리 시스템을 설정하고 병합 승인 단계를 밟으면 지속적 통합을 달성한 것입니다!

CI는 순수하게 엔지니어링 전용 비즈니스 프로세스가 아닙니다. 조직, 마케팅, 영업 및 제품 팀의 나머지 팀원도 CI 파이프라인을 통해 얻는 이점이 있습니다. 제품 팀은 동시 개발 스트림의 실행을 병렬화하는 방법을 생각해야 합니다. 제품 및 엔지니어링 팀은 긴밀하게 협력하여 자동화된 테스트 스위트를 구성하기 위한 적격 비즈니스 기능 기대치를 결정할 것입니다.

마케팅 및 영업 팀은 CI 파이프라인을 참조하여 고객 대상 커뮤니케이션 활동 및 이벤트에 맞춰 조정할 수 있습니다. CI는 엔지니어링 실행이 어떻게 진행되고 있는지에 대해 조직의 나머지 구성원에게 어느 정도의 투명성을 제공합니다. 투명성과 커뮤니케이션 유틸리티는 애자일 프로젝트 개발 워크플로와 원활하게 통합됩니다.


결론...

조직에서 DevOps 접근 방식의 이점을 누리려고 노력하거나 단순히 여러 개발자 소프트웨어 팀을 보유하고 있다면 CI가 중요합니다. 엔지니어링 조직이 더 빠르고 효과적으로 실행할 수 있습니다.

CI는 최신 고효율 소프트웨어 개발 기관의 표준입니다. 최고의 회사는 탄탄한 CI 파이프라인을 가지고 있고 추가적인 효율성 투자를 무조건 합니다. CI의 이점은 엔지니어링 팀으로만 제한되지 않고 조직 전체에서 누릴 수 있습니다.

CI 관리 및 설치를 지원하는 타사 도구에는 여러 가지가 있습니다. 인기 있는 옵션으로는 Codeship, Bitbucket Pipelines, SemaphoreCI, CircleCI, Jenkins, Bamboo, Teamcity 등이 있습니다. 이 도구에는 각각 시작하는 데 도움이 되는 자세한 설치 가이드 및 설명서가 있습니다.

Try out some of the best CI tools provided by Atlassian:

Bitbucket pipelines is a great utility to bring a project up to speed with modern CI features.

Jira is one of the world's most popular agile and DevOps project management tools. It tightly integrates with other Bitbucket projects and when coupled with a CI pipeline, can give a very transparent view into the execution health of an organization.

Max Rehkopf
Max Rehkopf

스스로를 "자유분방하다"고 생각하는 저는 일상을 질서 있게 만들기 위해 애자일 관행과 린 원칙을 추구합니다. Atlassian을 위해 마련한 많은 기사, 강연 및 동영상을 통해 이러한 배운 점을 다른 분들과 공유할 때 큰 즐거움을 얻습니다 


여러분께 도움을 드릴 자료를 추천합니다.

이러한 리소스에 책갈피를 지정하여 DevOps 팀의 유형에 대해 알아보거나 Atlassian에서 DevOps에 대한 지속적인 업데이트를 확인하세요.

DevOps 일러스트레이션

DevOps 커뮤니티

DevOps 일러스트레이션

블로그 읽기

맵 일러스트레이션

무료로 사용해보기

DevOps 뉴스레터 신청

Thank you for signing up