CI/CD란 무엇일까?
📝 etc

CI/CD란 무엇일까?

오늘은 CI/CD에 대해서 작성해보겠습니다.
앞으로는 글을 작성하는데 편한 글씨체로 작성할 생각입니다 :)

 

CI/CD란?

CI/CD는 개발자라면 한 번쯤은 다들 들어봤을 만한 단어일 것이다.

 

CI/CD는 애플리케이션 개발 단계부터 배포 때까지의 모든 단계를 자동화를 통해서 좀 더 효율적이고 빠르게 사용자에게 빈번히 배포할 수 있는 것을 말한다.

 

CI/CD의 개념만을 두고 보자면 자동화와 직접적으로 관련이 있지는 않다. 하지만 그럼에도 자동화라는 키워드는 CI/CD라는 단어에 거의 항상 따라붙는다. 또한 CI/CD는 DevOps 엔지니어의 핵심 업무라고 불리기도 한다.

 

 

CI (Continuous Integration)

CI (Continuous Integration)는 "지속적인 통합"이라는 의미이다.

 

애플리케이션의 버그 수정이나 새로운 코드 변경이 주기적으로 빌드 및 테스트되면서 공유되는 레파지토리에 통합(merge)되는 것을 의미한다.

 

그리고 CI는 2가지의 방법(?)이 있는데 이것들을 알아보자.

 

1. 코드 변경사항을 주기적으로 빈번하게 merge

하나의 예시를 생각해보자. 개발자들이 하나의 프로젝트를 진행하고 있으며, 형상관리 툴(git, svn 등)을 사용하고 있다.

 

또한, 그 프로젝트에 2명 이상의 개발자가 협업을 하면서 같이 개발을 같이 하고 있다.

 

그렇다면 여기서 개발자들이 빈번하게 merge하지 않고, 2일 3일 혹은 더 오랜 기간 동안 개발을 진행하다가 며칠 동안 작업한 많은 코드들을 한 번에 merge 한다면 어떻게 될까? 🤔

 

그렇다. 분명 충돌되는 많은 코드들이 생겨날 것이다. 

 

이렇게 된다면 새로운 기능의 코드를 작성하는 시간보다, 충돌하는 많은 코드들을 수정하는 데에 시간이 더 오래 걸릴 수 있다. 그리고 이는 어떤 개발자라도 원하는 상황은 아닐 것이다.

 

그렇기에, 가능한 작은 단위로 나누어서 주기적으로 빈번히 개발하고 계속해서 통합하여 나가는 것이 중요하다.

 

위의 경우에서의 흐름

1. 개발자들은 계속해서 github 등의 관리 시스템에 통합한다.
2. 통합한 코드가 제대로 동작하는지 빌드 및 테스트를 진행한다.
3. 버그가 발생하거나 하면 다음에 해야 할 목록에 정리해두고 다음날이나 버그를 해결한다.

 

2. 통합 단계의 자동화

위의 단계는 다 좋은데, "귀찮다는 단점"이 있다.

 

Build 하고 Test 하는 과정은 굳이 사람이 하지 않더라도 되는 작업이다.

 

빈번하게 통합해줄 때마다 진행해야 하는 과정이기 때문에, 한 번에 몰아서 한 번만 빌드, 테스트를 진행하는 것보다 시간이 더 오래 소모될 것이다. 

 

물론 한 번에 테스트를 해서 충돌 나거나 해서 문제가 생긴 코드들을 하나하나 다 고치는 것보다는 결과적으로 빠를지라도 당장은 귀찮고 굳이 사람이 할 필요가 없는 작업인 것이다.

 

하지만, 여기서 자동화를 사용해 준다면 어떻게 될까? github에 코드만 올리고 나머지 작업인 테스트와 빌드는 프로그램이 자동으로 해준다면?? 😮

 

이거야말로 똑같이 반복되는 귀찮은 작업을 하지 않을 수 있으며, 문제도 더 적어지는 편한 방법일 것이다.

 

이렇기 때문에 자동화라는 키워드가 CI/CD의 개념만을 보자면 직접적으로 관련이 없어도, 자동화라는 키워드가 떨어지지 않는 이유이다.

 

자동화를 사용한 이후의 흐름

1. 위와 동일하게 개발자들은 형상관리 툴(github 등)에 작업한 코드를 통합한다.
2. 빌드 및 테스트는 자동으로 진행되므로, 버그가 생기면 다음날 온 버그를 확인해서 버그를 해결한다.

 

위의 흐름을 보면 알 수 있듯, 위에서 말한 귀찮은 반복 작업은 자동화를 통해서 전부 생략되어 시간도 아끼며 복잡한 작업을 하나 덜하게 되는 걸 볼 수 있다.

 

CI의 장점

  • 코드의 검증에 들어가는 시간이 줄어든다.
  • 개발 편의성이 증가한다.
  • 항상 테스트 코드를 통과한 코드만이 레포지터리에 올라가기 때문에, 좋은 코드 퀄리티를 유지할 수 있다.

 

 

CD (Continuous Delivery)

CD는 Continuous Delivery, 지속적인 제공이라는 의미와 Continuous Deployment, 지속적인 배포라는 의미가 있다.

 

CI에서 Bulid 되고 Test 된 후에, 배포 단계에서 release 할 준비 단계를 거치고 문제가 없는지 수정할만한 것들이 없는지 개발자가 검증하는 팀이 검증을 한다.

 

그 후에 나온 결론이 "이제 사용자들에게 서비스를 제공해도 되겠다!"라고 정해져서 배포를 수동적으로 진행하는 것이 "Continuous Delivery, 지속적인 제공"이다.

 

또한, 위와 같이 배포할 준비가 되자마자 자동화를 통하여 배포를 진행하는 것을 "Continuous Deployment, 지속적인 배포"이다.

 

CD를 적용한 후의 흐름

1. CI를 적용하여 코드를 검증한다
2. 배포 환경과 비슷한 곳에서 검증을 진행한다.
3. 검증된 소프트웨어를 실제 프로덕션 환경으로 배포한다.

 

CI/CD는 어느 정도의 자동화를 하냐에 따라 조금씩 다르기 때문에, CI/CD라고 해서 모두 같은 게 아니라 회사마다 혹은 팀마다 어느 정도 다를 수 있다.

 

 

배경없는 CI:CD

 

CD의 장점

  • 개발자는 배포보다는 개발에 더욱 신경 쓸 수 있도록 도와준다.
  • 개발자가 원클릭으로 수작업 없이 빌드, 테스트, 배포까지의 자동화를 할 수 있다.

 

공부한 지식을 바탕으로 정리해서 글을 작성합니다.
다시 복습할 때 보기 위해 정리하지만, 읽으시는 분들께도 도움이 되면 좋겠네요 :)
틀린 내용이나 오타가 있으면 지적해주시면 감사하겠습니다!

 

 

 

Reference

QA CI/CD란?

엘리님 유튜브 - CI/CD 5분 개념 정리

CI/CD(지속적 통합/지속적 제공): 개념, 방법, 장점, 구현 과정