회사에서 프론트엔드 개발 환경에 대해 고민하고 구축해볼 기회가 생겼다. 그러던 중에 팀원들 전체에 도움이 될 수 있는 배포 자동화, CI/CD에 대해 공부하게 되었다. 해당 개념에 대해 알아보고 이해하는 시간을 가져보자.
어쩌다 배포 자동화, CI/CD가 생기게 된 것일까? 반복되고 지루한 절차들은 자동화를 하고 싶다. 보통 배포하는 과정은 고정적이고 변경된 코드를 적용하기 위한 잦은 배포는 생각보다 시간을 많이 소비할 수 있다. 즉 개발자의 리소스가 비효율적으로 활용되기 때문에 배포 자동화 시스템이 필요하다.
배포 자동화 시스템에서의 CI/CD
CI(Continuous Integration, 지속적 통합)
CI/CD의 'CI'는 개발자를 위한 자동화 프로세스인 지속적 통합(Continuous Integration)을 의미한다.
코드는 지속적으로 변경, 추가, 삭제 등의 과정을 거친다. 이처럼 개발자는 가능한 한 자주 어플리케이션의 변경 사항을 메인 브랜치에 머지(병합)하게 된다. 그래야 큰 버그가 생기기전에 작은 버그를 디버깅 함으로써 문제를 좀 더 쉽게 해결할 수 있다.
이 과정을 자동화하여 어플리케이션에 대한 새로운 코드 변경 사항이 정기적으로 빌드 및 테스트되어 공유 저장소에 통합되게 하는 것이 지속적 통합(Continuous Integration)이다. 이렇게 하면 여러 명의 개발자가 같은 프로젝트 개발을 할 때 관련된 코드 작업의 충돌 문제를 해결할 수 있다. 또한 기록을 남김으로써 내 일의 진행 속도나 정도를 팀원에게 알릴 수 있다.
CD(Continuous Deployment, 지속적 배포)
CI/CD의 'CD'는 지속적 전달(Continuous Delivery) 또는 지속적 배포(Continuous Deployment)를 의미한다. 이 두 용어는 상호 교환적으로 사용되는데 두 가지 의미 모두 파이프라인의 추가 단계에 대한 자동화를 뜻하지만 때로는 얼마나 많은 자동화가 이루어지고 있는지를 설명하기 위해 별도로 사용되기도 한다.
지속적 전달은 앱에 적용한 변경 사항이 버그 테스트를 거쳐 저장소(예: 깃허브)에 자동으로 업로드 되는 것을 뜻한다. 지속적 전달은 최소한의 노력으로 새로운 코드를 배포하는 것을 목표로 한다.
지속적 배포는 한단계 더 나아가 변경 사항을 저장소에서 실제 사용이 가능한 프로덕션 환경까지 자동으로 릴리스하는 것을 의미한다. 이 과정까지 자동화함으로써 지속적인 제공이 가진 장점을 활용한다.
이러한 CI/CD는 지속적 통합 및 지속적 제공의 구축 사례만을 지칭할 때도 있고, 위 개념 3가지 모두를 의미할 수도 있다. 따라서 CI/CD는 파이프라인으로 표현되는 실제 과정을 의미하며 어플리케이션 개발에 지속적인 자동화 및 모니터링을 추가하는 것을 의미한다.
CI/CD 파이프라인의 요소
CI/CD 파이프라인의 핵심 개념은 *파이프라인(pipeline)의 단계 사이에 수동적 단계나 수동적인 변경이 필요없는 자동화(automation)이다. *휴먼에러(human error)가 발생할 수 있는 지루하고 반복적인 작업을 자동화함으로써 효율성을 높이고 올바른 결과물을 생성한다.
- 빌드(Build) - 애플리케이션을 컴파일하는 단계
- 테스트(Test) - 코드를 테스트하는 단계. 이 단계를 자동화하여 효율을 높일 수 있다
- 릴리스(Release) - 애플리케이션을 저장소에 제공하는 단계
- 배포(Deploy) - 코드를 프로덕션에 배포하는 단계
배포 자동화 도구로는 Jenkins, Amplify Console 등이 있다. 이 중 AWS 서비스인 Amplify Console을 사용해보려고 한다. 공부한 내용을 바탕으로 실제 사용해보고, 해당 서비스는 어떤 이점이 있는지 알아봐야겠다.
*휴먼 에러(human error) - 인적 오류라고도 불리는 휴먼에러는 부주의로 인한 부적절한 결과물을 내는 것을 의미한다. 즉 인간의 실수, 부주의를 뜻한다.
*파이프라인(pipeline) - 한 데이터 처리 단계의 출력이 다음 단계의 입력으로 이어지는 형태로 연결된 구조를 가리킨다.
참고
CI/CD(지속적 통합/지속적 제공): 개념, 방법, 장점, 구현 과정 - Red Hat
Continuous integration vs. continuous delivery vs. continuous deployment - ATLASSIAN CI/CD
'Web' 카테고리의 다른 글
URI, URL 그리고 URN 이해하기 (0) | 2022.12.25 |
---|---|
IE로 접속 시 알림창(alert) 띄우기 (0) | 2022.04.29 |
Image Lazy Loading 기법으로 웹 성능 최적화하기 (0) | 2021.10.30 |
CSR과 SSR 이해하기 (2) | 2021.10.15 |
HTTP 이해하기 (0) | 2021.09.13 |