배경
향수 추천 서비스를 개발하면서 수동 배포를 사용했다. 인간 젠킨스라고 불리며 push 할 때마다 sh파일을 실행시켜서 빌드를 하면서 여간 불편한 게 아니었다. 다음 프로젝트는 반드시 CI CD를 사용해보자 결심했고 애니메이션 추천 서비스에서 젠킨스를 사용했다.
CI CD
젠킨스를 하기 전 CI와 CD에 대해서 간단히 짚고 넘어가자
CI란 무엇인가?
지속적 통합이라는 뜻으로 여러 명이 하나의 코드에 대해서 수정을 진행해도 지속적으로 통합하면서 관리할 수 있음을 의미한다.
CI가 있기 전엔 Merge Day라는 날짜를 정해서 개발자들이 모여서 별도로 합치는 작업을 했다. CI를 사용한다면 기능을 잘게잘게 쪼개서 코드 작성이 완료될 때마다 이를 병합할 수 있다.
CD란 무엇인가?
지속적 배포라는 뜻으로 빌드의 결과물을 프로덕션으로 릴리스 하는 작업을 자동화하는 것을 의미한다. CD를 하지 않는다면 배포를 할 떄마다 sh파일을 서버에 추가하고 실행해야 한다.
개발자가 CI/CD tool에 코드를 푸시하면 tool에서 테스트와 빌드를 수행한 후 이상이 있다면 개발자에게 알려주고 없다면 빌드를 수행한 뒤 배포한다.
CI와 CD가 헷갈릴 수 있는데 간단하게 설명하면 CI는 테스트와 빌드까지를 포함한 것이고 CD는 CI에 배포를 추가한 것이다.
왜 Jenkins인가?
대표적인 CI, CD툴로는 Jenkins와 Travis CI가 있다.
Travis CI 장점
Travis CI는 깃 헙과 연동하기 쉽고 (깃 헙에서 인수했다.) 설정이 매우 간단해서 빠르게 시작할 수 있다.
Travis CI 단점
상업적으로 이용하려면 요금을 내야 한다. 그리고 젠킨스에 비해서 플러그인이 적다.
Jenkins 장점
플러그인 종류가 많고 레퍼런스도 많다. 또한 구글 트렌드 지표로 검색했을 때 Jenkins가 Travis CI보다 압도적으로 검색량이 많다. 이 말인즉슨 굉장히 많은 곳에서 사용하고 있다.
Jenkins 단점
플러그인이 많아서 시작하기 어렵고 이 때문에 커스터마이징이 어렵다.
호스팅을 직접 해야 해서 서버 운영 및 관리 비용이 발생한다.
나의 선택
위 두 가지를 비교했을 때 Jenkins를 선택했다. 가장 큰 이유는 많은 사람들이 사용하는 것이고, 두 번째로 서버 비용은 부트캠프에서 제공하는 EC2 서버가 있기 때문에 추가적인 비용이 발생하지 않아서다.
도입 후기
기술의 발전은 실로 놀랍다. 이제 develop 브랜치에 푸시만 하면 자동으로 배포가 완료된다. 그동안 팀원이 소스파일을 수정해서 배포를 요청할 때 하고 있던 작업이 있으면 배포 작업을 바로 해주기 어려웠는데 Jenkins를 사용하니 그런 문제가 싹~ 사라졌다.
다만 배포 도중에 접속이 불가능한 문제들이 있어서 다음번 프로젝트는 무중단 배포를 해봐야겠다.
참조