-
CI / CD 란?프로그래밍 기초 공부 2022. 11. 11. 18:06
[ CI / CD 배경 ]
- 사용자에게 프로젝트를 배포했는데 어떠한 동작이 올바르게 동작하지 않아 문제가 발생했다고 가정
-> 개발자들에게는 비상
-> 급한 프로젝트일수록 더욱 빠르게 문제를 수정해야만 함
-> 수정 후 다시 컴파일, 빌드, 배포하는 과정을 통해 수정된 코드가 제대로 동작하는지 테스트하고 검증
-> 이 과정들은 시간도 많이 걸리고 실수하기도 쉬움
-> 수정된 코드에 문제가 다시 생기면 또 다시 과정을 반복해야함
-> 이런 반복 과정을 개발자가 아닌 누군가 자동으로 해주면 좋지 않을까라는 생각에서 CI/CD가 생겨남
[ CI ]
- Continuous Integration 약자이고, 지속적인 통합을 의미
- 어플리케이션의 새로운 코드 변경 사항이 정기적으로 빌드 및 테스트 되어공유 레포지토리에 통합히는 것을 의미
- 간단히 요약하면 빌드/테스트 자동화 과정
- CI를 성공적으로 구현할 경우
-> 애플리케이션에 대한 새로운 코드 변경사항이 정기적으로 빌드 및 테스트되어 공유 리포지토리에 통합
->여러 명의 개발자가 동시에 애플리케이션 개발과 관련된 코드 작업을 할 경우
-> 서로 충돌할 수 있는 문제를 해결할 수 있음 - 지속적 통합의 실행은 소스/버전 관리 시스템에 대한 변경 사항을 정기적으로 커밋하여 모든 사람에게 동일 작업 기반을 제공하는 것으로 시작
- 개발자가 구현한 코드를 기존 코드와 병합
- 병합된 코드가 올바르게 동작하고 빌드되는지 검증
- 테스트 결과 문제가 있다면 수정하고 다시 1로 돌아감
- 문제가 없다면 배포를 진행
[ CI가 필요한 환경 ]
- 다수의 개발자가 형상관리 툴을 공유하여 사용하는 환경
- 개발자는 형상관리 툴(Git, SVN 등)을 사용함
- 지속적으로 서비스해야 하는 어플리케이션이나 현재 개발 중인 어플리케이션은 기능 추가 시마다
commit 등을 날려 레포지토리에 버전 업데이트를 함 - 다수의 개발자가 한 팀으로 작업할 경우, 이 공유 레포지토리에 수많은 commit들이 쌓이게 됨
- 그럴 때마다, 기능별로 빌드/테스트/병합까지 하려면 상당히 번거로울 것
-> 자동화된 빌드/테스트는 원천 소스코드의 충돌 등을 방어하는 Benefit을 제공할 수 있음
- MSA(Micro Service Archietecture) 환경
- 최근 IT 업계에 붐처럼 떠오르고 있는 아키텍처 모델
- 기존의 어플리케이션이 모든 기능을 포함하는 하나의 거대한 서비스이었다면,
MSA는 작은 기능별로 서비스를 잘게 쪼개어 개발하는 형태를 의미 - MSA 환경에서는 대부분 Agile(소규모 기능 단위로 빠르게 개발 & 적용을 반복하는 개발방법론) 방법론이 적용되기 때문에, 기능 추가가 매우 빈번하게 발생하게 됨
-> 그러한 상황에서 CI의 적용은 기능 충돌 방지 등의 Benefit을 제공할 수 있음
[ CI 목표 ]
- 버그를 신속하게 찾아 해결
- 소프트웨어의 품질을 개선
- 새로운 업데이트 검증 및 릴리즈의 시간을 단축시키는 것
[ CD ]
- Continuous Delivery, Continuous Depolyment의 약자
- 지속적인 배포, 지속적인 서비스 제공 둘 다 의미
- 지속적 제공
- CI를 통해서 새로운 소스코드의 빌드와 테스트 병합까지 성공적으로 진행되었다면, 빌드와 테스트를 거쳐 github과 같은 저장소에 업로드하는 것을 의미
- 지속적 배포
- 이렇게 성공적으로 병합된 내역을 저장소뿐만 아니라 사용자가 사용할 수 있는 배포환경까지 릴리즈하는 것을 의미
- 지속적 제공
- 요약하면 CD는 개발자의 변경 사항이 레포지토리를 넘어, 고객의 프로덕션 환경까지 릴리즈 되는 것을 의미
- 서비스의 사용자는 최대한 빠른 시간 내에 최신 버전의 프로덕션을 제공받을 필요가 있음
- 이 때, 소프트웨어가 언제든지 신뢰 가능한 수준의 버전을 유지할 수 있도록 지원 하는 것이 CD
- 이는 서비스의 개발팀과 비즈니스팀(영업, CS팀 등) 간의 커뮤니케이션 부족 문제를 해결해 줌으로써,
배포에 이르기까지의 노력을 최소한으로 단축시켜 준다는 Benefit을 제공
[ DevOps 엔지니어 역할 ]
- CI/CD 자동화는 DevOps 엔지니어의 핵심 업무
- CI/CD를 위한 파이프라인을 구성하고, 이를 자동화 단계까지 끌어 올림
- 또한 중간중간 모니터링 지표를 구성하여, 개발자들의 개발 방향을 가이드
- 이를 통하여, 고객들에게 안정적이고 신뢰성 높은 서비스 프로덕션을 제공
- 서비스 제품을 개발하는 일도 중요하지만, 고객에게 안정감 있는 서비스를 배포하여 운영하는 일도 중요
- DevOps 엔지니어가 사용하는 대표적인 CI/CD툴
- Jenkins
- CircleCI
- TravisCI
- Bamboo
- Github Actions
- etc
[ CI/CD 적용 전 후 ]
CI/CD를 적용하기 전
- 개발자들이 개발하여 코드를 수정
- 각자의 feature 브랜치에 코드를 push함
- 각자의 코드를 git에 올리고 통합함
- 에러가 발생해도 어느 부분인지 모르므로 다시 어디부분에 에러가 있는지 디버깅하고 코드를 수정
- (1) ~ (4)의 과정을 반복
- 많은 시간을 할애하여 에러가 해결되었으면 배포를 시작
- 배포과정 또한, 개발자가 직접 배포과정을 거치므로 많은 시간을 소요
CI/CD를 적용 후
- 개발자들이 개발하여 feature브랜치에 코드를 push
- git push를 통해 Trigger되어 CI서버에서 알아서 Build, Test, Link를 실행하고 결과를 전송
- 개발자들은 결과를 전송받고 에러가 난 부분이 있다면 에러부분을 수정하고 코드를 master 브랜치에 merge
- master 브랜치에 코드를 merge하고 Build, Test가 정상적으로 수행이 되면 CI서버에서 알아서 Deploy 과정을 수행
'프로그래밍 기초 공부' 카테고리의 다른 글
DOM이란? (0) 2022.11.16 GraphQL이란? (1) 2022.11.14 OAuth란? (0) 2022.11.10 URL, URI란? (0) 2022.11.07 TCP, UDP란? (0) 2022.11.06 - 사용자에게 프로젝트를 배포했는데 어떠한 동작이 올바르게 동작하지 않아 문제가 발생했다고 가정