소프티어 부트캠프 프로젝트 과정을 진행하면서 몸으로 부딪히면 구축했던 CICD의 방법에 대해 남겨보려 한다.
도입 이유
마스터님들이 강조하신 애자일.
프로젝트를 시작하기 앞서 짧은 기간 내에 성공적인 프로젝트를 위해서는 애자일한 방법의 프로젝트를 적용해 보는 것이 중요하다고 하셨다. 따라서 매주 유의미한 결과를 데모 영상으로 찍어내어야 한다는 조건 또한 주어졌다. 결국 작은 부분이라도 함께 완성된 부분을 만들어나가기 위해서는 자주 배포하는 환경이 필요했고, CICD 자동화 배포 환경을 구축하게 되었다.
백엔드 개발자로서 프로젝트를 직접 배포해 본다면 CI/CD라는 키워드는 당연히 들어봤을 거라고 생각한다.
무작정 사용하고 적용하는 것이 아닌 왜 사용할까? 조금만 생각해 보자.
CI
먼저 CI란 Continuous Integration으로 지속적인 통합을 의미한다. 혼자서 진행하는 프로젝트가 아닌 이상 많은 팀원들이 함께 기능들을 구현하고 통합하게 된다. 이 과정에서 당연하게도 충돌은 발생하게 된다.
아쉽게도 이러한 충돌을 온전히 발생하지 않도록 하는 방법은 없다. 하지만 자주 통합하여 충돌의 양을 줄이고 해결하는 시간을 줄이는 것을 최선의 목표로 둘 수 있다. 복잡하게 작성된 코드들을 다시 읽어 오류를 찾는 것보다 새로 구현하는 게 더 빠른 경험은 다 있을 것이다!!
이렇게 개발하면서 발생하는 충돌 해결의 리소스를 줄이기 위한 방법이 CI 지속적 통합의 목표라고 할 수 있다.
CD
CD란 Continuous Delivery / Deploy로 지속적인 배포를 의미한다. 두 가지의 뜻을 가지고 있지만 대게 통합해서 빌드된 파일을 전달하고, 배포하는 의미로 생각하자.
하나의 서비스를 출시하기 위해 개발을 하고 배포에 성공했다. 하지만 첫 릴리즈 된 상태에서 예상치 못한 버그가 발생할 수 있고, 요구사항이 추가로 생겨 기능 개발을 할 상황이 있을 수 있다. 즉, 서비스를 유지하고 관리하기 위해서는 한 번의 배포만으로 끝나는 경우가 드물다. 또한 서버가 하나가 아니라 분산 환경에서 존재한다면 수동으로 배포하기에는 소요되는 리소스가 많아진다.
이렇게 배포하면서 발생하는 리소스를 줄이기 위한 방법이 CD 지속적 배포의 목표라고 할 수 있다.
실제로 자동화 배포를 도입하기 전에는 머지 데이가 존재했다. 머지 데이에는 개발자들이 모여 통합하면서 기도하고, 발생하는 수많은 오류에 밤을 새웠다고 한다..! 😱
GitHub Actions
먼저 GitHub Actions에 대해 간단하게 알아보자.
깃헙 액션은 빌드, 테스트 및 배포 파이프 라인을 자동화할 수 있는 CICD 플랫폼이다. 리포지토리에 대한 모든 PR 요청을 빌드 및 테스트하거나 Merge 된 프로젝트를 배포할 수 있는 WorkFlow를 생성할 수 있다.
WorkFlows
워크 플로우는 하나 이상의 작업으로 구성된 자동화 프로세스이다.
workflow를 정의하기 위해서는 yaml 파일로 .github/workflows 위치시켜야 한다.
Events
이벤트는 workflow를 실행시키기 위한 일종의 트리거이다. yaml 파일에 정의된 트리거인 PR을 요청하거나 merge 되는 특정 이벤트의 경우에 자동으로 인식해 workflow를 동작시킨다.
Jobs
동일한 workflow에서 실행되는 일련의 작업의 단위이다. 각 단계는 순서대로 실행되거나 병렬적으로 실행될 수 있다. 각 단계는 동일한 환경에서 수행되므로 데이터들을 공유할 수 있다.
예를 들어 특정 파일을 빌드하고 테스트하는 과정에서 빌드된 파일을 테스트 과정에 사용할 수 있다.
Actions
자주 반복되는 작업들을 쉽게 사용할 수 있도록 구성된 작업을 가져와서 사용할 수 있도록 한 기능이다. 예를 들어 빌드 환경을 구성하는 일이나 SSH 접속을 위해 인증하는 일 등등 자주 사용되는 일들을 쉽게 라이브러리처럼 가져와 사용할 수 있다.
Runners
workflow가 트리거 될 때 실행되는 실행 환경이다. Ubuntu, Window, Mac OS의 가상 컴퓨터가 지원되며 해당 인스턴스에서 실제 동작이 이루어진다.
[참고 문헌]
https://docs.github.com/ko/actions
https://velog.io/@adam2/Github%EC%97%90-Action%EC%9D%B4%EB%9D%BC%EB%8A%94-%ED%83%AD%EC%9D%B4-%EC%83%9D%EA%B2%BC%EB%8B%A4..-github-Action%EC%9D%B4%EB%9E%80-3gk336pk8q
'Study' 카테고리의 다른 글
[HTTP] 쿠키와 쿠키를 삭제하는 응답 메시지 보내기 (1) | 2023.07.27 |
---|---|
HTTP Request, Response 메시지 구조 (0) | 2023.07.16 |