-
CI/CD(Continuous Integration/Delivery & Deployment)
- 개발자가 코드를 짠 다음 해야 할 일
- 지속적으로 코드를 합치고 배포해야 하는 것을 CI/CD라고 함
CI/CD 필요성
- 혼자가 아닌 수많은 개발자가 코드를 합치고 배포를 계속해서 시스템 없이 수동으로 작업하는 경우
다음과 같은 문제가 발생- dev 서버에 누가 배포했나요? 제 환경에서 갑자기 안 되는데요?
- 이 함수 테스트 안 하고 배포했나요? 해당 부분에서 에러 뜨는 거 같아요.
파이프라인
- 코드구축부터 시작해서 배포까지의 일련의 과정들을 CI/CD 파이프라인이라고 함
- 총 3가지의 단계로 구성
- continuous integration : 코드를 빌드하고 테스트하고 합침
- continuous delivery : 해당 레퍼지토리에 릴리스
- continuous deployment : 이를 프로덕션, 즉 실제 서비스에 배포
- 파이프라인이 주는 장점은 코드배포까지 좀 더 체계적으로 만드는 점과 테스트가 강제되다는 점
- 파이프라인 자체 내에 테스트가 있기 때문에 테스트 없으면 코드 머지자체가 안되게 만들 수 있음
빌드
- 대표적인 예로 webpack이 있음
https://webpack.js.org/
webpack
webpack is a module bundler. Its main purpose is to bundle JavaScript files for usage in a browser, yet it is also capable of transforming, bundling, or packaging just about any resource or asset.
webpack.js.org
테스트
- 함수 등 작은 단위를 테스팅하는 단위테스트
- 모듈을 통합할 때 테스트하는 통합테스트
- 사용자가 서비스를 사용하는 상황을 가정해서 테스트하는 엔드투엔드테스트
- ex) mocha
머지
- git이나 svn을 이용해 머지를 함(요새는 그냥 git을 쓴다고 보면 됨)
- 작은 프로젝트 같은 경우는 충돌을 최소화하기 위해 1 폴더 1 개발자를 할 수 있지만
충돌이라는 것은 대부분 일어나기 때문에 조금 더 작은 단위로 충돌이 일어나게 하는 게 중요 - 한 달 동안 코드를 짜서 배포하는 게 아니라 작은 이슈단위로 나눠서 보통 머지를 함
(그렇다고 해서 너무 어토믹 하게 작은 단위로는 하지는 않고 작은 이슈단위를 기반으로 머지) - 만약 충돌 시에는 서로 화면공유하면서 합의하에 충돌을 해결하는 게 제일 좋음
배포
- 사용자를 위한 서비스를 배포할 수도 있다고 생각할 수 있음
- 하지만 아닌 내부적으로 QA엔지니어나 관리자페이지를 위한 배포,
데이터웨어하우스로부터 데이터를 가공해서 백엔드개발자를 위한 배포 등을 포함
툴
- github action, genkins, circle ci가 유명
- heroku를 통해 CI, CD 설정 없이 자동 가능(참고로 heroku + github action으로 설정도 가능