본문 바로가기
CS

CI / CD

by titlejjk 2023. 6. 8.

https://blog.gitguardian.com/security-zines-2-compromising-ci-cd-pipelines/

가끔 공부를 하다보면 CI와 CD의 차이를 아나요?라는 면접관의 질문이 있다는 것을 보곤한다.

당연히 모르는 부분이기도 하고 많이 언급되기에 한번 찾아서 정리해보려고한다.

 

많이들 프로젝트를 개발하고 배포를 진행할 때 많은 개발자들이 CI/CD에 대해 언급하곤 한다는데, 이 때 말하는 CI/CD가 무엇이고 왜 적용해야하는지 적어보겠다.

더보기

간단하게 보자면 CI/CD는 소프트웨어 개발의 자동화와 지속적인 품질 향상을 목표로하는 개념이다.

수정된 코드에 문제가 다시 생기면 또 다시 컴파일/빌드/배포과정을 통해 수정된 코드가 정상 동작하는지 테스트하고 검증할 필요가 있는데 이러한 과정들은 시간도 많이 걸리고 실수하기 쉽다.

수정된 코드에 문제가 다시 생기면 또 다시 과정을 반복해야 하는데 이 때를 위해 CI/CD 가 생겼다.

 

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

CI는 여러 개발자가 동시에 작업하는 경우, 개발자들이 작성한 코드 변경 사항을 자동화된 방식으로 통합하는 프로세스이다. 주요 목표는 더 작은 코드 변경 단위를 자주 통합하여 팀 간의 협업을 원할하게 하고 통합된 코드의 품질을 개선한는 작업이다.

CI의 주요 구성 요소와 과정은 다음과 같다👉

  • 코드 저장소
    개발자들이 작성한 코드 변경 사항을 저장하는 공유 저장소이다. 주로 Git과 같은 버전 관리 시스템을 사용한다.
  • 자동화된 빌드
    변경된 코드를 컴파일하고 필요한 실행 파일 또는 라이브러리를 생성하는 과정이다.
  • 자동화된 테스트
    작성된 코드에 대해 자동화된 단위 테스트, 통합 테스트, 기능 테스트 등을 실행하여 코드의 품질을 확인한다.
  • 통합 및 피드백
    개발자들이 작성한 코드를 지속적으로 통합하고, 빌드와 테스트 결과를 개발 팀에게 피드백으로 제공한다. 이를 통해 충돌이나 오류를 빠르게 발견하고 수정할 수 있다.

2. Cotinuous Delivery(CD, 지속적 제공)

CD는 CI를 통해 통합된 코드를 자동화된 프로세스를 통해 제품 환경까지 신속하게 제공하는 것을 의미한다. CI에서 생성된 통합 코드는 테스트와 배포를 거쳐 사용자에게 제공 가능한 형태로 유지된다.

소프트웨어가 항상 신뢰 가능한 수준에서 배포될 수 있도록 관라하자는 개념으로 사용되기도한다.

CI를 통해서 새로운 소스코드의 빌드와 테스트 병합까지 성공적으로 진행되었다면, 빌드와 테스트를 거쳐 버전 관리 시스템과 같은 저장소에 업로드하는 것을 의미한다.

성공적으로 병합된 내역을 저장소뿐만 아니라 사용자가 사용할 수 있는 배포환경까지 릴리즈하는 것을 의미한다.

CD의 주요 구성 요소와 과정은 다음과 같다👉

  • 자동화된 테스트
    CI와 마찬가지로 자동화된 테스트를 실행하여 통합된 코드의 품질을 확인한다. 이는 코드의 안정성과 기능적인 문제를 검증하는 과정이다.
  • 환경 관리
    다양한 환경(테스트, 스테이징, 프로덕션 등)에서의 배포를 위해 환경설정과 관리가 필요하다. 각 환경은 코드를 실행하고 테스트하는 데 필요한 자원과 설정을 제공한다.
  • 자동화된 배포
    릴리스 파이프라인을 통해 자동화된 배포 작업을 수행한다. 이는 테스트를 통과한 코드를 실제 서비스 환경에 배포하는 것을 의미한다. 배포는 자동화되며, 롤백이나 오류 처리 기능도 포함될 수 있다.

'CS' 카테고리의 다른 글

HTTP  (0) 2023.06.26
네트워크의 간단한 개념  (0) 2023.06.08
알고리즘  (0) 2023.06.07
2진법  (0) 2023.06.07
불리언대수와 드모르간의 법칙  (0) 2023.06.03

댓글