-
배포란?
CI/CD를 알기 전에 배포라는 개념부터 짚고 넘어가겠다.
배포(Deployment)는 소프트웨어나 어플리케이션을 실제 운영 환경에 설치하고 실행 가능한 상태로 전환하는 과정을 의미한다.
개발된 소프트웨어를 사용자나 고객이 접근할 수 있는 환경에 배치하여 사용할 수 있도록 하는 것이 배포이다❗️여기서 "실행 가능한 상태로 전환하는 과정" 이 컴파일과 빌드이다.
컴파일
- 내가 짠 소스 코드를 기계어로 변환하는 과정이다. 주로 프로그래밍 언어에 따라 해당 언어의 컴파일러를 사용하여 수행된다.
빌드
- 컴파일된 코드를 소프트웨어를 실행 가능한 형태로 변환하는 과정이다. 빌드 단계에서는 컴파일 이외에도 링크, 패키징, 정적 분석 등의 작업이 수행될 수 있다.
CI/CD를 사용하는 이유
이처럼 소프트웨어 배포는 개발된 소프트웨어를 사용자가 실제로 이용할 수 있도록 하는 과정으로, 이를 위해 코드 작성, 수정, 빌드, 테스트, 그리고 배포까지의 일련의 작업이 필요하다.
그러나 이러한 작업들은 상당한 시간과 노력을 소모할 수 있다. 이 시간을 단축하고 개발자가 보다 효과적으로 개발에 집중할 수 있도록 도와주는 대표적인 방법 중 하나가 CI/CD 파이프라인이다
CI/CD란
CI/CD는 약어로, 몇 가지의 다른 의미를 가지고 있다. CI/CD의 "CI"는 개발자를 위한 자동화 프로세스인 지속적인 통합(Continuous Integration)을 의미한다.
CI를 성공적으로 구현할 경우 애플리케이션에 대한 새로운 코드 변경 사항이 정기적으로 빌드 및 테스트되어 공유 리포지토리에 통합되므로 여러 명의 개발자가 동시에 애플리케이션 개발과 관련된 코드 작업을 할 경우 서로 충돌할 수 있는 문제를 해결할 수 있다.
CI/CD의 "CD"는 지속적인 서비스 제공(Continuous Delivery) 및/또는 지속적인 배포(Continuous Deployment)를 의미하며 이 두 용어는 상호 교환적으로 사용된다. 두 가지 의미 모두 파이프라인의 추가 단계에 대한 자동화를 뜻하지만 때로는 얼마나 많은 자동화가 이루어지고 있는지를 설명하기 위해 별도로 사용되기도 한다.
CI : Continuous Integration(지속적인 통합)
여러 개발자가 작성하거나 수정한 소스를 지속적으로 통합하고 테스트하는 것을 의미. 만약 CI를 성공적으로 구현할 경우, 애플리케이션에 대한 새로운 코드 변경 사항이 정기적으로 빌드 및 테스트되어 공유 레파지토리에 통합된다, 따라서 여러명의 개발자가 동시에 애플리케이션 개발과 관련된 코드 작업을 할 경우 서로 충돌할 수 있는 문제를 해결해 개발 생산성 향상에 도움이 된다.
지속적 통합의 실행은 소스/버전 관리 시스템에 대한 변경 사항을 정기적으로 커밋하여 모든 사람에게 동일 작업 기반을 제공하는 것으로 시작한다. 커밋할 때마다 빌드와 일련의 자동 테스트가 이루어져 동작을 확인하고 변경으로 인해 문제가 생기는 부분이 없도록 보장하기 때문에 코드의 결함이나 문제점을 빠르게 발견하고 수정할 수 있다.
소프트웨어 개발 프로젝트가 분석,설계 -> 코드 -> 테스트 -> 배포 사이클을 도는데 이 싸이클을 짧은 주기로 빡빡 올려서 빠르게 자동화 시키고 빠르게 개선을 하자는 컨셉
CD : Continuous Delivery(지속적인 서비스 제공)
개발자들이 애플리케이션에 적용한 변경 사항이 버그 테스트를 거쳐 레파지토리에 자동으로 업로드되는 것을 의미,운영팀이 보다 빠르고 손쉽게 애플리케이션을 프로덕션으로 배포가 가능하고, 이는 개발팀과 비즈니스팀 간의 커뮤니케이션 부족 문제를 해결해준다, Continuous Delivery는 최소한의 노력으로 새로운 코드를 배포하는 것을 목표로 한다.
CD : Continuous Deployment(지속적인 배포)
개발자의 변경 사항을 레파지토리에서 고객이 사용 가능한 프로덕션 환경까지 자동으로 릴리즈하는 것을 의미, 이는 애플리케이션 제공을 수동으로 하는 운영팀의 프로세스 과부하를 해결한다, Continuous Deployment는 파이프라인에 배포 단계를 자동화 함으로 지속적인 제공이 가진 장점을 활용한다.
한마디로 Continuous Delivery는 코드부터 개발환경까지는 자동으로 가게 하고 그 다음에 운영환경으로 가기전에 수동으로 버튼을 누를 수 있게 해주는 것을 뜻하고
Continuous Deployment 아에 한 번에 운영환경까지 보내버리는 것을 뜻한다참고
- https://seosh817.tistory.com/104
- https://www.redhat.com/ko/topics/devops/what-is-ci-cd
- https://jud00.tistory.com/entry/CICD란-무엇일까
- https://itholic.github.io/qa-cicd/
- https://tecoble.techcourse.co.kr/post/2021-08-14-ci-cd/
- https://velog.io/@leejungho9/CICD