[TIL] 항해99 Day 71

woonie·2022년 3월 21일
0

TIL

목록 보기
52/64
post-custom-banner

항해 71일차 2022.03.21

배포 자동화

서버에 기능을 추가 하려면 개발자가 로컬 PC에서 개발을 하고 테스트까지 진행한 뒤에 문제가 없을 경우 사용자가 사용할 수 있도록 수정된 코드를 실서버에 반영해야 한다.
서버에 반영을 하는 것을 "배포"라고 하고 배포(Deploy) 하기 위한 과정을 "빌드"라고 한다.

서비스에 사용자가 늘어나면서 운영하는 서버 또한 늘어난단다면 수동배포의 한계가 있을것이다. 운영하는 서버가 10대라고 하면, 10대를 모두 접속해 직접 배포할 파일을 SFTP를 통해 전달하고 서버를 종료하고 배포파일을 풀고 서버를 다시 실행시키는 작업을 10대에 진행을 해야하고 10대에 서버를 수동으로 진행하는 과정에서 배포가 누락되는 경우도 발생한다고 한다. 이런한 문제를 해결하기 위해 배포 자동화를 한다면 해결된다.

배포 자동화와 관련해서 Jenkins, Travis CI, Github Actions에 대해 알아보고 있다. Jenkins가 설치형이고 메모리를 많이 사용하기 때문에, 우리의 작은 서버에서는 구동이 어려울 것 같아 최종적으론 무설치/연동으로 진행할 수 있는 Travis CI를 해볼까 고민중이다.

CI의 장점

  • 코드의 검증에 들어가는 시간이 줄어든다.
  • 개발 편의성이 증가한다.
  • 테스트 코드를 통과한 코드만이 레포지토리에 올라가기에 좋은 코드 퀄리티를 유지할 수 있다.

1. Jenkins

Java 기반의 오픈소스로 구성되어 있으며, CI계의 아버지라 불린다.
제일 오래된 만큼 다양한 플러그인을 지원하며, 사용자도 관련 문서도 많이 존재한다.
Build Server를 직접 구매 및 운영해야 하기 때문에 발생하는 단점이 생각보다 크게 다가오게 된다.
하나부터 열까지 전부 환경설정을 구축해야하며, 서버를 관리하는데 발생하는 비용이 낭비가 될 수 있기 때문이다.
Jenkins를 사용할 때, 각종 방화벽 작업이나 서버의 관리 및 운용등은 생각보다 많은 리소스를 요구한다.

장점

  • 무료
  • 다양한 IDE를 지원하며, 커스터마이징이 다양
  • 많은 사용자들을 보유하고 있고, 관련 문서가 다양
  • 호스팅을 직접해야하기 때문에 관련된 모든 부분을 관리할 수 있음

단점

  • 다양한 플러그인
  • 규모가 작은 프로젝트의 경우, 설정하는데 리소스 낭비가 발생할 수 있음
  • 호스팅을 직접해야하기 때문에 서버 운영 및 관리 비용이 발생

2. Trvais

장점

  • GitHub와의 연동
  • YML 파일을 통한 쉬운 설정
  • 다양한 래퍼런스
  • 직접 서버를 운영할 필요 없이, Travis에서 알아서 VM으로 호스팅해 줌
  • 모든 job이 독립적(서로 간의 영향을 받지 않음)

단점

  • Jenkins에 비해 플러그인의 종류가 적음

3. Github Action

Workflow는 Github 저장소에서 발생하는 build, test, package, release, deploy 등 다양한 이벤트를 기반으로 직접 원하는 Workflow를 만들 수 있다.

장점

  • github repository에서 관리
  • 오픈 소스로 쉽게 공유
  • workflow에서 actions이 독립적이기 때문에 각기 다른 환경에서 사용(컴파일, 테스트)

단점

  • 최대 20 workflows까지 가능(저장소 당)
  • 레퍼런스가 많지 않다.

팀 회의 결과 jenkins와 travis를 고민했는데, CI/CD를 처음 사용하다보니 설치형이고 환경설정이 많기에 시간적인 부담과 경험이 부족하다고 판단하여 비교적 레퍼런스도 많고 yml파일에서 설정이 가능한 travis를 사용하여 CD/CD를 구축해보기로 했다.
profile
동료들과 함께하는 개발의 중요성에 관심이 많습니다. 언제나 호기심을 갖고 꾸준히 노력하는 개발자로서 성장하고 있습니다.
post-custom-banner

0개의 댓글