CI/CD

Kkd·2024년 12월 16일
0

매일메일 개념정리

목록 보기
32/93

CI/CD란?

CI/CD는 소프트웨어 개발의 자동화된 통합(Integration)배포(Delivery/Deployment)를 지칭하며, 지속적인 개발과 효율적인 배포를 통해 개발 프로세스를 최적화하는 방식입니다.

CI/CD는 다음과 같은 두 가지 주요 구성 요소로 나뉩니다:


1. CI (Continuous Integration, 지속적 통합)

CI의 개념:

  • CI는 개발자가 소스 코드를 빈번하게 중앙 저장소(예: Git)에 통합하고, 이를 자동으로 빌드하고 테스트하는 프로세스입니다.
  • 작은 단위로 자주 코드 변경 사항을 병합함으로써 통합 시 발생할 수 있는 문제를 조기에 발견하고 해결합니다.

CI의 특징:

  • 개발자 간 코드 충돌 최소화.
  • 자동화된 빌드 및 테스트 도구를 통해 품질 보장.
  • 짧은 개발 주기로 빠른 피드백 제공.

CI의 단계:
1. 개발자는 새로운 코드 변경 사항을 중앙 저장소에 푸시.
2. CI 서버(Jenkins, GitLab CI/CD 등)가 자동으로 빌드 및 테스트 수행.
3. 테스트가 실패하면 알림을 통해 문제를 알려줌.
4. 성공 시, 병합 가능 상태로 유지.


2. CD (Continuous Delivery & Continuous Deployment)

CD의 개념:
CD는 CI 이후의 단계를 담당하며, 두 가지 유형으로 나뉩니다:

  • Continuous Delivery(지속적 제공):
    • CI에서 성공적으로 통합된 코드를 프로덕션 준비 상태로 유지.
    • 릴리스는 수동 승인을 통해 최종 배포.
  • Continuous Deployment(지속적 배포):
    • CI/CD 파이프라인을 통해 프로덕션 환경까지의 배포를 완전히 자동화.
    • 코드가 통합되면 테스트가 성공한 후 자동으로 최종 배포.

CD의 목표:

  • 소프트웨어를 항상 배포 가능한 상태로 유지.
  • 배포 과정의 안정성 확보.
  • 수동 작업 최소화로 개발 속도 증가.

CI/CD의 주요 구성 요소

  1. 버전 관리 시스템:

    • Git, GitHub, GitLab, Bitbucket 등.
    • 코드 변경 사항 기록 및 협업 지원.
  2. CI/CD 도구:

    • Jenkins, GitLab CI/CD, Travis CI, CircleCI, AWS CodePipeline 등.
    • 빌드, 테스트, 배포를 자동화.
  3. 빌드 도구:

    • Maven, Gradle, npm 등.
    • 애플리케이션 빌드 및 의존성 관리.
  4. 테스트 도구:

    • JUnit, Selenium, Postman 등.
    • 유닛 테스트, 통합 테스트, UI 테스트 수행.
  5. 배포 환경:

    • Docker, Kubernetes, AWS, Azure, GCP 등.
    • 컨테이너 및 클라우드 인프라 활용.

CI/CD 파이프라인의 동작 과정

  1. 코드 변경:

    • 개발자가 새로운 기능이나 버그 수정을 완료 후 저장소에 푸시.
  2. 빌드:

    • 코드가 빌드 도구를 사용하여 애플리케이션으로 컴파일 및 패키징.
  3. 테스트:

    • 자동화된 테스트 스크립트를 통해 코드 품질 검증.
    • 실패 시 알림이 전송되어 즉각 수정 가능.
  4. 릴리스(Continuous Delivery):

    • 검증된 코드를 스테이징 환경에 배포.
    • 릴리스는 수동 승인 필요.
  5. 배포(Continuous Deployment):

    • 모든 단계가 성공하면 프로덕션 환경에 자동으로 배포.

CI/CD의 장점

  1. 빠른 피드백 제공:

    • 자동화된 빌드 및 테스트로 개발자가 코드 품질 문제를 즉시 확인 가능.
  2. 시간 절약:

    • 수동 작업 감소로 개발 속도 향상.
  3. 품질 향상:

    • 테스트 및 배포 프로세스의 일관성 보장.
  4. 릴리스 속도 증가:

    • 코드가 항상 배포 가능한 상태로 유지.
  5. 개발자 간 협업 강화:

    • 코드 변경 사항을 주기적으로 병합하여 충돌 방지.

CI/CD 구축 시 주의점

  1. 테스트 자동화 중요성:

    • 자동화된 테스트가 없으면 CI/CD의 장점이 제한됨.
  2. 인프라 구성:

    • Docker와 Kubernetes를 활용해 유연한 배포 환경 구성 필요.
  3. 보안:

    • CI/CD 파이프라인에 저장된 민감 정보(예: API 키, 인증 토큰)를 보호.
  4. 롤백 전략:

    • 배포 후 문제가 발생할 경우 롤백할 수 있는 계획 필요.

CI/CD 도구 예시

도구 이름특징
Jenkins가장 널리 사용되는 오픈 소스 CI/CD 도구. 플러그인이 풍부하며 유연성 높음.
GitLab CI/CDGitLab과 통합된 CI/CD 기능 제공. Git 리포지토리를 기반으로 빌드 및 배포를 관리.
CircleCI클라우드 기반 CI/CD 플랫폼으로, 간단하고 빠른 설정 가능.
Travis CIGitHub과의 통합에 최적화된 CI 도구.
AWS CodePipelineAWS 서비스와 통합된 CI/CD 솔루션으로, 클라우드 중심 워크플로우 관리.

CI/CD의 활용 예시

  1. 마이크로서비스 아키텍처:
    • 각 서비스별로 독립된 CI/CD 파이프라인 설정.
  2. DevOps:
    • CI/CD를 통해 개발(Dev)과 운영(Ops) 간의 협업 강화.
  3. 애자일 개발:
    • 빠른 배포 주기를 요구하는 애자일 프로세스에서 필수.

결론

CI/CD는 소프트웨어 개발에서 코드 품질을 보장하고 배포 속도를 높이는 핵심적인 프로세스입니다. 이를 효과적으로 활용하면 개발자와 운영팀 간의 협업을 강화하고, 사용자가 더 나은 품질의 소프트웨어를 빠르게 경험할 수 있도록 합니다.

profile
🌱

0개의 댓글