CI/CD란? + Github Action을 이용해 CI/CD 구축하기

Erin A. Yoo·2022년 12월 7일
0

0. 서론(웹 어플리케이션의 배포 과정)

웹앱의 배포 과정은 크게 작업물 커밋, 빌드, 테스트, 배포의 과정으로 나뉘어져 있습니다. 우리는 이런 의문을 가질 수 있습니다.

"이렇게 짜여진 과정들을 단 한번에 해결할 수 없을까?"

이러한 의문에서 출발하여 CI/CD라는 개발 전략이 등장하였습니다. 이를 활용하면 자잘한 과정으로 나뉘어진 배포 작업을 단 한번의 커밋으로 해결할 수 있다는 이점이 있습니다. CI/CD 전략을 사용하면 커밋을 할 때 마다 따라오는 빌드, 테스트 배포 같은 반복적인 작업이 생략되기에 어플리케이션의 배포 속도가 훨씬 빨라집니다.

이제 우리는 CI/CD라는 개념이 어디서 왜 출발했는지는 알게 되었습니다. 그럼 CI/CD가 정확히 무엇인지 조금 더 알아보도록 할까요?

1. CI란?

CI는 Continuous Integration(지속적 통합)의 약자이며 소프트웨어 개발 속도를 촉진시키는 개발 전략 중 하나입니다. 개발자들이 작은 단위로 작업물을 커밋하면, 공유 레포지토리에 머지 되기 전 빌드와 테스트가 자동화 되어 실행됩니다.

한 줄로 요약하자면, 아무리 작은 단위의 커밋일지라도, 커밋을 하게 되면 새로운 빌드와 테스트가 트리거 됩니다.

CI를 적용하는 이유는 하나의 어플리케이션을 개발 할 때 다수의 개발자들이 공유 레포지토리에 커밋을 했을 경우 일어나는 충돌을 즉시 해결하기 위함입니다. 만약 자잘한 충돌이 즉시 해결되지 않는다면 충돌이 중첩되어 더 큰 충돌을 야기하고, 그로 인해 충돌을 해결하는 시간이 기하급수적으로 늘어나게 됩니다.

CI는 다수의 개발자가 공동작업을 하는 과정에서 생기는 충돌을 즉시 해결하는 데에 목표를 두고 있기 때문에 배포의 자동화 과정은 포함하지 않습니다. 배포 과정이 포함된 자동화 프로세스는 CD를 설명할 때 다루겠습니다.

2. CD란?

CD는 Continuous Delivery(지속적인 서비스 제공)와 Continuous Deployment(지속적인 배포) 두 가지를 의미합니다. 두 가지 개념은 서로 관련성이 있지만 동의어는 아닙니다. 같은 CD이지만 서로 다른 것을 의미하므로 좀 더 자세히 알아보겠습니다.

2.1 CD as Continuous Delivery

Continuous Delivery(지속적인 서비스 제공)은 개발중인 어플리케이션이 항상 배포 준비가 되었음을 의미합니다. 배포 따라서 Continuous Delivery는 앱 배포가 준비된 "상태" 입니다. 따라서 이 용어는 앱의 실질적 배포 과정은 포함 되어 있지 않으며, 실제 배포를 위해서는 추가적인 과정이 필요한 "상태" 입니다. 그리고 개발자는 Continuous Delivery를 추구함으로써 어플리케이션을 항상 배포 가능한 상태로 유지 시킬수 있음을 목표합니다.

2.2 CD as Continuous Deployment

Continuous Deployment(지속적인 배포)는 빌드, 테스트, 배포의 자동화를 의미합니다. Continuous Deployment는 CI 처럼 "개발 전략" 중 하나입니다. 만약 CI를 적용시킨 상태에서 새로운 커밋을 하고, 빌드되고, 모든 테스트를 통과한다면 배포까지 자동화되어 이루어 지는게 Continuous Deployment의 핵심 개념입니다. Continuous Delivery와 Continuous Deployment의 차이에 대해 더 정확하게 이해를 하기 위해 아래 이미지를 볼까요?

해당 이미지에서 CI에 Continuous Delivery만 적용되었을 경우, 제품을 deploy 하기 위해 메뉴얼적인 스텝을 밟아야 합니다. 왜냐하면 Continuous Delivery는 배포 전 배포 가능한 "상태"를 의미하기 때문입니다.
그러나 CI에 Continuous Deployment가 적용 되었을 경우는 제품의 배포가 자동적으로 이루어 집니다. 왜냐하면 Continuous Deployment는 커밋 이후 배포까지의 "자동화"를 의미하기 떄문입니다.

3. CI/CD는 다르지만 서로 겹쳐있는 개념이다

Continuous Integration이 잘 구축되어 있다면 Continuous Delivery의 목적을 잘 달성할 수 있고, Continuous Deployment의 바로 전 과정까지가 완성되고, 또 Continuous Delivery를 잘 유지한다면 Continuous Deployment를 적용시키는게 가능해 지는 등 CI와 CD는 조금씩 다르지만 서로에게 영향을 주는, 어떻게 보면 조금씩 겹쳐있는 개념입니다. 그러므로 용어가 조금씩은 헷갈릴 수 있습니다. 그럴때 마다 위에 제가 작성해 놓은 서로간의 차이점을 기억해 주세요! :)

4. CI/CD 파이프라인

앞서 말했듯, 웹앱의 배포 과정은 크게 작업물 커밋, 빌드, 테스트, 배포의 과정으로 나뉘어져 있습니다. 아래 이미지와 같이, CI/CD 파이프라인도 웹앱의 대략적인 배포 과정을 따릅니다. 단지 커밋만 하면 이후 과정들은 자동적으로 처리가 되기 때문에 신경 쓸 필요가 없다는 점만 빼면 말이죠.

5. Github Action을 통한 CI/CD 구축

Github Action은 깃허브 레포지토리에 존재하는 코드의 CI/CD 구축을 도와주는 기능입니다.
Github Action을 사용하기 위해서는 CI/CD 과정에서 어떤 작업을 할지 미리 정해주는 yml 파일 작성이 필요한데, 레포지토리의 Actions 탭에서 작성 할 수 있습니다.
yml파일을 처음 작성한다면 파일에서 사용되는 yaml문법이 익숙하지 않을 수 있는데, 작성법은 아래 링크를 참조해주세요.
https://www.codeproject.com/Articles/1214409/Learn-YAML-in-five-minutes

5.1 Github Action 사용 과정

  1. 레포지토리의 Actions 탭에서 New workflow를 클릭합니다.

  1. set up a workflow yourself를 클릭합니다.

  1. yml파일의 이름을 지정하고 내용을 작성합니다(yml 파일은 디폴트 브랜치에 생성됩니다. 예시에서의 디폴트 브랜치의 이름은 reference입니다).

  1. 이름과 내용을 모두 작성 뒤 start commit을 클릭해 yml파일을 커밋합니다.

  1. 커밋이 되면 레포지토리에서 Action이 실행됩니다(노란색 원은 실행중, 초록색 원은 Action이 에러없이 성공적으로 완료되었다는 뜻 입니다. 빨간색 원이 뜨면 yml파일 실행 도중 에러가 났다는 뜻 입니다.)

참조 문헌:
https://circleci.com/continuous-integration/
https://stackify.com/continuous-delivery-vs-continuous-deployment-vs-continuous-integration/

0개의 댓글