이미 배포한 소스 코드에 새로운 API를 추가하거나 기존 API를 수정 했다면 소스 코드를 다시 빌드 및 테스트한 후 재배포해야합니다. 그런데 이는 생각보다 자주 일어나는 일입니다. 따라서 이러한 과정을 자동화 하지 않으면 그때마다 수동으로 서버에 들어가 작업해야하며, 재배포가 잦을수록 실수가 발생할 가능성도 높아집니다. 이에 소스코드를 안정적으로 빌드하고 빌드하고 배포하기 위해 CI/CD라는 자동화 방법론이 탄생했습니다.
CI/CD의 개념
CI/CD(continuos Intgration/Continos Delivery 또는 Contiuous Deployment)는 '지속적 통합/지속적 배포' 라는 의미입니다.
Continuous Integration (CI)
CI는 소스 코드의 변경사항을 자동으로 빌드 및 테스트해 통합하는 것으로 , 이를 통해 소스 코드의 품질을 높이고 빠른 시간 내에 버그를 해결할 수 있습니다.
CI는 개발자들이 코드를 공유 레포지토리에 자주 통합하는 것을 의미하는데요. 이것은 새로운 코드가 주로 기존 코드베이스와 잘 통합되는지 여부를 확인하는 것을 목표로 합니다. CI 프로세스에는 다음과 같은 단계로 진행됩니다.
- 코드 커밋: 개발자가 코드를 변경하고 이를 중앙 레포지토리에 커밋합니다.
- 자동화된 빌드: CI 도구는 새로운 코드를 가져와서 빌드합니다. 이 단계에서 코드 컴파일 및 기타 필요한 작업이 수행됩니다.
- 테스트: 빌드 후에 자동화된 테스트 스위트가 실행됩니다. 단위 테스트, 통합 테스트, 기능 테스트 등이 포함될 수 있습니다.
- 통합: 테스트가 통과하면, 새로운 코드가 기존 코드와 통합됩니다.
CI를 통해 팀은 버그를 빠르게 식별하고 수정할 수 있으며, 코드베이스가 항상 작동 가능한 상태를 유지할 수 있습니다.
Continuous Delivery (CD)
CD는 엡 애플리케이션을 지속적으로 개발하고 테스트해 언제든지 배포 가능한 상태로 유지하는 것을 말합니다. CD는 Continous Deivery'의 약자이기도 하고 'Continous Deployment'의 약자이기도 합니다.
CD는 개발된 소프트웨어를 자동화된 프로세스를 통해 실제 환경으로 배포하는 것을 의미합니다. 이것은 CI의 결과물을 더 발전시켜 사용자에게 실제로 배포 가능한 소프트웨어를 제공하는 것을 목표로 합니다. CD 프로세스에는 다음과 같은 단계로 진행됩니다.
- 배포 가능한 빌드 생성: CI가 통과한 코드를 사용하여 배포 가능한 빌드를 생성합니다.
- 환경 배포 : 자동화된 스크립트 또는 도구를 사용하여 빌드를 특정 환경(개발, 테스트, 스테이징, 프로덕션 등)에 배포합니다.
- 자동화된 테스트 및 검증 : 배포된 소프트웨어에 대해 자동화된 테스트 및 검증을 실행하여 안정성과 품질을 보장합니다.
- 자동화된 배포 : 모든 테스트가 통과하면, 소프트웨어가 자동으로 실제 환경으로 배포됩니다.
CD를 통해 팀은 사용자에게 빠르게 새로운 기능을 제공할 수 있으며, 인프라를 관리하는데 드는 부담을 줄일 수 있습니다.
Continuous Delivery/ Continuous Deployment
Continuous Delivery의 경우에는 개발된 웹 애플리케이션이 자동화된 빌드-테스트-배포 프로세스를 거쳐 언제든지 배포 가능한 상태로 유지됩니다. 이때 배포를 할지 말지는 수동으로 결정합니다. 즉 배포 결정을 해야 배포됩니다.
한편 Continuous Deployment는 Continuous Delivery에서 한 걸음 더 나아간 개념으로, 개발된 웹 애플리케이션이 실시간으로 배포되는것을 의미합니다. 수정한 웹 애플리케이션이 테스트를 통과하면 자동으로 운영 환경에 배포돼 사용자에게 제공됩니다. 이는 자동화된 배포 파이프라인이 구축돼 있기 때문에 개발자의 개입 없이도 가능한 일입니다. Continuous Deployment는 개발과 운영 사이의 경계를 완전히 없애고 빠른 피드백과 신속한 배포를 실현합니다.
CI/CD 파이프라인
소스코드를 빌드-테스트-배포 하는 과정을 거쳐 개발을 추진하는프로세스를 CI/CD 파이프라인(CI/CD pipelin)이라고 합니다. 이 과정에서 개발자는 반복적인 빌드-테스트-배포 작업을 자동화하고, 재배포 과정에서 버그를 빠르게 찾아 수정할 수 있습니다. 따라서 웹 애플리케이션의 릴리즈 사이클이 단축되고 개발자의 높은 생산성이 유지됩니다.
CI/CD 장점
- 빠른 소프트웨어 출시: CI/CD를 통해 더 빠르게 개발 및 배포할 수 있습니다.
- 품질 향상: 자동화된 테스트 및 검증을 통해 소프트웨어 품질이 향상됩니다.
- 신속한 버그 수정: CI를 통해 버그를 신속하게 식별하고 수정할 수 있습니다.
- 빈번한 피드백: 빠른 개발 사이클을 통해 피드백 루프를 더 빨리 받을 수 있습니다.
- 투자 가치 최대화: 빠른 소프트웨어 출시를 통해 투자 가치를 빠르게 실현할 수 있습니다.
CI/CD 도구
CI/CD 도구는 CI/CD 파이프라인을구축하는데 사용하는 도구로, CI를 제공하는 CI 도구, CD를 제공하는 CD 도구, 둘 다 제공하는 CI/CD 도구가 있습니다.
CI도구
대표적인 CI 도구는 젠킨스(Jenkins), 깃허브 액션(GitHub Action), 트래비스 CI(Travis CI), 서클CI(CircleCIz) 등입니다. CI 도구로는 빌드 및 테스트 작업을 자동화 하고, CD 도구와 함께 사용해 CI/CD 파이프라인을 구축합니다.
- 젠킨스 : 가장 인기있는 오픈 소스 CI 도구로, 다양한 플ㄹ그인을 제공하므로 기능을 확장할 수 있습니다.
- 깃허브 액션 : 깃허브에서 제공하는 자체 CI 도루고, 소스 코드가 변경되면 이를 감지하고 자동으로 빌드 및 테스트를 진행합니다.
- 트래브스 CI : 깃허브와 통합해 사용할 수 있는 CI 도구로, 설정이 간단하고 다양한 개발 언어와 프레임워크를 지원합니다.
- 서클CI : 클라우드 기반의 CI 도구로, 빠른 속도와 쉬운 설정, 유연한 확장성이 장점이며 도커와 통합할 수 있어 편리합니다.
CD 도구
대표적인 CD 도구는 AWS코드디플로이(Aws codeDeploy)입니다.
- AWS 코드디플로이 : AWS에서 제공하는 CD 도구로, 웹 애플리케이션의 배포를 자동화 해 개발자가 빠르고 안정적으로 배포 할 수 있습니다.
CI/CD 도구
대표적인 CI/CD도구는 깃랩 CI/CD(GitLab CI/CD) , 젠킨스 X (Jenkins X)입니다.
- 깃랩 CI/CD : 깃랩에서 제공하는 통합 CI/CD 도구로, 코드 저장소와 통합해 빌드-테스트-배포를 자동화합니다.
- 젠킨스 : 쿠버네티스 위에서 동작하는 통합 CI/CD 도구로, 클라우드 네이티브 애플리케이션의 빌드-테스트-배포를 자동화합니다.
이중에서 젠키스+AWS 코드디폴로이, 깃허브 액션 + AWS 코드디플로이 , 깃랩 CI/CD가 대중적으로 많이 사용되고 있습니다.
'CS & Network' 카테고리의 다른 글
[Network] HTTP/HTTPS 프로토콜에 관하여 (0) | 2024.08.13 |
---|---|
RESTful API란 (0) | 2024.03.19 |
JWT와 OAuth의 개념과 차이점에 대해서 (2) | 2024.03.15 |