Munggae Project 두 번째 키워드는 바로 CI/CD(지속통합/지속배포) 입니다.
저는 CI/CD 파이프라인을 단순히 어려운 말로 정리하는 것보다 저만의 방식으로 정의를 한번 생각해보았는데,
개발자가 로컬에서 돌리던 코드에 변경사항이 생기면 그 코드를 배포 환경까지 배송시켜주는 길이라고 생각했습니다!
더 자세한 CI/CD의 근본적인 개념은 정리 하지않고 넘어가겠습니다! (ChatGpt, 다른 블로그 정리 글들에 더 자세하게 나와있습니다)
Munggae Project의 CI/CD 파이프라인 구상을 할 때 가장 중요했던 점은
"풀스택 팀원이 이해하기 쉽고 진행 상황을 공유하기" 입니다.
직접 구축하는 입장에서는 어떤 프로세스로 파이프라인이 동작 진행 중이고 결과가 어떤지 직접 찾아 보는 방법이 있겠지만
파이프라인의 가장 중요한 점은 코드의 변경 사항을 배포 환경까지 배송하는 것이고, 풀스택 팀원은 배포 환경에 내가 저장소에 올린 코드 동작과 배포 환경의 코드 동작이 일치하는가? 무슨 문제가 있다면 어떤 지점에서 발생했는가? 라는 것이 중점이 될 것입니다.
따라서 최종적으로 다음과 같은 CI/CD 파이프라인을 구상하게 되었습니다.
프로젝트에서 사용되는 깃허브 저장소에 Code Push만으로 배포까지 진행되는, 즉 GitOps 환경을 구축하려고 했습니다.
자 그렇다면 이 과정에서 사용되는 SonarCloud, Jenkins, ArgoCD의 선택 이유를 정리하자면 다음과 같습니다.
1. SonarQube
SonarQube는 소프트웨어 프로젝트의 품질을 관리하고, 코드 품질을 지속적으로 모니터링하는 데 사용되는 오픈소스 플랫폼입니다. 현재 Munggae Project의 팀원 구성 상 프론트엔드 1명, 백엔드 1명으로 나눠진 풀스택 팀원들 이었고, 짧은 시간내에 커뮤니티를 만들기 위해선 세세한 PR 리뷰가 매번 진행하기 쉽지 않을 것 이라고 생각했습니다. 그렇다면 이런 PR 리뷰의 범위를 좁힐 수 있는 방법을 찾다가 SonarQube를 통해서 코드의 품질 및 버그를 PR마다 체크해주고, 그 외의 코드의 재사용성이나 클린 코드 위주의 PR 리뷰만 하는 방향성을 갖게 된다면 선택지를 좁힌 빠른 PR 리뷰를 통한 프로젝트 진행 속도를 유지하게 될 것 이라고 생각하여 도입하게 되었습니다. 실제로 SonarQube는 다음과 같은 리뷰를 진행 해주었습니다.
2. Jenkins
Jenkins는 초기 환경 설정 및 세팅만 잘 되어준다면 대규모 프로젝트와 많은 빌드를 처리하는 데 뛰어난 성능을 발휘할 수 있습니다. Jenkins를 다양한 환경에 맞게 설정할 수 있으며, 여러 에이전트와 마스터 서버를 사용하여 빌드를 분산시킬 수 있습니다. 특히 CI 과정은 프로젝트의 크기가 커질 수록 오래 걸리기 때문에 이를 해결하기 위해 Jenkins Pipeline의 여러 에이전트 노드를 이용해서 빌드 과정을 분산시켜 CI 과정의 속도를 빠르게 하는데 매우 유용했습니다.
추가적으로 풀스택 팀원들이 CI 과정의 결과를 즉시 파악하기 위해서 Slack WebHook과 연동하여 결과를 전송하는 채널을 통해서 풀스택 팀원들이 자신이 올린 코드가 CI 과정이 잘 되었는지 확인 할 수 있었습니다.
3. ArgoCD
GitOps를 위한 마지막 조각 ArgoCD를 사용하였습니다. 쿠버네티스 환경에서 실행되는 Munggae Project를 ArgoCD는 git 레포지토리와 클러스터 동기화를 자동으로 해주기 때문에 애플리케이션을 지속적으로 자동 배포하게 해주는 매우 유용한 도구라고 판단 되어 도입하게 되었습니다. CI 과정에서 ArgoCD를 위한 manifest 레포지토리의 변경을 발동시켜서 ArgoCD가 변경된 사항을 자동으로 동기화하여 배포 환경으로 등록해주는 기능이 있으며, 잘못된 버전이 올라 갔을 때 되돌릴 수 있는 Rollback 기능까지 가지고 있는 강력한 오픈소스 도구입니다. 이 또한 위처럼 Slack을 통해 새롭게 자동 동기화 되어 CD 과정이 완료가 되면 Slack의 알림 설정을 통해서 배포 완료된 상태까지 확인 하게 세팅하였습니다.
정리하자면 모든 Munggae Project 구성원들은 새로운 코드 변경사항을 저장소에 Push 하게 된다면
1. SonarQube를 통한 1차 코드 리뷰
2. Jenkins를 통한 CI 과정 진행 및 완료시 Successful 알람
3. ArgoCD의 manifest 자동 동기화 설정을 통한 변경된 애플리케이션 배포 및 Slack의 Synced 알람
을 통하여 모든 구성원들이 CI/CD 파이프라인 과정을 알 수 있고 문제가 생긴 부분을 즉시 파악할 수 있는
강력한 CI/CD 파이프라인 구축을 완료하였습니다.
마무리 회고
단순히 파이프라인을 만든다고 해서 이어주기만 하면 되는 것이 아닌, 협업을 하는 상황이며 문제를 빨리 파악해 개선하는 방향으로 나가기 위해서 만든 파이프라인 구성을 통해서 팀원들이 매우 만족하고 빠르게 문제점을 파악하는 순간들을 보게 되었습니다.
프로젝트는 그저 혼자 만들면 끝이 아닌 "누군가와 함께하는 제작"이며 나 혼자 편하게 만들 수록 다른 팀원들이 더 무게를 짊어지고
내가 조금 고민하고 고도화 시킬 수록 다른 팀원들의 무게가 더 가벼워 지는 것이라고 생각합니다.
저는 누군가가 계속 힘들어하고 울상 짓는 것보다 원인과 이유를 찾아서 결국 마무리에 웃음 지는 그 과정이 매우 즐겁고 아름답다고 생각합니다. 이번 파이프라인 제작을 통해서 앞으로 함께하게될 다음 프로젝트, 회사 동료에게서 웃음을 이끌어내는 엔지니어가 되고 싶다고 느꼈습니다.
감사합니다!
'munggae-cloud' 카테고리의 다른 글
Munggae Project 첫 번째 키워드: 아키텍쳐 구성 (0) | 2024.12.23 |
---|