본문 바로가기

Computer Science

[CS] CI/CD(Continuous Integration/Continuous Delivery)란?

728x90

 CI/CD는 Continuous Integration(CI)와 Continuous Delivery/Deployment(CD)를 통합해서 부르는 용어 입니다. CI/CD는 개발 과정에서 필요한 빌드, 테스트, 배포 등의 과정을 자동화합니다. CI/CD 자동화를 통해서 개발자들은 코드를 자동으로 테스트하고 배포할 수 있고 이를 통해 효율적인 작업과, 더 빠르고 더 자주 배포를 할 수 있게됩니다.

 

CI

 Continuous Integration(CI)은 코드를 지속적으로 통합하는 과정을 의미합니다. 이 과정은 보통 GitHub의 PR을 통해 이루어지며, 코드의 통합은 단순히 코드와 코드를 합치는 것 뿐만 아니라 코드를 테스트하고 유효성을 검증하는 작업도 포함됩니다.

 

 실제로 코드를 통합하는 것이 가장 중요한 부분이지만, 머지 후에 코드가 제대로 동작할지에 대한 걱정이 발생할 수 있습니다. 이러한 걱정과 의문을 해결하기 위해, CI 과정에서 테스트를 실행하고 코드의 유효성을 검사하며, 문제가 발생한 경우 즉각적인 피드백을 제공하여 개발자가 문제를 신속하게 해결할 수 있도록 돕습니다.

 

 따라서, CI는 코드를 지속적으로 검증하고 통합하는 작업을 수행함으로써, 소프트웨어의 품질과 안정성을 향상시키는 데 큰 역할을 합니다.

 

CD

 Continuous Deployment(CD)는 CI 과정을 통해 성공적으로 통합된 코드를 실제 사용자가 사용하는 Production 환경에 자동으로 배포하는 것을 의미합니다. CD는 종종 Continuous Delivery와 혼용되어 사용되는데, Continuous Delivery는 개발 환경의 배포까지 자동화 된 것을 의미하며, Continuous Deployment는 Production 환경까지의 배포를 자동화한 것을 의미합니다.

 

 즉, Continuous Deployment는 CI를 통해 검증된 코드가 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를 구축하려고 할까요? 그 이유는 효율입니다.

 

 소프트웨어는 하드웨어에 비해 상대적으로 변경하기가 쉽습니다. 그리고 기업에서는 항상 유저의 피드백을 통해서 프로덕트를 더 좋은 방향으로, 더 빨리, 더 자주 개선하고자 합니다. 이런 상황에서 개발자가 직접 수동으로 배포를 하는 과정에 리소스를 쏟기보다 프로덕트의 개발 및 개선 과정에 더 많은 리소스를 투입하는 것이 효율적이라고 판단하였습니다.

 

 또한, 현재 IT업계에서 개발자의 몸값은 비쌉니다. 과거에는 하드웨어가 개발자의 몸값에 비해서 상대적으로 비쌌기에 하드웨어를 효율화하기 위해서 개발자들이 노력했다면 현대에는 기술의 발전으로 인해 하드웨어가 상대적으로 싸졌기에 비싼 인력인 개발자의 공수를 더 투입하는 것 보다 하드웨어의 사양을 증대시키거나, 필요한 PaaS 서비스들을 활용해서 개발자들이 핵심 가치를 창출하는 데 집중시키는 방향으로 산업이 발전하고 있습니다. CI/CD는 이러한 상황에 맞춰서 그 효율이 입증되어서 각광받고 있는 것입니다.

 

 

출처 - 원티드 프론트엔드 프리온보딩 인턴쉽

https://pollen-port-115.notion.site/CI-CD-with-GitHub-Actions-2be7d10bb6494b55b8b12b2e86e8fa3f