Github Actions의 의존성 캐싱을 통한 서버 배포속도 향상

많은 분이 CI/CD 속도에 많은 골머리를 앓고 있을 거로 생각합니다. 핏펫에서도 느린 빌드 시간으로 인해 많은 골머리를 앓고 있었습니다. 느린 빌드는 개발자의 피로도를 증가시키게 되고 기다리는 시간이 증가하게 되어 개발하는 속도에도 영향을 미쳐 악순환을 반복하게 됩니다.

서버의 규모가 점점 커지게 되면서 눈덩이처럼 문제가 커져만 갔습니다. 규모가 커져 속도는 더욱 느려졌고 보다 많아진 개발자분들이 불편함을 호소하게 되었습니다.

예를 들어 5분 정도의 배포 시간이 걸린다고 가정합니다. 하루에 30번 배포를 진행한다고 했을 때 대략 150분이 소요됩니다. 단순히 배포만 하는 데 있어 2시간이 넘는 시간을 쏟게 됩니다.

위와 같은 개발자가 겪고 있는 악순환을 제거 제거하기 속도 개선을 진행하고자 하였습니다.

TL;DR

Github Actions의 종속성 캐싱을 통하여 빌드속도 향상

테스트 환경

저희 서버와 비슷한 환경을 구축하기 위해 테스트 서버를 구축하였습니다.

현재는 AWS ECS로 제공되고 있습니다. ECS는 정말 간단하고 쉽게 Container Orchestration을 제공할 수 있는 서비스로서 빠르게 서버를 제공할 수 있는 좋은 서비스입니다.

전체적으로 간단한 Java 코드를 생성 후 Terraform으로 서버 환경 구축 후 GitHub Actions로 배포하는 구조를 만들어 보았습니다.

모든 코드는 아래 Github를 통해 확인 가능합니다.

https://github.com/b100to/blog-test

Architecture

테스트 프로젝트 생성

  • Terraform
  • AWS ECS Fargate
  • Java11 — Gradle
  • Git Actions

IaC, Terraform을 통한 ECS 테스트 환경 구성

테라폼을 통하여 간단하게 테스트 환경을 구성하였습니다.

Terraform Code

version.tf

data.tf

networks.tf

main.tf

Java DockeFile

간단히 Intelli를 통하여 많이들 사용하시는 Gradle 빌드 도구를 이용하여 Java HelloWorld를 생성하였습니다.

이후 Dockerfile을 이용하여 Dockerizing 작업을 진행하였습니다.

Dockerfile

Github Actions를 통하여 AWS ECS CI/CD 속도 향상 시키기.

Github Actions는 Workflow가 매번 새로 셋업이 됩니다. 그로 인해 로컬과 달리 캐시 지원을 할 수 있도록 세팅을 해줘야 합니다.
로컬에서 작업하는 것과 같이 캐시를 사용하려면 Github의 cache Action을 사용해야 합니다. 이 Action은 고유키를 이용하여 캐시를 식별하고 가져옵니다.

사용 예시

deploy_test.yml

Github Actions Cache 사용 유무 속도 차이

Gradle Build

55s15s

Docker Build & Push

30s → 27s

테스트 환경에선 크게 속도 차이를 느낄 수 없지만, 실질적으로 실 서버에 적용했을 때 약 2배 정도의 차이를 보여주었습니다.

개발자분들이 느끼는 불편함이 이전보다 줄어들었습니다. 또한 배포에 부담감을 덜 수 있게 되었습니다. 이 글을 통해 저희와 같이 CI/CD 속도로 고민하시는 분들에게 도움이 되었기를 기대합니다.

감사합니다.

written by Anton (Jonghwa Baek)

email: jh.baek@fitpet.co.kr

--

--

Love podcasts or audiobooks? Learn on the go with our new app.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store