이번 사이드 프로젝트를 준비하면서 모르는 개념들이 상당히 많다는 것을 알게 되었다.
그래서 그러한 개념들을 공부할 겸 하나씩 정리해 보려고 한다.
Background
빠르게 변화하는 시대에 시장과 고객의 요구에 빠르게 반응하면서 제품을 출시하는 것은 쉽지 않다.
이러한 변화에 빠르게 대응하기 위한 개발 프로세스가 CI / CD이다.
이게 무슨 말이냐.
우리는 애플리케이션을 만들어 내기 위해서 다양한 프로세스를 거치게 되는데, 이것에 관한 여러 모델들이 존재한다.
이런 것들을 개발 프로세스 모델이라고 부르는데 CI/CD 는 개발 프로세스 모델 중 하나이다.
참고하면 좋은 사이트: 개발 프로세스의 발전
What is it?
만약 당신 속한 조직에서 애플리케이션을 하나 개발했다고 가정하자.
이 애플리케이션은 수 많은 기능을 가지고 있어서 규모가 상당하다.
그렇다면, 당신이 코드를 수정하고 테스트를 거친 후 빌드를 하고 배포를 하는데만 많은 시간이 걸릴 것이다.
하지만, 당신만 여러 사람이 이런 과정을 거치다 보면 수정본을 하나로 합쳐서 배포 까지의 주기가 굉장이 길어질 것이다.
이렇게 된다면 시장과 고객의 요구를 빠르게 반영하기 힘들 것이다.
이러한 문제를 해결하기 위해 CI/CD가 등장하였다.
CI/CD 는 애플리케이션 개발 단계를 자동화하여, 애플리케이션을 더욱 짧은 주기로 고객에게 제공하는 방법이다.
자동화? 이건 또 무슨 말이냐.
우리가 개발을 하고 만든 애플리케이션을 배포하기 위해선, 보통 개발 - 테스트 - 빌드 - 배포 이러한 많은 과정을 거치게 된다.
하지만 이러한 과정을 나 대신 누군가 해준다면, 우리는 개발에 조금 더 많은 시간을 투자할 수 있을 것이다.
+
Build : 원격 코드 저장소(e.g. github repository)로 부터 코드를 가져와 유닛 테스트 후 빌드하는 단계.
Unit Test : 소스 코드의 특정 모듈이 의도된 대로 정확히 작동하는지 검증하는 절차이다.
CI (Continuous Integration, 지속적인 통합)
CI는 사전적 정의로는 개발자를 위한 자동화 프로세스인 지속적인 통합(Continuous Integration)을 의미한다.
쉽게 생각하자면, 배포를 하기전 준비단계이며, 잦은 코드의 병합을 통해 버그 발생률을 줄이고 배포 과정을 자동화 한다고 생각할 수 있을 것 같다.
좋은 CI를 하기 위해선 다음과 같은 규칙이 지켜져야 한다.
- 코드 변경사항을 주기적으로 빈번하게 통합(merge)해야 한다.
- 작은 단위로 나누어서 개발 및 통합하는 것이 중요함.
- 빈번한 코드의 commit - merge 를 통해 모든 사람에게 동일한 작업 기반을 제공하는 것이 중요하다.
- 통합을 위한 단계(빌드, 테스트, merge)의 자동화.
- merge - 빌드 - 테스트 - 오류 보고와 같은 과정들이 자동화가 되어야 함.
- 다음과 같은 부분들을 체크해 볼 수 있음.
- 현재 코드가 테스트를 모두 통과하는가.
- 현재 코드가 lint 규칙이나 여러 규칙을 통과하는가.
- 현재 코드에 버그는 없는가.
- 현재 코드가 빌드는 잘 되는가.
- 장점
- 버그 수정 용이.
- 문제점을 빠르게 발견.
- 개발 생산성 향상.
- 코드의 퀄리티 개선.
CD (Continuous Delivery, 지속적인 서비스 제공)
CD에는 2가지가 있는데, 서로 연관이 있고 섞어서 사용하기도 해서 비슷하다고 한다.
CD(Continuous Delivery)의 사전적 정의로는 반복적인 작업을 자동화한 CI과정을 거친 소스코드를 원격 코드 저장소에 자동으로 반영하는 단계를 의미한다.
CI과정을 통해 주기적으로 통합(merge)된 소스코드는 CD과정에서 배포 준비(Release preparing)과정을 거치게 된다.
이 과정을 거친 소스코드는 정상적인지 문제가 없는지 검사를 거친 후 배포(Release deployment)과정으로 넘어가게 된다.
여기서 소스코드의 검사를 하고 개발자나 검증팀이 수동적으로 배포하는 과정을 CD(Continuous Delivery)라고 한다.
+
Release: 서비스나 기능을 사용자가 사용 할 수 있게끔 만드는 것, 출시하는 것
Deploy: 소프트웨어를 하나의 환겨에서 다른 환경으로 옮기는 것, 배포하는 것
참고하면 좋은 사이트: 배포와 출시의 차이, release 의미, release 관리 단계
CD (Continuous Deployment, 지속적인 배포)
CD(Continuous Deploymeny)는 CI/CD의 마지막 단계로 모든 테스트를 마친 코드를 원격 코드 저장소에 자동으로 반영하는 단계를 의미한다.
CD(Continuous Deploymeny)는 위 CD(Continuous Delivery)의 과정에서, 개발자나 검증팀이 수동적으로 배포를 하지 않고 배포 준비(Release preparing)과정을 거치자 마자 자동으로 배포(Release deployment)과정으로 넘어가게 하는 것을 의미한다.
즉, CD(Continuous Delivery)와 CD(ContinuousDeploymeny)는 배포 과정이 수동이냐 자동이냐에 따라 구별된다.
CI/CD Tools
- Github Actions
- Buildkite
- Jenkins
- GitLab CI/CD
- 등등..
참고한 사이트
'Programming' 카테고리의 다른 글
내가 생각하는 프로젝트 규모에 따른 프론트 기술스택 선정기준 (0) | 2024.08.24 |
---|---|
[Webflow] Scroll into view 애니메이션이 한 번 밖에 실행이 안될때 (0) | 2024.07.13 |
[AWS EC2] 프론트를 배포해 둔 인스턴스의 용량이 가득 찬다면 (2) | 2024.07.12 |
Vue 프로젝트 투입 하루 전 읽어볼 글 (0) | 2024.03.21 |
간단한 프로젝트에서 쓰기 좋은 Git Branch (Git Workflow) 전략 (1) | 2023.12.20 |