CI/CD

artp·2024년 9월 20일

CI/CD

목록 보기
1/9

CI/CD란?

CI/CD는 Continuous Integration(지속적인 통합)Continuous Delivery(지속적인 전달)/Continuous Deployment(지속적인 배포)의 약자로, 소프트웨어 개발 과정에서 코드의 변경 사항을 자동으로 빌드, 테스트, 배포하는 과정을 의미합니다.
간단하게 설명하면, 개발자들이 코드를 변경하거나 추가할 때마다, 이 변경 사항이 문제 없이 작동하는지 자동으로 확인하고, 문제가 없으면 자동으로 서버에 배포하는 흐름을 말합니다.

즉, CI/CD는 테스트(Test), 통합(Merge), 배포(Deploy)의 과정을 자동화하는 걸 의미합니다.

CI/CD 파이프라인 설명

CI/CD 과정은 일반적으로 다음과 같은 과정으로 진행됩니다. 이 그림은 CI/CD 파이프라인을 시각적으로 표현한 것입니다. 각 단계는 코드가 작성되고 배포되는 전체 과정을 나타내며, 자동화된 흐름을 보여줍니다.

1. Develop(개발)

  • 개발자들이 코드를 작성하는 단계입니다. 새로운 기능을 추가하거나, 버그를 수정하는 작업이 이루어집니다.

2. Commit(커밋)

  • 개발이 완료된 코드를 버전 관리 시스템(예: GitHub)에 커밋하는 단계입니다. 코드를 로컬에서 원격 저장소로 푸시하면서 버전 관리를 하게 됩니다.

3. Build(빌드)

  • 커밋된 코드가 빌드되는 단계입니다. 빌드는 프로그램이 실행될 수 있도록 필요한 파일들을 컴파일하고 준비하는 작업입니다. CI 시스템이 자동으로 빌드를 처리합니다.

4. Test(테스트)

  • 빌드가 완료된 후, 테스트가 자동으로 실행됩니다. 이 단계에서 코드가 정상적으로 작동하는지 확인하기 위해 다양한 테스트(단위 테스트, 통합 테스트 등)를 거칩니다.
    • 만약 테스트에서 문제가 발견되면, 빨간색으로 표시된 것처럼 파이프라인이 중단되고 오류가 보고됩니다. 문제를 해결한 후 다시 커밋하면 새로운 빌드와 테스트가 실행됩니다.
    • 테스트가 성공하면 다음 단계로 진행됩니다.

5. Deploy(배포)

  • 테스트가 모두 통과하면, 자동으로 배포 단계로 넘어갑니다. 코드가 실제 운영 환경에 배포되고, 사용자들이 새로운 기능을 사용할 수 있게 됩니다.

Continuous Delivery/Deployment 차이

Continuous Delevery(지속적인 전달)

Continuous Delevery는 CI 시스템을 사용하여 배포 전 단계까지는 자동화되어 있지만, 최종 배포는 사람이 직접 확인 후 배포하게 됩니다.

Continuous Deployment(지속적인 배포)

Continuous Deployment는 CI 시스템을 사용하여 자동으로 빌드와 테스트를 진행할 뿐만 아니라 테스트를 모두 통과하면 자동으로 운영 서버에 배포됩니다. 배포 과정이 완전히 자동화되어 개발자 개입을 최소화하여 빠르고 빈번한 기능 수정 및 업데이트 배포가 가능합니다.

CI/CD를 사용하는 이유 #1

서비스를 운영하면서 빈번하게 코드를 수정하게 되고, 새로운 기능을 추가할 때마다 코드를 작성하고, GitHub 같은 곳에 커밋하고 병합한 후, 최종적으로 배포를 해야 합니다. 배포할 때는 AWS EC2 같은 서버에 직접 접속해서, 새로운 코드를 내려받고 실행하는 작업을 수동으로 해야 하는데, 이 과정을 매번 반복하는 것은 매우 번거롭고 귀찮습니다.

CI/CD는 이런 반복적인 배포 과정을 자동화하는 도구입니다. 예를 들어, 코드 수정이 있을 때마다 자동으로 서버에 배포되도록 설정해두면, 사람이 직접 서버에 접속해서 작업하지 않아도 새로운 코드가 배포되기 때문에 훨씬 편리합니다.

CI/CD를 사용하는 이유 #2

1. 빠른 피드백과 코드 품질 개선

코드가 변경될 때마다 자동으로 빌드와 테스트가 진행되므로, 문제를 빠르게 발견하고 해결할 수 있습니다. 이를 통해 코드 품질을 유지하면서도 신속한 피드백을 제공받을 수 있어 개발자가 오류를 빨리 수정할 수 있습니다.

2. 개발 속도 향상

코드 병합과 배포 과정이 자동화되기 때문에 수동으로 처리하는 시간을 절약할 수 있습니다. 이로 인해 팀이 더 빠르게 작업을 완료하고, 새로운 기능을 자주 배포할 수 있게 되어 개발 속도가 크게 향상됩니다.

3. 배포 자동화로 실수 방지

배포 과정이 자동화되어 수동으로 배포할 때 발생할 수 있는 실수나 설정 오류를 줄여줍니다. 이는 안정적이고 빈번한 배포가 가능하도록 도와줍니다.

4. 협업 효율성 증대

여러 개발자들이 동시에 작업할 때 코드 충돌이나 통합 문제를 미리 예방할 수 있습니다. 자동화된 테스트와 통합 과정 덕분에 팀 간 협업이 원활해집니다.

5. 사용자 경험 개선

새로운 기능과 버그 수정 사항을 빠르고 자주 사용자에게 제공할 수 있어 사용자 경험이 개선됩니다. 신속한 배포는 사용자에게 더 나은 서비스를 제공하는 데 기여합니다.

profile
donggyun_ee

0개의 댓글