항해 71일차 2022.03.21
서버에 기능을 추가 하려면 개발자가 로컬 PC에서 개발을 하고 테스트까지 진행한 뒤에 문제가 없을 경우 사용자가 사용할 수 있도록 수정된 코드를 실서버에 반영해야 한다.
서버에 반영을 하는 것을 "배포"라고 하고 배포(Deploy) 하기 위한 과정을 "빌드"라고 한다.
서비스에 사용자가 늘어나면서 운영하는 서버 또한 늘어난단다면 수동배포의 한계가 있을것이다. 운영하는 서버가 10대라고 하면, 10대를 모두 접속해 직접 배포할 파일을 SFTP를 통해 전달하고 서버를 종료하고 배포파일을 풀고 서버를 다시 실행시키는 작업을 10대에 진행을 해야하고 10대에 서버를 수동으로 진행하는 과정에서 배포가 누락되는 경우도 발생한다고 한다. 이런한 문제를 해결하기 위해 배포 자동화를 한다면 해결된다.
배포 자동화와 관련해서 Jenkins, Travis CI, Github Actions에 대해 알아보고 있다. Jenkins가 설치형이고 메모리를 많이 사용하기 때문에, 우리의 작은 서버에서는 구동이 어려울 것 같아 최종적으론 무설치/연동으로 진행할 수 있는 Travis CI를 해볼까 고민중이다.
CI의 장점
- 코드의 검증에 들어가는 시간이 줄어든다.
- 개발 편의성이 증가한다.
- 테스트 코드를 통과한 코드만이 레포지토리에 올라가기에 좋은 코드 퀄리티를 유지할 수 있다.
Java 기반의 오픈소스로 구성되어 있으며, CI계의 아버지라 불린다.
제일 오래된 만큼 다양한 플러그인을 지원하며, 사용자도 관련 문서도 많이 존재한다.
Build Server를 직접 구매 및 운영해야 하기 때문에 발생하는 단점이 생각보다 크게 다가오게 된다.
하나부터 열까지 전부 환경설정을 구축해야하며, 서버를 관리하는데 발생하는 비용이 낭비가 될 수 있기 때문이다.
Jenkins를 사용할 때, 각종 방화벽 작업이나 서버의 관리 및 운용등은 생각보다 많은 리소스를 요구한다.
Workflow는 Github 저장소에서 발생하는 build, test, package, release, deploy 등 다양한 이벤트를 기반으로 직접 원하는 Workflow를 만들 수 있다.