본문으로 이동
메뉴 여닫기
환경 설정 메뉴 여닫기
개인 메뉴 여닫기
로그인하지 않음
지금 편집한다면 당신의 IP 주소가 공개될 수 있습니다.
Continuous Integration, Continuous Delivery
  • 지속적인 통합(Continuous Integration)
  • 지속적인 서비스 제공(Continuous Delivery)
  • 코드 변경을 자주 통합하고, 빌드·테스트·배포 과정을 자동화하여 소프트웨어를 빠르고 안정적으로 출시하는 개발 방식
  • CI(Continuous Integration): 여러 개발자가 작업한 코드를 공유 저장소에 자주(하루 여러 번) 병합하고, 병합할 때마다 자동으로 빌드와 테스트를 실행하는 방식이다.
  • 통합 오류를 조기에 발견하여 한꺼번에 통합할 때 생기는 문제(통합 지옥)를 줄인다.
  • 전제 조건: 버전 관리 시스템(Git 등), 자동화된 빌드, 자동화된 테스트(단위 테스트 등)

지속적 제공과 지속적 배포

편집 원본 편집
구분 지속적 제공(Continuous Delivery) 지속적 배포(Continuous Deployment)
정의 언제든 운영 환경에 배포할 수 있는 상태로 유지 테스트를 통과한 변경을 운영 환경에 자동 배포
운영 배포 사람이 승인한 후 배포(수동 단계 존재) 승인 없이 자동 배포
자동화 범위 빌드, 테스트, 스테이징 배포 빌드부터 운영 배포까지 전체

파이프라인 단계

편집 원본 편집
  • 코드 커밋 → 빌드(컴파일, 패키징) → 테스트(단위·통합 테스트, 정적 분석) → 스테이징 배포 → 운영 배포 → 모니터링
  • 한 단계가 실패하면 파이프라인이 중단되고 개발자에게 알린다.
  • 운영 배포에는 블루 그린 배포, 카나리 배포 같은 무중단 배포 전략을 쓰기도 한다.
도구 특징
Jenkins Java 기반 오픈소스 CI 서버. 다양한 플러그인, Jenkinsfile로 파이프라인을 코드로 정의
GitLab CI/CD GitLab에 내장. 저장소의 .gitlab-ci.yml 로 파이프라인 정의
GitHub Actions GitHub에 내장. .github/workflows 의 YAML 워크플로
기타 CircleCI, Travis CI, Argo CD(쿠버네티스 배포) 등

빌드 자동화 도구

편집 원본 편집
  • 소스 코드 컴파일, 테스트, 패키징, 배포 등 빌드 과정을 자동으로 수행하는 도구이다.
도구 설정 파일 특징
Ant build.xml Apache의 Java 빌드 도구. 절차를 XML로 자유롭게 기술하나 정해진 규칙이 적고 자체 의존성 관리 기능이 없음
Maven pom.xml Apache. 규약(표준 디렉터리, 빌드 생명주기)과 의존성(라이브러리) 자동 관리
Gradle build.gradle(.kts) Groovy·Kotlin DSL 사용. 증분 빌드와 빌드 캐시로 빠름. 안드로이드 공식 빌드 도구
Jenkins Jenkinsfile 빌드 도구라기보다 빌드·테스트·배포를 실행하고 관리하는 CI 서버. Ant·Maven·Gradle과 연동
  • 지속적 제공(수동 승인 후 배포)과 지속적 배포(자동 배포)의 차이를 구분한다.
  • 빌드 자동화 도구 Ant, Maven, Gradle, Jenkins의 특징을 연결한다. Gradle은 Groovy 기반 DSL, 안드로이드 기본 빌드 도구이다.
  • CI의 목적은 통합 오류의 조기 발견이다.