[CI/CD란?] CTO가 알려주는 실전 CI/CD 구축 노하우
현대 소프트웨어 개발 환경에서는 빠르게 변화하는 시장 요구에 대응하기 위해 소프트웨어 배포 주기를 단축하고, 품질을 유지하면서 효율성을 극대화할 방법이 필요합니다.
이를 위해 ‘CI/CD(지속적 통합 및 지속적 배포)’가 필수적인 요소로 자리 잡았는데요. 대한민국 대표 IT 프리랜서 플랫폼 이랜서에서 CI/CD란 무엇인지, 이를 구축하기 위한 도구에는 무엇이 있는지, 그리고 어떤 방식으로 구축해 나갈 수 있는지 알아보겠습니다.
CI/CD란?
CI(Continuous Integration), 지속적 통합
CI는 Continuous Integration의 약자로, ‘개발자가 코드를 공유 저장소에 자주 통합(merge)’하는 프로세스를 의미합니다. 이 과정에서 자동화된 빌드와 테스트가 실행되어, 코드 변경이 기존 코드에 미치는 영향을 빠르게 확인할 수 있습니다.
프로젝트 진행 시 여러 개발자가 동시에 다양한 기능을 구현하다 보면, A 개발자가 만든 기능이 B 개발자의 결과에 오류를 일으키는 일이 빈번하게 발생합니다.
각 개발자마다 구현 방식이 다르기 때문에 이러한 충돌이 생기게 되고, 개발 시간 낭비와 일정 지연으로 이어집니다. 모든 개발자가 서로의 생각을 완전히 공유할 수 있다면 이러한 충돌을 방지할 수 있겠지만, 현실적으로는 거의 불가능에 가깝습니다. CI는 이러한 문제를 시스템적으로 해결합니다.
CI는 코드 변경이 발생할 때마다 자동으로 테스트를 수행하여 빌드 실패와 버그를 조기에 발견할 수 있도록 돕습니다. A 개발자의 코드 변경으로 인해 B 개발자의 기능에 오류가 발생했다면, CI 덕분에 이를 조기에 인식하고 문제를 신속히 해결할 수 있습니다. 이를 통해 통합 과정에서 발생할 수 있는 충돌을 최소화하고 개발팀의 효율성을 높일 수 있습니다.
CD(Continuous Delivery), 지속적 배포
CD는 Continuous Delivery 또는 Continuous Deployment의 약자로, CI 후에 코드가 프로덕션 환경에 자동으로 배포될 수 있도록 준비하는 프로세스입니다. 이는 코드 변경이 수동 개입 없이도 안전하게 배포될 수 있도록 보장합니다.
CI만 사용하는 경우, 코드를 자주 통합하더라도 배포 과정이 수동적이고 느려 새로운 기능이나 버그 수정을 신속하게 사용자에게 전달하기 어려운 문제가 있습니다. 이로 인해 배포 주기가 길어져 시장 변화에 빠르게 대응하지 못하게 되죠.
CD는 CI를 통해 테스트가 완료된 코드를 즉시 프로덕션에 반영함으로써, 이러한 문제를 시스템적으로 해결합니다. 이로 인해 오래 걸리던 배포 주기가 단축되어, 새로운 기능을 더 빠르게 제공하면서 동시에 소프트웨어 품질을 향상시키고, 비즈니스 가치를 더 빠르게 실현할 수 있게 되었습니다.
개발자가 코드를 변경하면 CI가 자동으로 테스트하고, 문제가 없으면 CD가 검증된 코드를 프로덕션에 반영합니다. 이는 한 방향으로 이어진 긴 파이프라인처럼 효율적으로 작동합니다.
CI/CD 파이프라인(Pipeline)
CI/CD가 구축된 환경에서는 개발자가 코드를 병합하는 단계부터 서비스에 배포하는 단계까지 순차적으로 진행됩니다. 그래서 흔히 CI/CD 구축을 파이프라인 설계라고 부릅니다. CI/CD 개발도구마다 설정이나 약간의 기능적 차이가 있지만, 일반적으로 아래의 흐름으로 파이프라인을 설계합니다.
- 빌드 단계: 소스 코드를 컴파일하고, 필요한 라이브러리를 다운로드하며, 애플리케이션을 패키징 합니다.
- 테스트 단계: 유닛 테스트, 통합 테스트, 기능 테스트 등을 실행하여 코드의 품질을 검증합니다.
- 배포 단계: 테스트가 통과된 코드를 스테이징 환경이나 프로덕션 환경에 배포합니다. 여기에는 Docker 이미지 생성 및 배포, Kubernetes 클러스터에 배포 등이 포함될 수 있습니다.
- 모니터링 및 피드백 단계: 배포된 애플리케이션의 성능과 안정성을 모니터링하고, 로그 및 사용자 피드백을 수집합니다. 이를 통해 발생한 문제를 빠르게 해결할 수 있습니다.
CI/CD 파이프라인의 각 단계를 통과하며 테스트와 배포가 시스템적으로 자동화됩니다. 이를 통해 개발자들은 서로의 코드를 빠르게 확인하여 버그의 가능성을 줄일 수 있어 코드 품질 향상을 이루어냅니다. 또한 새로운 기능과 버그 수정을 신속하게 사용자에게 제공할 수 있게 되어 배포가 자동화됩니다.
이러한 CI/CD의 강점은 개발자와 운영 팀간의 협업을 통해 소프트웨어 개발과 배포의 품질을 극대화하는 DevOps의 목표에 부합하기에 2000년대 DevOps의 빠른 성장과 함께 다양한 CI/CD 전문 개발도구들이 개발되고 있습니다.
* DevOps의 특징과 사용방법이 궁금하신 분들은 아래 링크를 확인하세요.
▶️ DevOps의 비밀, DevOps를 사용하는 이유
가장 대표적으로 사용되는 CI/CD 전문 개발도구를 알아보겠습니다.
CI/CD 개발도구
CI/CD 개발 도구는 다양하게 존재하는데요. 오늘은 그중 세 가지 주요 도구를 소개하려고 합니다. 서버에 설치하여 사용하는 ‘Jenkins CI/CD’, 형상 관리 프로그램 Git을 통해 쉽게 사용할 수 있는 ‘GitLab CI/CD’, 그리고 클라우드 기반으로 파이프라인을 설계하는 ‘AWS CI/CD’ 이렇게 3가지인데요. 각 CI/CD 도구의 특징을 살펴보겠습니다.
Jenkins CI/CD
Jenkins는 대표적인 오픈 소스 CI/CD 도구로, Java Runtime Environment에서 동작하는 서버 설치형 CI/CD 프로그램입니다. 사용자는 이를 서버에 직접 설치하여 자신만의 CI/CD 환경을 구성할 수 있습니다.
Jenkins는 2011년에 출시되어, 이후 소개할 다른 CI/CD 도구들에 비해 상당히 오랜 역사를 가지고 있습니다. 그만큼 다양한 자료와 활발한 사용자 커뮤니티의 지원을 받을 수 있습니다.
Jenkins는 다양한 플러그인을 지원하여, 사용자가 필요에 따라 AWS 배포, 테스트, Docker 빌드 등 다양한 기능을 추가할 수 있는 확장성과 유연성이 큰 장점입니다. 그러나 이러한 유연성은 동시에 진입 장벽이 되기도 합니다.
Jenkins는 배포에 필요한 리소스에 접근하기 위해 여러 중요한 정보(AWS 토큰, Git 액세스 토큰, SSH 키 등)를 저장해야 하는데, 이를 위한 Credentials Plugin도 직접 설정해야 합니다. Git 소스 코드 접근을 관리하는 Git Plugin, 컴포넌트 빌드를 위한 Docker Plugin, 그리고 파이프라인 설계 기능인 Pipeline Plugin도 모두 플러그인으로 제공되며, 필요한 기능을 직접 설치하여 사용해야 합니다.
Jenkins와 비슷하게 플랫폼 설정을 통해 사용할 수 있는 CI/CD 도구로는 Travis CI/CD와 Circle CI/CD가 있습니다. 프로젝트 내에서 Jenkins의 확장성과 유연성을 충분히 활용할 수 있는 인력이 있다면, Jenkins는 좋은 선택지가 될 수 있습니다.
GitLab CI/CD
개발자가 Remote Repository에 코드를 올리면(code push) CI 프로그램이 빌드와 테스트를 진행합니다. 이 때문에 CI는 기본적으로 형상관리 프로그램과 밀접하게 연관되어 있습니다. ‘GitLab CI/CD’는 대표적인 Remote Repository 중 하나인 GitLab이 제공하는 CI/CD입니다.
GitLab은 소스 코드 관리(Git), 이슈 추적, 코드 리뷰를 제공하는 Remote Repository 플랫폼입니다. GitLab CI/CD는 GitLab의 코드 변경을 자동으로 트리거 하여 빌드, 테스트, 배포 과정을 수행합니다. 이를 통해 DevOps 프로세스를 통합적으로 관리할 수 있는 환경을 제공합니다.
GitLab CI/CD의 특징 중 하나는 YAML 파일을 사용하여 파이프라인을 정의할 수 있다는 점입니다. YAML 파일 편집은 복잡한 빌드 및 배포 프로세스를 비교적 간단하게 설정할 수 있으며, 다양한 환경에 맞춰 커스터마이징이 가능합니다.
또한 마켓 플레이스에서 기작성된 워크플로우를 다운로드하여 쉽게 사용할 수 있어, YAML로 작성된 파이프라인의 각 단계에서 발생하는 결과를 GitLab에서 쉽게 확인할 수 있습니다.
CI의 주축이 되는 GitLab이 제공하는 서비스라는 점과 쉬운 사용법으로 많은 사용자들이 GitLab CI/CD를 이용하고 있습니다.
유사하게 Remote Repository 플랫폼에서 제공하는 CI/CD 개발도구로는 ‘GitHub Actions’가 있습니다. 자사의 프로젝트가 GitLab이나 GitHub의 Remote Repository를 이용하고 있다면 이러한 Git CI/CD를 이용하여 간편하게 CI/CD를 구축할 수 있습니다.
AWS CI/CD
AWS CI/CD는 ‘아마존 웹 서비스(AWS)’에서 제공하는 클라우드 기반 CI/CD 솔루션입니다. AWS는 다양한 개발 도구와 서비스를 통합해 사용자가 소프트웨어 개발 및 배포 프로세스를 간소화할 수 있도록 지원합니다. AWS CI/CD 서비스를 통해 개발자는 코드 변경 사항을 즉시 배포할 수 있으며, 이는 애플리케이션의 신뢰성과 속도를 크게 향상시킵니다.
AWS CI/CD의 주요 구성 요소에는 AWS CodeCommit(소스 코드 저장소), AWS CodeBuild(빌드 서비스), AWS CodeDeploy(배포 서비스), 그리고 AWS CodePipeline(파이프라인 관리)가 포함됩니다. 이러한 서비스들을 조합하여 사용자 맞춤형 CI/CD 파이프라인을 구축할 수 있습니다. 특히 AWS CodePipeline은 다양한 AWS 서비스와의 통합을 통해 자동화된 배포 프로세스를 제공하여 개발자의 생산성을 높입니다.
AWS CI/CD의 장점은 클라우드 환경에서 제공되는 유연성과 확장성입니다. 사용자는 필요에 따라 리소스를 조정할 수 있으며, 높은 가용성과 내구성을 제공합니다. 또한, AWS의 보안 및 인증 기능을 활용해 안전한 개발 환경을 유지할 수 있습니다. 유사한 클라우드 CI/CD 도구로는 Azure CI/CD와 GCP CI/CD가 있습니다. 만약 자사의 프로젝트가 AWS, Azure, GCP와 같은 클라우드 환경에서 제공된다면, 해당 클라우드의 CI/CD 서비스를 사용하는 것이 유리합니다.
CI/CD 개발도구를 설치형(Jenkins CI/CD), Git형(GitLab CI/CD), 클라우드형(AWS CI/CD)으로 분류하여 각각의 특징에 대해 알아봤습니다. 공식적이진 않지만 이해를 돕기 위해 나눠보았습니.
이렇게 3가지로 분류된 CI/CD를 어떤 프로젝트에 어떻게 사용하면 좋을까요? CI/CD 구축 가이드를 통해 어떤 상황에 어떤 개발도구를 사용하는 것이 효과적인지 알아보겠습니다.
CI/CD 구축 가이드
프로젝트 규모에 따라 필요한 리소스와 관리 방식이 달라지며, 팀의 기술 스택은 사용 가능한 도구와 방법론에 영향을 줍니다. 이럴 때 프로젝트 규모, 팀의 기술 스택, 예산 및 비용을 기준으로 프로젝트의 범위와 목표를 설정하면 보다 효과적이고 현실적인 CI/CD 구축 전략을 수립할 수 있습니다.
* 필요한 인력을 계산하는 노하우를 알고싶다면, ‘맨 먼스 산정’ 방법을 확인해보세요.
▶️ 맨먼스(man month) 산정, 앱 개발 시 필요한 인력 계산 노하우
1) 프로젝트 규모에 따라
- 소규모 : 간단한 CI/CD 툴을 사용하여 빠르게 설정 가능. 예를 들어, GitHub Actions나 Travis CI와 같은 간단한 도구를 사용해도 충분히 효과적입니다.
- 중규모 : 좀 더 확장 가능한 툴이 필요합니다. Jenkins나 GitLab CI/CD와 같은 도구를 사용하여 자동화와 통합을 강화할 수 있습니다.
- 대규모 : 복잡한 파이프라인이 필요할 수 있습니다. AWS CodePipeline이나 Azure DevOps와 같은 클라우드 기반 솔루션을 통해 대규모 배포와 관리가 가능합니다.
2) 팀의 기술 스택에 따라
- 프로그래밍 언어와 프레임워크: 팀이 사용하는 언어와 프레임워크에 맞는 도구를 선택해야 합니다. 예를 들어, Java 기반 프로젝트라면 Jenkins가 유리할 수 있고, NodeJS 기반 프로젝트라면 Github Actions가 적합할 수 있습니다.
- 도구와 서비스: 팀이 이미 사용 중인 도구와 통합 가능한 CI/CD 툴을 선택합니다. 형상관리 프로그램으로 Git을 사용하고 있다면 GitLab CI/CD를, 클라우드 서비스를 사용하고 있다면 AWS CodePipeline 또는 Azure DevOps, GCP DevOps를 고려할 수 있습니다.
3) 예산 및 비용에 따라
- 무료 도구: 소규모 팀이나 예산이 제한된 경우 무료 도구를 사용할 수 있습니다. GitHub Actions, Travis CI, Jenkins는 기본적인 사용이 무료입니다.
- 유료 도구: 더 높은 확장성과 전문적인 지원이 필요하다면 유료 도구를 고려할 수 있습니다. AWS CodePipeline, Azure DevOps, GCP DevOps 등은 유료지만, 다양한 기능과 지원을 제공합니다.
소프트웨어 개발과 배포를 빠르게 자동화하여
개발과 운영 효율성을 극대화하는 CI/CD
오늘날 빠르게 변화하는 IT 환경에서 CI/CD는 소프트웨어 개발의 핵심 전략으로 자리 잡았습니다. CI/CD가 없는 팀은 기능을 개발하고, 빌드하고, 테스트하여 2주에 걸쳐 1개의 빌드를 내놓지만, CI/CD를 도입한 팀은 하루에 100개의 빌드도 배포할 수 있습니다.
이는 빌드, 테스트, 배포의 자동화를 넘어, 기업이 시장의 요구에 신속하게 반응하고 경쟁력을 유지할 수 있음을 의미합니다. 시장에서 경쟁 우위를 확보하려면 CI/CD 구축은 필수적입니다. 이랜서에서 알려드리는 CI/CD 구축 가이드를 참고하고 빠른 개발과 배포 속도로 시장 변화에 신속히 대응하세요!
효율적인 배포와 데이터 처리를 도와주는 핵심 개발 콘텐츠 TOP 3
▶️ [Apache Kafka] 카프카로 대용량 트래픽을 다루는 비결
▶️ Prisma란? 기업들의 사용 사례부터 적용 방법까지의 사용 종합 가이드
성공적인 DB 관리를 위한 실무에 필요한 SQL 콘텐츠 TOP 3
▶️ PostgreSQL의 차별화된 기능과 MySQL과의 차이
▶️ [MongoDB란?] 네카라배가 MongoDB를 사용하는 이유
▶️ SQL 이란? 정의부터 특징까지 SQL을 사용하는 이유를 알려드립니다!
프로젝트와 IT 프리랜서의 완벽한 매칭.
대한민국 No.1 IT 인재 매칭 플랫폼 이랜서
이랜서는 25년의 노하우와 데이터를 바탕으로 IT 전문가와 프로젝트를 연결하는 IT 인재 매칭 플랫폼입니다. IT 프리랜서의 전문성과 협업 능력까지 철저히 검증한 매칭 서비스를 통해 약 80,000건 이상의 프로젝트에 IT 프리랜서를 매칭하며, 98%의 프로젝트 재의뢰율을 기록하고 있습니다.
25년간 축적된 노하우와 데이터를 기반으로하는 맞춤형 매칭 서비스
[1.5억 개의 사용자 데이터] / [350만 개의 프리랜서 평가 데이터]
이랜서는 기업에 프로젝트에게는 가장 적합한 IT 프리랜서를, IT 프리랜서에게는 최적합 IT 프로젝트를 24시간 이내에 연결해주는 IT 인재 매칭 플랫폼입니다.
이랜서는 프로젝트와 IT 프리랜서가 최상의 시너지를 발휘할 수 있도록 25년간 약 1.5억 개의 사용자 데이터와 350만 개의 프리랜서 평가 데이터를 쌓아왔습니다.
IT 프리랜서와 프로젝트의 완벽한 만남, 이랜서가 이루어드립니다.
이랜서는 25년의 노하우와 데이터를 활용해 프리랜서에게는 가장 적합한 프로젝트를 기업에게는 프로젝트에 적합하고 검증된 프리랜서를 매칭합니다.대한민국 No.1 IT 인재 매칭 플랫폼에서 IT 프로젝트와 IT 프리랜서를 찾아보세요.