아래로 당겨서 새로고침

CI/CD란 무엇인가?

date
Mar 12, 2023
thumbnail
flowchartTN.png
gsc
Done
public
public
slug
what-is-ci-cd
author
tags
DevOps
summary
DevOps 엔지니어의 핵심 업무
type
Post
updatedAt
Jan 15, 2025 06:24 AM

Introdution

개발자라면 CI/CD라는 말을 들어본 경험이 있을 것이다. CI/CD란 무엇인지 그리고 어떻게 활용하고 장/단점은 무엇인지 간단하게 살펴보도록 하자.

CI/CD 란?

notion image
CI/CD는 소프트웨어 개발과정에서 품질과 속도를 향상시키기 위한 방법론이다. 이를 통해 소프트웨어를 보다 빠르고 안정적으로 개발, 배포할 수 있다.

CI (Continuous Integration)

CI는 지속적인 통합을 의미한다. 코드 변경사항을 지속적으로 통합하고 빌드하며, 이를 자동화하여 높은 품질의 소프트웨어를 만든다. 이를 위해서는 소스코드 버전 관리 시스템(Git 등)과 CI 도구(Jenkins, Travis CI, CircleCI, GitLab CI/CD 등)가 필요하다.

CD (Continuous Delivery/Deployment)

CD는 지속적인 배포를 의미한다. CI와 마찬가지로 자동화된 프로세스를 통해 빠르게 배포하는 것이 특징이다. CD는 Continuous Delivery와 Continuous Deployment로 나뉘어진다. Continuous Delivery는 빌드와 테스트를 통과한 코드를 수동으로 배포하는 것이고, Continuous Deployment는 빌드와 테스트를 통과한 코드를 자동으로 배포하는 것이다.
 

CI,CD 장/단점

CI의 장점

  • 빠른 피드백과 오류 검출 CI는 지속적으로 코드를 빌드하고 테스트하기 때문에 오류가 발생했을 때 빠르게 파악할 수 있다.
  • 개발과정에서 문제점을 빠르게 파악하여 수정 가능 CI를 통해 버그나 오류를 빠르게 발견하고 수정할 수 있기 때문에 코드 품질이 높아진다.
  • 높은 코드 품질과 안정성 CI를 통해 빌드된 코드는 테스트를 통해 검증되었기 때문에 높은 품질과 안정성을 보장할 수 있다.

CD의 장점

  • 빠른 속도로 배포 가능 CD를 통해 빠르게 배포할 수 있기 때문에 개발자와 사용자 모두에게 이점이 있다.
  • 개발자와 운영자 사이의 협업 강화 CD를 통해 개발자와 운영자 간의 협업이 강화된다.
  • 사용자 요구사항에 빠르게 대응 가능 CD를 통해 코드 변경사항을 빠르게 반영할 수 있기 때문에 사용자 요구사항에 빠르게 대응할 수 있다.
 

단점

CI/CD는 높은 품질과 빠른 배포를 위한 필수적인 방법론이지만, 다음과 같은 단점도 존재한다.
  • 자동화의 어려움 CI/CD를 구현하기 위해서는 빌드, 테스트, 배포 등의 프로세스를 자동화해야 한다. 이를 위해서는 다양한 도구와 기술에 대한 이해와 경험이 필요하며, 구성 및 유지보수가 쉽지 않다.
  • 초기 구축 비용의 증가 CI/CD를 구축하기 위해서는 여러 도구와 인프라 자원이 필요하다. 이를 위해서는 초기 구축 비용이 증가할 수 있다.
  • 보안 문제 CI/CD를 구현할 때, 보안에 관한 이슈가 발생할 수 있다. CI/CD를 구현하면서 발생하는 취약점을 파악하고 보완하는 등의 보안 대책이 필요하다.

CI/CD의 구성요소

notion image
CI/CD는 크게 빌드, 테스트, 배포 단계로 구성된다.

빌드(Build)

빌드는 소스코드를 컴파일하고 실행 가능한 바이너리 파일로 만드는 단계이다. 빌드는 소스코드 관리 시스템에서 코드 변경사항이 발생하면 자동으로 실행되며, 빌드된 결과물은 다음 단계인 테스트 단계로 전달된다.

테스트(Test)

테스트는 빌드된 소프트웨어를 자동화된 테스트를 통해 검증하는 단계이다. 테스트는 수동으로 수행될 수도 있지만, 대부분의 경우 자동화된 테스트 도구를 사용한다. 테스트는 다양한 종류가 있으며, 테스트 종류에 따라 다양한 도구를 사용한다.

배포(Deployment)

배포는 테스트를 통과한 소프트웨어를 자동으로 배포하는 단계이다. 배포는 수동으로 수행될 수도 있지만, 대부분의 경우 자동화된 배포 도구를 사용한다. 배포는 다양한 환경에서 이루어질 수 있으며, 이를 위해 인프라 자원을 적절하게 할당하고 구성하는 작업이 필요하다.
CI/CD는 현대적인 소프트웨어 개발 방법론으로, 빠른 배포와 높은 품질을 동시에 달성할 수 있도록 도와준다. 이를 통해 소프트웨어 개발자와 운영자 간의 협업이 강화되고, 사용자 요구사항에 빠르게 대응할 수 있는 기반을 마련할 수 있다.

CI/CD를 적용하기 위한 방법

CI/CD를 적용하기 위해서는 다음과 같은 과정을 거쳐야 한다.

1. 소스코드 관리 시스템 선택

notion image
CI/CD를 적용하기 위해서는 소스코드 관리 시스템이 필요하다. 여러 시스템이 존재하지만, 대표적인 소스코드 관리 시스템으로는 Git이 있다. Git은 다양한 기능과 높은 안정성으로 인해 많은 개발자들이 사용하고 있으며, CI/CD 도구와의 연동성도 높다.

2. CI/CD 도구 선택

notion image
CI/CD를 구축하기 위해서는 CI/CD 도구가 필요하다. 대표적인 CI/CD 도구로는 Jenkins, Travis CI, CircleCI, GitLab CI/CD 등이 있다. 이들 도구는 각각의 특징과 장단점이 있으므로, 프로젝트의 성격에 맞게 선택해야 한다.

3. 빌드 스크립트 작성

빌드 스크립트는 소스코드를 컴파일하고 실행 가능한 바이너리 파일로 만드는 스크립트이다. 빌드 스크립트는 CI/CD 도구가 실행할 수 있도록 작성해야 하며, 소스코드의 특성에 맞게 작성해야 한다.

4. 테스트 스크립트 작성

테스트 스크립트는 빌드된 소프트웨어를 자동화된 테스트를 통해 검증하는 스크립트이다. 테스트 스크립트는 빌드 스크립트와 마찬가지로 CI/CD 도구가 실행할 수 있도록 작성해야 하며, 소스코드의 특성에 맞게 작성해야 한다.

5. 배포 스크립트 작성

배포 스크립트는 테스트를 통과한 소프트웨어를 자동으로 배포하는 스크립트이다. 배포 스크립트는 빌드 스크립트와 테스트 스크립트와 마찬가지로 CI/CD 도구가 실행할 수 있도록 작성해야 하며, 배포 환경에 맞게 작성해야 한다.

6. CI/CD 파이프라인 구성

빌드, 테스트, 배포 스크립트를 작성한 후에는 이들을 하나로 연결하여 CI/CD 파이프라인을 구성해야 한다. 이를 통해 소스코드 변경사항이 발생하면 자동으로 빌드, 테스트, 배포가 이루어지며, 이를 통해 빠른 피드백과 안정적인 배포를 구현할 수 있다.
CI/CD는 소프트웨어 개발과정에서 높은 품질과 빠른 배포를 구현하기 위한 필수적인 방법론이다. CI/CD를 적용하여 개발자와 운영자 간의 협업을 강화하고, 사용자 요구사항에 빠르게 대응할 수 있는 개발환경을 구축해보자.

CI/CD의 흐름의 예

notion image
CI/CD 도구인 Jenkins에서의 흐름에 대한 예시다.
  1. 개발자가 코드를 변경하고, 소스코드 관리 시스템(Git)에 변경사항을 push한다.
  1. CI 도구(Jenkins)는 Git 저장소를 주기적으로 polling하고, 변경사항을 감지한다.
  1. 변경사항이 감지되면, Jenkins는 빌드 스크립트를 실행하여 소스코드를 컴파일하고 실행 가능한 바이너리 파일로 만든다.
  1. Jenkins는 테스트 스크립트를 실행하여 빌드된 소프트웨어를 자동화된 테스트를 통해 검증한다.
  1. 테스트가 통과하면, Jenkins는 배포 스크립트를 실행하여 빌드된 소프트웨어를 자동으로 배포한다.
  1. 배포가 완료되면, 사용자는 새로운 기능을 사용할 수 있게 된다.
이렇게 CI/CD를 구축하면 개발자는 변경사항이 발생하면 빠르게 피드백을 받을 수 있고, 사용자는 빠르게 업데이트된 소프트웨어를 사용할 수 있다.
 

마무리

이러한 작업이 굳이 필요할까 싶지만 실제로 CI/CD를 적용하여 운영 시 개발 및 테스트에 소요되는 리소스를 상당히 단축시킬 수 있다. 배포가 잦은 프로젝트에서 반복되는 디버깅과 오류를 경험한다면 적용해보는 것을 추천한다.

참고

 

긴 글 읽어주셔서 감사합니다.
오탈자 및 내용 피드백은 언제나 환영합니다.

#DevOps