2022. 10. 25. 18:32ㆍDevOps
CI/CD
CI/CD는 Continuous Integration(CI)와 Continuous Delivery/Deployment(CD)를 통합해서 부르는 용어다. CI/CD는 개발 과정에서 필요한 빌드, 테스트, 배포 등의 과정을 자동화한다. CI/CD 자동화를 통해서 개발자들은 코드를 자동으로 테스트하고 배포할 수 있고 이를 통해 효율적인 작업과, 더 빠르고 더 자주 배포를 진행할 수 있게 된다.
CI
Continous Integration은 코드를 지속적으로 통합해나가는 것을 의미한다. 일반적으로 코드의 통합은 GItHub의 PR을 통해서 진행할 수 있기에 CI 과정에서 도대체 무엇을 하는 건자 의아할 수 있다. 여기서 말하는 코드의 통합은 단순히 코드와 코드를 합치는 것뿐만이 아니라 코드를 테스트하고 유효한지 검사하는 확인을 포함한다.
코드를 통합할 때 가장 중요하고 걱정되는 부분은 “머지 후에 제대로 돌아갈까?”이다. 이런 걱정과 의문을 매번 사람이 다 확인하는 것이 아니라 CI 과정에서 테스트를 실행하고 코드가 유효한지 검사하고 만약 문제가 발생했을 경우 즉각적으로 피드백을 통해서 개발자가 문제를 확인하고 수정할 수 있게 만들어준다.
CD
Continuous Deployment는 CI 과정을 통해서 성공적으로 통합된 코드들을 실제 사용자가 사용하고 있는 Production 환경에 배포하는 것을 의미한다. CD는 Continous Deployment와 Delivery 두 의미로 모두 사용되는데 Continuous Delivery는 개발환경의 배포까지 자동화된 것을 의미하며, Continous Deployment는 실제 사용자에게 제공되는 Production 환경까지의 배포를 자동화한 것을 의미한다.
CI/CD 플랫폼의 종류
CI/CD는 일련의 과정을 처리하는 CI/CD 파이프라인을 구축함으로서 자동화한다. 개발자들은 이러한 파이프라인을 구축하고 모니터링하기 위해서 이를 위한 CI/CD 플랫폼을 사용하는데 CI/CD 플랫폼의 종류를 구분하자면 크게 설치형과 클라우드형으로 나눌 수 있다.
CI/CD 파이프라인 또한 하나의 프로그램이므로 프로그램을 설계해두면 이를 실행할 컴퓨터가 필요하다. 설치형은 파이프라인을 구축하는 개발자가 직접 특정 컴퓨터에 CI/CD 플랫폼을 설치해서 활용하는 방법이다. 대표적인 설치형 CI/CD 플랫폼으로는 Jenkins가 있다.
반대로 클라우드형같은 경우에는 CI/CD 플랫폼을 운영할 컴퓨터를 개발자가 직접 관리할 필요 없이 서비스 제공자가 클라우드에서 모두 운영해주는 형태이다. 클라우드형 CI/CD 플랫폼을 이용하면 별도의 컴퓨팅 자원에 대한 관리 없이 CI/CD 파이프라인의 구축에만 신경 쓸 수 있다. 그치만 컴퓨터에 직접 접근할 수 없고 플랫폼에서 제공해주는 수준까지만 할 수 있기에 세부적인 조정이 불가능하다는 단점이 있다. 대표적인 클라우드형 CI/CD 플랫폼의 예시로는 Travis CI, GitHub Actions 등이 있다.
CI/CD가 각광받는 이유
현재 어느정도 규모가 있는 개발팀의 경우에는 CI/CD를 구축하는 것이 보편적이다. 사실 CI/CD는 장점만 있는 것은 아니다. CI/CD를 구축하고 운영하기 위해서는 이를 구축하고 관리하기 위한 노력도 필요하며, CI/CD 플랫폼, 서버를 사용해야 하기에 개발자가 직접 배포 과정을 진행하는 것보다 비용도 많이 든다는 단점이 있다. 이런 점에도 불구하고 CI/CD를 구축하는 쪽이 더 효율적이기 때문에 많은 개발팀이 CI/CD를 구축하는 것이다.
소프트웨어는 하드웨어에 비해 상대적으로 변경하기가 쉽고, 기업에서는 항상 유저의 피드백을 통해서 프로덕트를 더 좋은 방향으로, 더 빨리, 더 자주 개선하고자 한다. 이런 상황에서 개발자가 직접 수동으로 배포를 하는 과정에 리소스를 쏟기보다 프로덕트의 개발 및 개선 과정에 더 많은 리소스를 투입하는 것이 효율적이라고 판단했다.
또, 현재 IT업계에서 개발자의 몸값은 비싸다. 과거에는 하드웨어가 개발자의 몸값에 비해서 상대적으로 비쌌기에 하드웨어를 효율화하기 위해서 개발자들이 노력했다면 현대에는 기술의 발전으로 인해 하드웨어가 상대적으로 싸졌기에 비싼 인력인 개발자의 공수를 더 투입하는 것보다 하드웨어의 사양을 증대시키거나, 필요한 PaaS 서비스들을 활용해서 개발자들이 핵심 가치를 창출하는 데 집중시키는 방향으로 산업이 발전하고 있다.
CI/CD는 이러한 상황에 맞춰서 그 효율이 입증되어서 각광받고 있는 것이다.
참고하기 좋은 관련 자료
https://www.redhat.com/ko/topics/devops/what-is-ci-cd
CI/CD(지속적 통합/지속적 제공): 개념, 방법, 장점, 구현 과정
CI/CD는 애플리케이션의 통합 및 테스트부터 제공 및 배포까지 전체 라이프사이클에서 지속적인 자동화와 모니터링을 제공합니다. 개념, 차이점, 학습방법(인강)을 보세요.
www.redhat.com
https://unity.com/kr/solutions/what-is-ci-cd
CI/CD
CI/CD(지속적 통합/지속적 제공 및 배포)에는 저장소에서 이루어지는 코드 관련 변경 사항을 하루에 여러 차례 통합하는 작업이 포함됩니다. 자세히 읽고 CI/CD 복잡성에 대해 알아보세요.
unity.com
'DevOps' 카테고리의 다른 글
트렁크 기반 개발(Trunk-based development) 개념 정리 (0) | 2022.12.14 |
---|---|
애자일 소프트웨어 개발(Agile software development) 개념 정리 (0) | 2022.12.12 |
단일 저장소(Monorepo)에 대한 개념 정리 (0) | 2022.12.11 |
Firebase란? - Firestore, Cloud Functions, Hosting (0) | 2022.11.27 |
서버(Server)와 클라우드 컴퓨팅(Cloud Computing) (0) | 2022.09.26 |