본문 바로가기
CS/개발자필수지식

[CS] CI/CD(Continuous Integration/Delivery & Deployment)

by Johnny's 2023. 8. 24.

CI/CD(Continuous Integration/Delivery & Deployment)

개발자들이 소스 코드를 지속적으로 통합하고, 테스트하며, 배포하는 것을 의미

 

필요한 이유

혼자가 아닌 수 많은 개발자가 코드를 합치고 배포를 계속해서 시스템 없이 수동으로 한다면 여러 명의 개발자가 동시에 개발을 하게 될 것이고 서로 다른 환경에서 안되는 문제, 에러등이 발생. 이러한 문제를 해결하기 위해 CI/CD라는 개념이 도래했고 이를 쉽게 해주는 툴 등이 나옴

 

파이프라인

코드구축부터 시작해서 배포까지의 일련의 과정들을 CI/CD 파이프라인이라고 함. 총 3가지의 단계로 구성

continuous integration : 코드를 빌드하고 테스트하고 통합
continuous delivery : 해당 레퍼지토리에 릴리즈
continuous deployment : 이를 프로덕션, 즉 실제 서비스에 배포

 

파이프라인이 주는 장점은 코드 배포까지 좀 더 체계적으로 만드는 점과 테스트가 강제 됨. 파이프라인 자체내에 테스트가 있기 때문에 테스트 없으면 코드 머지 자체가 안되게 만들 수도 있기 때문

 

빌드

대표적인 예로 webpack : 여러가지 모듈들을 정적 자산으로 빌드해주는 것으로 도와주는 도구

 

테스트

테스트는 함수 등 작은 단위를 테스팅하는 단위테스트, 모듈을 통합할 때 테스트하는 통합테스트, 사용자가 서비스를 사용하는 상황을 가정해서 테스트하는 엔드 투 엔드 테스트가 대표적임
테스트를 위한 대표적인 프레임워크로는 mocha가 있음.

이외에 코드 보안 테스트도 포함

 

머지

git이나 svn을 이용해 머지를 함
작은 프로젝트 같은 경우 충돌을 최소화하기 위해 어떤 폴더는 해당 개발자만 맡는다고 할 수도 있음
충돌이라는 것은 대부분 일어나기 때문에 조금 더 작은 단위로 충돌이 일어나게 하는게 중요
한달동안 코드를 짜서 배포하는게 아니라 작은 이슈단위로 나눠서 보통 머지를 함. 그렇다고 해서 너무 아토믹하게 작은 단위로는 하지는 않고 작은 issue단위를 기반으로 머지를 하게 됨
만약 충돌시에는 서로 화면 공유하며서 합의하에 충돌을 해결하는게 제일 좋음

ex) mocha
https://github.com/mochajs/mocha/pull/4511

 

배포

배포는 그저 사용자를 위한 서비스를 배포할 수도 있다고 생각할 수 있지만 그뿐만이 아닌 내부적으로 QA엔지니어나 관리자 페이지를 위한 배포, 데이터 웨어 하우스로부터 데이터를 가공해서 백엔드개발자를 위한 배포 등을 포함

 

github action, genkins, circle ci가 유명하며 heroku를 통해 CI, CD 설정 없이 자동 가능
참고로 heroku + github action 으로 설정도 가능

 

* 참고

- CS 지식의 정석 | 디자인패턴 네트워크 운영체제 데이터베이스 자료구조 -인프런

댓글