CI/CD란 무엇인가?
1. CI/CD 란 무엇이고, 왜 구축해야 하는가?
2. 구축하기 위해 필요한 비용...!?
1. CI/CD 란 무엇이고, 왜 구축해야 하는가?
CI/CD는 무엇인가? 개발자 관점에서 쉽게 얘기하자면,
CI&CD는 Continuous Integration & Continuous Deployment 또는 Continuous Delivery의 약자로, 소프트웨어 개발 및 배포 프로세스의 자동화를 위한 개념과 방법론을 의미한다.
Continuous Integration(CI)
특징: 개발자들이 작업한 코드를 지속적으로 통합하는 프로세스
- 코드 변경이 발생할 때마다 자동으로 빌드, 테스트, 정적 분석 등의 과정을 진행
- 각 개발자의 변경 사항이 실시간으로 통합되어 충돌이나 문제를 빨리 발견하고 해결할 수 있음
- 코드의 품질 향상, 버그 감소, 개발자 협업 강화 등의 이점을 제공
사용 이유
- 코드의 일관성과 품질을 유지하며, 통합 시 발생할 수 있는 문제를 조기에 감지하고 해결
- 개발자들 간의 협업을 원활하게 하고, 개발 생산성을 향상시킴
관련 서비스: Jenkins, Travis CI, CircleCI, GitLab CI/CD 등
Continuous Deployment(CD) 또는 Continuous Delivery(CD)
특징: 자동화된 프로세스를 통해 소프트웨어를 지속적으로 배포하고 운영 환경에 적용하는 것을 의미
- 빌드 및 테스트를 통과한 코드가 자동으로 운영 환경으로 배포
- 배포 과정에서의 수동 개입이 최소화되며, 자동화된 테스트와 모니터링을 통해 안정적인 배포를 실현
- 사용자에게 빠르게 새로운 기능과 업데이트를 제공
사용 이유
- 소프트웨어 개발과 배포를 지속적으로 진행하여 비용과 시간을 절감
- 빠른 피드백과 수정 사항의 신속한 반영을 통해 사용자 만족도를 높임
관련 서비스: AWS CodePipeline, Azure DevOps, GitLab CI/CD, Jenkins 등
CI&CD를 사용함으로써 개발자들은 코드 변경을 지속적으로 통합하고, 자동화된 빌드, 테스트, 배포 프로세스를 통해 품질을 유지하고 빠른 시간 내에 소프트웨어를 제공할 수 있다. 이를 통해 개발 및 배포 과정의 효율성과 신뢰성이 향상되며, 비즈니스의 민첩성과 경쟁력을 강화할 수 있다.
빌드란 소스코드를 실행 가능한 프로그램으로 만드는 과정
테스트란 만들어진 프로그램에 오류가 없는지 확인하는 절차
배포란 사용자들이 새로운 버전의 프로그램을 사용할 수 있도록 인터넷 등에 업로드하는 과정
이해하기 쉽게 게임으로 예를 들자면,
첫째, 새로운 게임을 만들 때, 코드를 작성하면 자동으로 게임을 실행해보고 오류가 없는지 확인한다(CI).
둘째, 게임에 문제가 없다면, 자동으로 새로운 버전의 게임을 인터넷에 올린다(CD).
왜 구축해야 하는가?
배포 자동화 구축을 하게 되면...
- CI/CD 프로세스가 구축이 되어 있다면 더 빠르고 정확하게 릴리즈가 가능하다.
- 선택이 아닌 필수 사항
그렇다면 왜 선택이 아닌 필수 사항이라 언급했는가?
CI/CD 파이프라인 구축 이점을 알아보자.
CI/CD 파이프라인을 구축하는 가장 큰 이점은 개발 과정의 자동화를 통해 개발 속도와 품질을 동시에 향상시킬 수 있다는 점이 있다.
코드 변경 사항이 자동으로 통합되고 테스트되며, 문제가 없을 경우 자동으로 배포된다.
이 과정에서 발생할 수 있는 실수를 최소화하고, 반복적인 작업을 자동화함으로써 개발자가 개발에 집중할 수 있게 된다.
또한, CI/CD 파이프라인을 통해 코드의 품질을 지속적으로 관리할 수 있고 자동화된 테스트는 코드의 품질을 보장하며, 지속적인 모니터링은 시스템의 안정성을 유지할 수 있다.
개발 과정에서 발생할 수 있는 다양한 문제를 신속하게 식별하고 해결할 수 있는 기능을 제공한다. 고객에게 더 안정적이고 신뢰할 수 있는 소프트웨어를 제공하는 데 중요한 역할을 한다.
출처: [F-Lab]: CI/CD 파이프라인 구축의 이점과 전략
나는 다름이 아니라, 고객에게 더 안정적이고 신뢰할 수 있는 서비스를 제공한다는 점과, 소프트웨어의 품질은 코드를 쓴 개발자가 책임져야 한다는 가치관 때문에 CI/CD를 구축하는 게 옳다고 생각했다.
2. 구축하기 위해 필요한 비용...!?
그렇다면, 구축하기 위해 필요한 것들에는 무엇이 있을까?
서비스에 알맞는 배포 플랫폼 선택하기 위해 고민을 했었는데, 그중에서도 가장 중요한 비용을 따져가며 서비스에 알맞는 CI/CD를 구축하기 위해 고민했다.
플랫폼에 따른 비용 산정
1. Github Action + AWS S3 + AWS CodeDeploy
- Github Action : 500MB 2000분 무료 / GB당 한달 기준 $5.76
- AWS S3 : GB당 $0.023
- AWS CodeDeploy : 업데이트 당 $0.02
서비스가 커질수록 비용 UP
장점: 작은 규모로 시작할 때 비용이 저렴하다.
예시: 친구와 작은 가게를 열었는데, 초기에는 손님이 적어서 매출이 적다. 그래서 작은 규모의 가게에 맞는 저렴한 임대료를 내야한다.
2. Jenkins + EC2
- Jenkins : 무료
- EC2 비용 발생 : (t2.medium) 한달 기준 약 $33.408
장점: 규모가 커져도 안정적으로 운영할 수 있다.
예시: 가게 사업이 점점 커져서 큰 건물로 이전해야 할 때, 임대료 비쌈, 큰 공간을 확보할 수 있어서 더 많은 손님을 받을 수 있음
발생비용의 최소화와 서비스를 고려하여 선택지를 2가지로 추렸다. 지금 서비스 규모에는 1, 2번 모두 괜찮을 거라고 판단되어 우선 1번 플랫폼으로 세팅을 진행하고자 했다.
즉, Github Actions + AWS EC2 + S3 + Code Deploy로 CI/CD를 구축하기로 했다.
초기에는 Github Action + AWS 서비스 조합이 저렴하지만, 점점 규모가 커지면 Jenkins + EC2 옵션이 더 좋을 수 있을 것이라 생각한다. 작은 가게에서 시작해서 사업이 커지면 큰 건물로 이전하는 것처럼, 서비스 규모에 맞춰 CI/CD 플랫폼을 선택하는 것이 중요할 것 같다.