본문 바로가기
DevOps

CI/CD 란

by 앙헬디마리아 2021. 4. 27.
728x90

CI (Continuous Integration)란

여러 개발자가 작성하거나 수정한 소스를 지속적으로 통합하고 테스트하는 것을 뜻한다.

 

CD (Continuous Delivery/Deployment)란

개발, 통합, 배포, 릴리즈, 테스트를 자동화하여 지속적으로 배포하는 것을 뜻한다.

 

 

 

그래서 왜 CI/CD라는 말이 나오게 되었는가..?

 

프로그래밍을 공부하다보면 컴파일, 빌드, 배포라는 단어를 들어 보았을 것이다.

 

이 3개의 단어를 묶어서 간단한 예로 표현해 보겠다.

 

우리를 번역하는 사람이라고 생각해보자.

어느날 영문으로 된 책을 한글로 번역을 해 책을 새로 써야하는 일이 생겼다. 

 

여기서 컴파일은 일단 영문으로 된 책을 한글로 번역하는 것이다.

그리고 번역한 글을 책으로 엮는 것이 빌드라고 할 수 있다.

책으로 다엮었으면 사용자들에게 판매를 해야한다 이는 배포라고 생각하면 이해가 쉽다.

 

보통 책으로 엮는 과정까지를 빌드한다 라고 말한다.

 

이러한 과정을 통해 소스코드를 수정하고 빌드하고 배포를 하는데

배포하는 과정에서 직접 소스코드파일을 인스톨하여 .jar 혹은 .war 파일로 만들어 서버에 .jar, .war 파일을 옮기고 이를 실행시킨다.

 

만약 소스코드를 계속 수정할때마다 저런 일을 한다고 생각해보면 중간에 실수하는 일이 생길 수도 있고, 반복적인 작업에 많은 시간을 사용할 수 도 있을 것이다. 

 

이런 과정 때문에 빌드 자동화, 배포 자동화 라는 개념이 나오게 되었다. 

 

 

 Amazon Web Services

 

 

실무에서 특히 빛을 발하는데 운영중인 소스코드를 수정한다고 생각해보자.

수정한 코드를 git에 push하고, 수정된 프로젝트를 다시 인스톨(컴파일) 하여 배포해야 한다.

 

코드가 제대로 동작하는지 테스트 코드를 작성하고, 이를 수행 및 검증하는 작업도 필요하다.

 

하지만 자동화를 한다면 개발자는 수정된 코드를 git에 올리면 컴파일, 테스트, 빌드, 배포 등의 과정은 정해진 절차에 따라 특정 프로그램이 자동으로 수행한다.

 

정말 편하지 않을까 생각을 해본다.

 

 

 

위에 CI에 대해 간단히 설명하였다 근데 CI가 필요한 환경에는 어떤 조건 이 있을까?

 

 

- 다수의 개발자가 형상관리 툴을 공유하여 사용하는 환경

 

다들 형상관리툴(git, svn)을 사용해 본 경험이 있을 것이다.

지속적으로 서비스해야 하는 어플리케이션은 기능 추가를 할때 마다 commit push 등 Repository에 버전을 업데이트 하는데 대수의 개발자가 한 팀으로 작업한다면 commit, push는 엄청 쌓여 있을 것이다.

이런 환경일때, 자동화된 빌드&테스트는 원천 소스코드의 충돌 등을 방어할 수 있다.

 

 

- MSA(Micro Service Archietecture) 환경

 

MSA(yous3163.tistory.com/23?category=1015924) 는 작은 기능별로 서비스를 잘게 쪼개어 개발하는 형태를 의미한다.

MSA 환경에서는 대부분 Agile(소규모 기능 단위로 빠르게 개발 & 적용을 반복하는 개발방법론) 방법론이 적용되기 때문에 기능 추가가 매우 빈번이 발생한다. 이런 상황에서 CI의 적용은 기능 충돌 방지의 효과를 받을 수 있다.

 

이러한 CI의 핵심 목표는,
버그를 신속하게 찾아 해결하고,
소프트웨어의 품질을 개선하고,
새로운 업데이트의 검증 및 릴리즈의 시간을 단축시키는 것에 있다.


CD도 좀 더 자세히 살펴 보자

 

CD는 CI의 연장선이라고 생각하면 된다.

CI가 새로운 소스코드의 빌드, 테스트, 병합까지를 의미하였는데, CD는 개발자의 변경 사항이 레포지토리를 넘어, 고객의 프로덕션(Production) 환경까지 릴리즈 되는 것을 의미한다.

이는 서비스의 개발팀과 비즈니스팀(영업, CS팀 등) 간의 커뮤니케이션 부족 문제를 해결해 줌으로써, 배포에 이르기까지의 노력을 최소한으로 단축시켜 준다.

 


CI/CD Tool 로는 Jenkins / Travis CI / Bamboo / GitLabRunner

 

 

 

 

참조


deveric.tistory.com/106

itholic.github.io/qa-compile-build-deploy/

artist-developer.tistory.com/24

728x90

'DevOps' 카테고리의 다른 글

AWS Docker 설치/실행  (0) 2021.05.03
Docker(도커) 란 ?  (0) 2021.05.03
AWS EC2 Jenkins 설치  (0) 2021.05.02
로컬에서 젠킨스 GitHub과 연결 ( 자동빌드)  (0) 2021.04.30
젠킨스(JenKins) 란?  (0) 2021.04.29