
부트캠프에서 하던 프로젝트를 조금씩 조금씩 기능추가하고 리펙토링 하던 도중...
은근히 빌드 시간이 거슬린다.
조금이라도 빌드 시간을 줄여보자!
develop 브랜치에 커밋 시, GitHub의 자체 호스팅 서버(GitHub-hosted runners)에서 빌드되도록 CI/CD를 구성했다.
현재 기본 서버인 default 서버와,
채팅(Web Socket)만 담당하고 있는 chat 서버를 분리해 MSA 구조로 되어 있다.

근데... 빌드 시간이 총 106초..
물론 긴 편은 아닌데, 한국인인 나한텐 은근히 걸리적 걸리는 소요시간이다.
이걸 줄여보고자 한다.
Git Action의 Cache를 이용하고자 한다.
캐시 (Cache)
(컴퓨터 과학) 데이터나 값을 미리 복사해 놓는 임시 장소
Android, Spring에서는 빌드에 gradle 파일을 사용한다.
그러니 gradle을 캐싱해야 한다.
'~/.gradle/caches' 와 '~/.gradle/wrapper'에 있는 파일들을 캐싱하면 된다.
caches 폴더: 의존성과 각종 빌드 캐시가 저장되는 공간
wrapper 폴더: 필요한 Gradle 버전을 자동으로 설치 및 실행
- name: Cache Gradle - Default (Gradle 캐시 - 디폴트)
uses: actions/cache@v3
with:
path: |
~/.gradle/default/caches
~/.gradle/default/wrapper
key: gradle-default-${{ runner.os }}-${{ hashFiles('default/**/gradle-wrapper.properties') }}
restore-keys: gradle-default-${{ runner.os }}-
캐시 값에는 두 개의 Key 값이 들어간다.
key: 정확히 일치해야만 캐시 적중됨
restore-keys: 최근에 생성된 가장 가까운 일치하는 캐시를 다운로드
gradle-wrapper 파일을 통해 Hash값을 만든다.
이 값이 key 값이 된다.
근데 무언가 의존성이 바뀌면, 당연히 gradle도 변경되지 않는가?
그럴때 필요한게 restore-keys 다.
restore-keys를 사용해 앞부분만 일치하는 가장 최신 버전의 Cache 데이터를 받고 Build를 실행하게 된다.
- name: Build JAR - Default (JAR 빌드 - 디폴트)
run: |
cd default
GRADLE_USER_HOME=$HOME/.gradle/default ./gradlew bootJar

(Default 서버와 Chat 서버의 빌드를 분리시켰다)
그럼 총 41초로 엄청나게 줄어든 효과를 볼 수 있다.
하... 이 간단한걸 내가 한가지 잘못 생각하고 있어서 오래 걸렸다..
build를 진행하게 되면 /.gradle 폴더가 프로젝트 내부에 생기는 줄 알았더니,
~/ 폴더 즉, HOME 폴더 최상단에 /.gradle 폴더가 생성된다.
이걸 모르고
path: |
default/.gradle/caches
default/.gradle/wrapper
경로를 자꾸 프로젝트 내부로 설정을 해놓으니..

파일이 없다고 Action이 자꾸 화를 낸다.
로컬에서 직접 빌드를 진행해보니까, 최상단에 /.gradle 폴더가 진행되는 것을 보고 경로를 바꾸니,
정상적으로 캐싱이 진행이 되었다.
게다가 다른 분들의 자료를 보면서 적용을 시켰다.
보통은 단일 서버로만 진행을 하니 경로가 나랑 달라서 처음에는 뭐가 다른줄 몰랐다..
이것도 멀티 레포의 단점이지 않을까 싶다.