[etc] CI/CD란?

김채운·2024년 5월 8일
0

etc.

목록 보기
8/9

➡️ CI/CD란?

배포한 프로젝트가 있다고 하자, 그런데 이 프로젝트를 배포하고 난 후에 수정해야 될 부분이 생겼다면 수정을 하고 다시 컴파일, 빌드, 배포의 과정을 통해서 수정된 코드가 제대로 동작하는지 테스트하고 검증을 해야 한다. 이 과정을 매 수정마다 반복한다면 시간도 많이 걸리고 실제로 서비스를 제공하고 있는 사이트라면 사용자 경험에도 문제가 생길 것이다.
이를 위해서 애플리케이션 개발 단계부터 배포 때까지의 모든 단계를 자동화를 통해서 좀 더 효율적이고 빠르게 사용자에게 배포할 수 있는 CI/CD를 사용하게 된 것이다.

✨ CI/CD 활용의 이점

1. 자동화된 품질 보증: CI/CD를 통해 테스트, 빌드, 배포 작업을 자동화하여 개발자가 신속하게 코드 변경 사항을 통합하고 배포할 수 있다. 이는 개발자가 코드 변경으로 인한 예기치 않은 오류를 방지하고 품질을 유지할 수 있도록 돕는다.

2. 빠른 피드백: CI/CD는 코드 변경 사항이 통합되면 자동으로 테스트되고 배포되므로 개발자들은 빠르게 결과를 확인할 수 있다. 이를 통해 버그를 더 빨리 발견하고 수정할 수 있다.

3. 반복적인 작업 감소: CI/CD는 개발자들이 반복적이고 지루한 작업을 수동으로 수행하지 않도록 한다. 대신에 이러한 작업들을 자동화하여 시간과 노력을 절약할 수 있습니다.

4. 빠른 소프트웨어 출시: CI/CD를 통해 개발자들은 코드 변경 사항을 신속하게 배포할 수 있다. 이는 고객 요구 사항에 빠르게 대응하고 새로운 기능을 더 빨리 출시할 수 있음을 의미합니다.

5. 팀 협업 및 통합: CI/CD를 통해 개발, 테스트, 운영 팀 간의 협업이 강화된다. 코드 변경 사항이 자동으로 공유되고 검증되므로 팀 간의 의사 소통과 협업이 원활해진다.

6. 확장성 및 안정성 향상: CI/CD는 확장 가능한 프로세스를 구축하는 데 도움이 된다. 애플리케이션의 규모가 커지더라도 자동화된 프로세스를 통해 안정성을 유지할 수 있다.

➡️ CI (Continuous Integration)

지속적 통합(Continuous Integration, CI)은 소프트웨어 개발 과정에서 발생하는 코드 변경 사항을 빈번하게 통합하는 프로세스를 말합니다. CI의 목적은 팀 내에서 개발한 코드를 자동으로 테스트하고 빌드하여 통합하는 것입니다. 이를 통해 애플리케이션의 버그 수정이나 새로운 코드 변경이 생기면 주기적으로 빌드 및 테스트되면서 공유되는 레파지토리에 통합(merge)됩니다.

CI는 주요 단계로 코드 작성(Code), 빌드(Build), 테스트(Test)가 있습니다. 개발자가 코드를 작성하고 원격 저장소에 push하면 자동으로 테스트와 빌드가 실행되며, 결과물을 통해 코드의 품질을 확인할 수 있습니다. 이를 통해 개발자들은 각자 구현해야 할 기능에만 집중할 수 있고, 코드의 통합과 빌드는 자동화되어 품질을 관리할 수 있습니다.

CI가 나오기 전에는 개발을 끝마치고 배포가 되어야만 코드의 오류 여부와 올바른 작동 여부를 확인할 수 있었습니다. 이를 해결하기 위해 CI를 적용하면 개발자들은 코드 변경을 지속적으로 통합하여 품질을 관리할 수 있게 되었습니다. 이러한 지속적인 통합은 코드 변경을 빠르게 파악하고 수정할 수 있도록 합니다.

결과적으로 CI를 통해 버그를 신속하게 해결할 수 있을 뿐만 아니라, 소프트웨어 품질을 개선하고 새로운 소프트웨어 업데이트를 검증하고 배포하는데 걸리는 시간을 단축할 수 있습니다.

1. 코드 작성 (Code):

  • 코드 작성 단계는 CI 파이프라인에서 가장 기본적이고 중요한 단계이다.
  • 개발자가 새로운 기능을 개발하거나 기존 코드를 수정하는 등의 작업을 수행한다.
  • 이 단계에서는 소스 코드를 작성하고 변경된 코드를 원격 저장소에 push한다. 이때 코드는 주로 버전 관리 시스템(Git 등)을 통해 관리됨.

2. 빌드 (Build):

  • 빌드 단계는 코드를 실행 가능한 소프트웨어로 변환하는 과정이다.
  • CI 시스템에서는 소스 코드를 가져와 컴파일하고, 실행 파일이나 패키지로 빌드하여 준비한다.
    빌드 과정에서는 코드를 컴파일하고, 의존성을 해결하고, 실행 파일로 묶는 등의 작업이 이루어진다.
  • 이 단계에서 발생하는 오류나 경고를 식별하고 처리하는 것이 중요하다. 또한 빌드된 소프트웨어의 버전 관리도 이루어진다.

3. 테스트 (Test):

  • 테스트 단계는 빌드된 소프트웨어가 올바르게 작동하는지 확인하는 과정이다.
  • 이 단계에서는 다양한 종류의 테스트를 실행하여 소프트웨어의 품질을 검증한다.
  • 주로 단위 테스트, 통합 테스트, 시스템 테스트, 성능 테스트 등의 테스트가 이루어진다.
  • 테스트 결과를 기록하고, 오류를 식별하여 개발자에게 알려주는 것이 중요하다.

이러한 단계들은 CI 파이프라인에서 자동화되어 실행된다. 코드 작성 → 빌드 → 테스트 순서로 진행되며, 각 단계에서 발생하는 문제를 신속하게 식별하고 해결하여 소프트웨어의 품질을 높이는 것이 목표이다.

➡️ CD (Continuous Deployment or Delivery)

CD(Continuous Delivery 또는 Continuous Deployment)는 CI의 확장된 개념으로, 소프트웨어를 빠르게 고객에게 전달하는 것을 목표로 하여 지속적 통합을 거친 코드에 대해서 신뢰할 수 있기 때문에 바로 배포할 수 있다. 그래서 CD는 소프트웨어 개발 및 배포 프로세스를 자동화하여 신속한 배포를 가능하게 한다.

CD에는 두 가지 주요 방식이 있는데,
CD는 지속적 배포로 소프트웨어가 항상 신뢰 가능한 수준에서 배포될 수 있도록 관리하자는 개념으로 지속적 제공(Continuous Delivery)로 사용되기도 한다.

Continuous Delivery (지속적 제공):

Continuous Delivery는 지속적 통합을 통해 새로운 코드 변경 사항이 항상 배포 가능한 상태를 유지하는 것을 목표로 한다.
CI 파이프라인을 통해 빌드된 소프트웨어는 자동으로 테스트되며, 테스트를 통과한 경우에만 배포할 수 있다.
배포는 수동으로 수행될 수 있으며, 트리거가 발생하면 언제든지 즉시 배포할 수 있다.

Continuous Deployment (지속적 배포):

Continuous Deployment는 CI 파이프라인을 통해 빌드 및 테스트된 코드 변경 사항이 자동으로 프로덕션 환경에 배포되는 것을 의미한다.
즉, 모든 코드 변경 사항이 자동으로 프로덕션 환경에 배포된다.
배포 프로세스는 자동화되어 있으며, 테스트를 통과한 코드는 자동으로 실제 사용자에게 배포된다.
이를 통해 개발자는 새로운 기능을 신속하게 고객에게 제공할 수 있다.

CD를 적용함으로써 소프트웨어 개발과 배포 과정에서의 실수를 줄이고, 프로덕션 환경으로의 배포 주기를 단축하여 빠른 피드백을 받을 수 있다. 이는 개발자와 고객 간의 소통을 원활하게 하고, 제품 품질을 향상시키는 데 도움이 된다.

CD의 주요 단계로는 Release, Deploy, Operate가 있다.

1. Release (릴리스):

  • 릴리스는 개발된 소프트웨어의 특정 버전을 나타낸다. 이는 개발자나 프로젝트 관리자가 사용자에게 제공하고자 하는 완성된 소프트웨어의 상태를 의미한다. 릴리스는 개발된 코드가 특정 기능 또는 수정 사항을 포함하고, 테스트를 통과하며 배포할 준비가 된 상태를 말한다.
  • 릴리스 단계는 배포 가능한 소프트웨어 패키지를 생성하는 단계이다. 이는 개발된 소프트웨어의 특정 버전을 릴리스하여 배포할 준비를 하는 과정을 말한다. 이 패키지에는 사용자가 설치하고 실행할 수 있는 실행 파일, 라이브러리, 설정 파일 등이 포함될 수 있다.
  • 이 단계에서는 개발된 소프트웨어의 특정 버전을 릴리스하여 배포할 준비를 한다.
  • 이러한 배포 가능한 패키지는 다음 단계인 배포 단계에서 사용된다.

2. Deploy (배포):

  • 배포 단계에서는 릴리스된 소프트웨어를 실제 환경에 배포한다.
  • 배포 프로세스는 소프트웨어를 운영 중인 서버 또는 클라우드 인프라에 설치하고 구성하는 것을 포함한다.
  • 이 단계에서는 배포된 소프트웨어가 사용자에게 노출되고 서비스로 제공된다.

3. Operate (운영):

  • 운영 단계에서는 배포된 소프트웨어의 상태를 파악하고 운영을 관리한다.
  • 이 단계에서는 모니터링, 로깅, 오류 처리 및 성능 관리와 같은 작업이 수행된다.
  • 서비스가 정상적으로 운영되도록 하기 위해 필요한 조치를 취하고, 문제가 발생한 경우에는 신속하게 대응하여 서비스의 가용성과 신뢰성을 유지한다.

➡️ CI/CD 파이프라인

CI/CD 파이프라인은 소프트웨어 개발 및 배포 과정을 자동화하고 연속적으로 실행하는 프로세스를 의미한다. CI는 지속적 통합(Continuous Integration)을, CD는 지속적 배포(Continuous Deployment) 또는 지속적 제공(Continuous Delivery)를 나타낸다.

이러한 파이프라인은 주로 소프트웨어의 변경 사항을 버전 관리 시스템(ex: Git)에 푸시하면 자동으로 시작된다. 그런 다음 변경 사항이 빌드되고 테스트되며, 필요한 경우 자동으로 배포된다.

위에 그림은 배포 과정을 도식화한 것이다. 개발자가 코드를 원격 저장소에 올리면, 그 코드가 빌드 및 테스트와 릴리즈를 거쳐 배포 서버로 전달 된다. 배포 서버에 도달한 빌드된 코드는 애플리케이션 서버로 최종 배포가 완료 되고, 그 결과물을 유저가 직접 확인하게 된다.

여기서 자동화 시키는 부분은 보통 코드가 빌드되면서 최종적으로 배포가 되는 단계까지다. 이 부분을 지속적인 통합 및 배포를 위하여 일련의 자동화 단계로 만드는데, 이것을 파이프라인을 구축한다고 표현한다.

✨ CI/CD 파이프라인을 구성하는 단계

여러 단계로 분리된 파이프라인은 소프트웨어의 전체 배포 과정을 자동화하고 효율적으로 관리할 수 있도록 도와줍니다.

여기서 각 단계의 역할을 보충적으로 설명하겠습니다:

Source 단계

  • 소스 코드의 변경을 감지하고 가져오는데, 주로 버전 관리 시스템(Git 등)과 연동되어 변경 사항을 추적한다. 그리고 변경된 코드를 다음 단계로 전달한다.

Build 단계
Source 단계에서 전달된 코드를 컴파일하고 빌드, 테스트해서 소프트웨어를 실행 가능한 형태로 만들기 위해 필요한 작업을 수행한다. 그리고 빌드된 결과물을 다음 단계로 전달한다.

Deploy 단계
Build 단계에서 생성된 결과물을 실제 서비스에 배포한다. 서버나 클라우드 인프라에 소프트웨어를 설치하고 구성한다.
배포된 애플리케이션을 사용자에게 노출하거나 프로덕션 환경으로 전환한다.

파이프라인의 구성은 프로젝트의 특성과 요구 사항에 따라 다를 수 있다. 일부 프로젝트에서는 추가 단계가 필요하거나, 특정 단계가 생략되기도 한다. 하지만 보통은 소스 관리, 빌드, 테스트, 배포의 기본 단계를 포함하고 있다.

✔️ CI/CD 파이프라인 구성요소

1. 빌드 (소프트웨어 컴파일): 소스 코드를 가져와 컴파일하고 빌드하여 실행 가능한 소프트웨어를 생성.

2. 테스트 (호환성 및 오류 검사): 빌드된 소프트웨어를 자동으로 테스트하여 호환성 및 오류를 검사한다. 이는 유닛 테스트, 통합 테스트, E2E 테스트 등을 포함함.

3. 릴리스 (버전 제어 저장소의 애플리케이션 업데이트): 릴리스 단계에서는 버전 제어 저장소에 있는 소프트웨어의 업데이트를 관리한다. 이는 새로운 기능의 추가, 버그 수정, 보안 패치 등을 포함함.

4. 배포 (개발에서 프로덕션 환경으로의 변환): 빌드된 소프트웨어를 개발 환경에서 프로덕션 환경으로 자동으로 배포한다.

5. 규정 준수 및 유효성 검사: 소프트웨어가 규정 준수 및 품질 기준을 충족하는지 검사한다. 이는 보안 검사, 성능 테스트, 사용성 테스트 등을 포함한다.

이러한 단계는 CI/CD 파이프라인의 핵심 구성 요소이며, 이를 자동화하여 반복적인 프로세스로 만든다. 이를 통해 소프트웨어 개발 및 배포 과정을 더욱 효율적이고 안정적으로 관리할 수 있습니다.

0개의 댓글