CI/CD 개념정리
CI/CD 개념 정리
CI : (Continuous Integration) 지속적인 코드 통합 CD : (Continuous Deploy) 지속적인 배포
CI 는 왜 필요할까? 한 프로젝트의 여러명의 개발자가 개발을 진행한다면, 코드의 업데이트들이 빈번하게 발생한다. 이 때 코드를 빈번히 중앙의 코드와 통합하며 관리를 해줘야 나중에 여러 코드들이 통합되었을 때 오류가 발생할 리스크가 줄어든다. 따라서 지속적이고 빈번한 코드 통합 & 코드 테스트 & 코드 빌드 테스트를 해야 안정성이 높아진다. 하지만 코드 통합 정도는 git으로 merge 하면 되는 비교적 간단한 일이지만 코드 테스트와 빌드 테스트는 귀찮은 반복 작업으로 느껴질 수 있다. 그렇기 때문에 이부분이 소홀해질 수 있고, 그렇게 되면 나중에 통합에 큰 문제가 발생할 수 있다. 이러한 문제를 간편하게 해결하기 위한 툴이 바로 CI 개념이다.
CD 는 왜 필요할까? CD의 경우 CI의 연장선으로 생각할 수 있다. 앞서 CI를 통해 수정된 코드의 테스트와 빌드가 모두 끝났다면, 이 빌드된 파일 혹은 이미지를 기존에 운영하던 서버에 지속적으로 업로드하는 것을 뜻한다. 기존 서버가 개발 서버, 운영 서버 등 2개 이상이 존재할 때 앞선 테스트가 정상적으로 끝난다면 빌드된 이미지를 테스트서버와 운영서버에 배포하여 코드의 수정이 실제 유저의 사용단계에까지 반영되는 수준으로 전체 파이프라인이 구축되는 것이다. 하지만 현실에서는 업데이트 배포에 신중하기 때문에 중간 중간 검증 단계로 사람의 개입이 들어가는 경우가 많기 때문에 모든 파이프라인이 한 큐에 자동화 되기에는 현실적인 제약이 존재한다.
How To CI/CD ? 그렇다면 앞서 배운 기술/개념들을 어떻게 구현할 수 있을까에 대해 생각해보면, 지금 시점에는 CI/CD를 구축하기 위한 다양한 툴이 존재한다. 그중에서 대표적으로 많이 사용되는 Jenkins에 대해 알아본다.
Jenkins 란? 스크립트로 각 단계마다 수행할 내용을 정의하여 파이프라인의 흐름을 생성해주는 툴
CI/CD 용어정리
-
- Terraform 이란?
- 테라폼은 인프라를 만들고 바꾸고 버전 관리하는 도구다. 테라폼 사이트에서는 테라폼이 제공하는 기능을 다음과 같이 설명하고 있다.
Infrastructure as Code Execution Plans Resource Graph Change Automation
-
- RabbitMQ 란?
- 메세지 브로커라는 뜻으로 전달받은 메세지를 전달하는 역할을 하는 소프트웨어 이는 AMQP라는 프로토콜을 기반을 만들어진 형태 이기도 하다. 따라서 AMQP에 대해 먼저 알아보겠다.
- AMQP(Advanced Message Queuing Protocol)
- client 어플리케이션과 middleware broker와의 메시지를 주고받기 위한 프로토콜이다.
- ansible이란? 테스트 환경을 구축하는데 사용되는 툴 Provision & configuration management tool python으로 개발되고 YAML이라는 언어를 통해 정의할 수 있고 json으로 통신 python Github project 중 상위 랭킹 (6위) 해커 뉴스 분석을 보면 ansible이 많이 Mention 되어지고 있음