[CI/CD] CI/CD란 무엇일까? | CI/CD Pipeline은 무엇일까?
1. CI/CD란?
소프트웨어 공학에서 CI/CD는 지속적 통합(영어: continuous integration)과 지속적 배포(영어: continuous delivery, CD)가 결합한 사례를 의미한다. CI/CD는 소프트웨어의 개발, 테스트와 배포를 모두 통합함으로써 소프트웨어 버그를 쉽게 찾아낼 수 있으며, 더 빠른 배포 주기를 가질 수 있게 만들어 준다.
- 위키백과
CI/CD는 소프트웨어 개발에서 빌드, 테스트, 배포 프로세스를 자동화하는 방법입니다.
과거에는 개발자가 새로운 기능을 추가할 때마다 코드를 수동으로 빌드하고, 테스트하고, 서버에 배포해야 했습니다. 이 과정에서 오류 발생 가능성이 높고, 시간이 오래 걸리는 문제가 있었습니다.
이러한 문제를 해결하기 위해, CI/CD(지속적 통합 & 지속적 배포) 개념이 등장했습니다.
CI/CD는 코드 통합, 빌드, 테스트, 배포를 자동화하여 개발 속도를 높이고, 소프트웨어 품질을 향상시키는 방법입니다.
CI/CD의 핵심 목표는 다음과 같습니다:
- 코드 변경 사항을 빠르게 병합하고 자동으로 테스트(CI)
- 안정적인 배포를 자동으로 수행(CD)
- 소프트웨어 릴리즈 주기를 단축하여 빠르게 사용자에게 제공
- 배포 과정에서 오류가 발생하면 자동으로 롤백 가능
CI/CD의 개념은 2000년대 초반부터 등장하기 시작했습니다.
특히, Agile(애자일) 개발 방법론과 DevOps 문화가 확산되면서 CI/CD가 필수적인 요소가 되었습니다.
그럼 이제 CI(Continuous Ingegration, 지속적 통합)과 CD (Continuous Deployment & Continuous Delivery)에 대해서 살펴보도록 하겠습니다.
2. CI(Continuous Ingegration, 지속적 통합)이란?
CI는 개발자가 변경한 코드를 자주 병합하고 자동으로 테스트하는 과정을 의미합니다.
즉, 코드가 저장소(GitHub 등)에 올라갈 때마다 자동으로 빌드 & 테스트가 실행이 되고,
개발자가 코드 변경 사항을 자주(하루에도 여러 번) 중앙 저장소(GitHub, GitLab 등)에 병합하는 프로세스를 의미합니다.
만약 프로젝트에 여러 개발자들이 협업을 하면서 1주일 혹은 더 오랜 기간 개발을 진행하다가 그동안 작업한 코드들을 한번에 Merge를 한다면 분명 충돌되는 많은 코드들이 있을 것 입니다.
이렇게 된다면.. 수정하는데에 시간이 많이 걸리겠지요
그렇기에 가능한 작은 단위로 나누어서 주기적으로 빈번히 개발하고 계속해서 통합하는 지속적 통합(CI)가 필요한 것 입니다.
따라서 CI의 핵심요소는 아래와 같습니다.
- 코드 병합 자동화 → 여러 개발자가 동시에 작업해도 충돌 없이 병합
- 자동화된 빌드 및 테스트 → 코드가 저장소에 올라가면 자동으로 빌드 & 테스트 수행
- 빠른 피드백 제공 → 코드 오류를 빠르게 발견하여 수정 가능
GitHub Actions Workflow에 대한 예시코드를 보자면
name: CI Pipeline
on: [push, pull_request]
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: 코드 체크아웃
uses: actions/checkout@v3
- name: Node.js 설정
uses: actions/setup-node@v3
with:
node-version: 18
- name: 의존성 설치 및 테스트
run: |
npm install
npm test
-----------
- push나 pull_request 발생 시 자동 실행됨
- npm install → 의존성 설치
- npm run build → 코드 빌드
- npm test → 자동 테스트 수행
3. CD (Continuous Deployment / Continuous Delivery) 이란?
CD는 크게 Continuous Delivery(지속적 전달)와 Continuous Deployment(지속적 배포) 두 가지로 나뉘게 되는데요.
특징은 아래와 같습니다.
3-1. Continuous Delivery (지속적 전달)
- 자동화된 테스트 & 빌드 후 수동 배포
- 개발자가 배포 여부를 최종적으로 결정 (승인 버튼 필요)
3-2. Continuous Deployment (지속적 배포)
- 완전히 자동화된 배포
- 테스트가 통과되면 자동으로 운영 서버에 배포됨
마찬가지로 Github Actions로 AWS에 배포를 한다는 예시를 들어보자면
name: CD Pipeline
on:
push:
branches:
- main
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: 코드 체크아웃
uses: actions/checkout@v3
- name: Docker 이미지 빌드
run: docker build -t my-app .
- name: AWS 서버에 배포
run: ssh ec2-user@my-server 'docker pull my-app && docker run -d my-app'
4. CI/CD 파이프라인?
CI/CD 파이프라인은 소프트웨어 개발에서 코드 변경 사항이 자동으로 빌드, 테스트, 배포, 모니터링 및 피드백 되는 일련의 과정을 의미합니다.
즉, CI/CD 파이프라인의 각 단계를 통과하며 테스트와 배포가 자동화가 됩니다.
이를 통해서 개발자들의 코드 품질 향상을 이루어내고, 배포속도가 빨라지게 되는 효과가 있죠.
참고링크
https://ko.wikipedia.org/wiki/CI/CD
CI/CD - 위키백과, 우리 모두의 백과사전
위키백과, 우리 모두의 백과사전. 소프트웨어 공학에서 CI/CD는 지속적 통합(영어: continuous integration)과 지속적 배포(영어: continuous delivery, CD)가 결합한 사례를 의미한다. CI/CD는 소프트웨어의 개발
ko.wikipedia.org
https://blog.kakaocloud.com/138
<지식 사전> CI/CD란? DevOps의 핵심 - 지속적 통합/배포의 개념과 구조 완벽 정리
안녕하세요, 카카오클라우드입니다. 현대 소프트웨어 개발에서 Continuous Integration/Continuous Deployment(이하, CI/CD)는 선택이 아닌 필수가 되었습니다. 빠른 개발과 안정적인 배포를 동시에 달성하기
blog.kakaocloud.com
https://docs.github.com/ko/actions/about-github-actions/understanding-github-actions
GitHub Actions 이해 - GitHub Docs
GitHub Actions는 빌드, 테스트 및 배포 파이프라인을 자동화할 수 있는 CI/CD(연속 통합 및 지속적인 업데이트) 플랫폼입니다. 리포지토리에 대한 모든 끌어오기 요청을 빌드 및 테스트하거나 병합된
docs.github.com
https://unity.com/kr/topics/what-is-ci-cd
CI/CD란? CI/CD 설명
CI/CD는 레포에서 코드 변경을 하루에 여러 번 통합하는 것을 포함합니다. 자세한 내용은 CI/CD의 복잡성을 알아보세요.
unity.com
https://www.elancer.co.kr/blog/detail/759
[CI/CD란?] CTO가 알려주는 실전 CI/CD 구축 노하우
[CI/CD란?] CTO가 알려주는 실전 CI/CD 구축 노하우
www.elancer.co.kr