본문으로 건너뛰기

Spring Boot 예제 개선하기

· 약 7분

Dependabot를 적용하고 GitHub Action을 활용하여 CI까지 적용해 예제 코드를 개선한 내용을 소개하고자 합니다.

spring-boot를 처음 접하고 이에 대한 간단한 예제를 만든지 꽤 시간이 지났다. 2020년 1월 기준으로는 약 30여개의 예제와 400여개의 커밋으로 이루어진 예제 저장소가 되었는데 처음에는 나만을 위해 나만이 참고하기 위한 공개 저장소 목적으로 만들었다.

하지만 해를 거듭하면서 다른 개발자분들이 간접적으로 관심을 가져주시는 표현으로 가끔씩 스타도 눌러주시고 포크도 해가신다. 공개 저장소이니 간단한 예제지만 쓰시는 분들에게 제대로된 예제 코드를 노출시키고 싶고 관리가 잘 되고 있다는 느낌을 들게하고 싶었다. (현재로선 안돌아가는 예제도 있다.)

alt intro

주기적으로 Version 갱신을 하자

우선적으로 디펜던시를 최신 버전으로 올리고 싶었다. 처음에는 가끔씩 크게 버전업을 하고 이에 맞게 코드도 수정했으나, 하나하나 알기도 어렵고 귀찮았다.

그러다가 Dependabot라는 녀석을 알게되었다. 지정한 주기로 디펜던시를 찾아 추가 버전 릴리즈가 있는지 찾아 pull request를 날려주는 봇이다.

alt dependabot-intro

alt dependabot-setting

해당 방법은 preview 단계의 설정이므로, 다음 문서를 참고하여 .github/dependabot.yml를 작성해보도록 하자.

Version UP에 안정적인 예제코드를 만들자

두번째로는 이렇게 머지되는 코드들 혹은 내가 직접 수정하거나 추가 작성한 코드가 정말 문제가 없는지 알고 싶었다. (보통 지속적 통합이라고 하죠.) 최근까지는 Dependabot을 활용해서 손쉽게 많은 디펜던시들을 주기적으로 갱신되거나 (개인적인 판단하에) 굳이 갱신될 필요가 없다고 판단되면 닫고 있었다.

alt dependabot-pr

그런데 이 많은 디펜던시들이 갱신되면서 '예제가 정상적으로 빌드가 될까' 라는 의문이 생겼고...

...

역시나 예제가 정상적으로 안돌아갔다. 이런 코드는 Revert를 하거나 예제를 수정하기도 했다.

alt revert

그리하여 쓸만한 CI 도구를 찾다가 약 1년 전에 작성한 'GitHub Action을 활용한 GitHub Page 배포'이 생각이나서 github-action 을 적용해보고자 한다. 사실 이를 적용할 생각은 예전부터 있었으나 1년 전에는 베타였고 자료도 많이 없어 꽤나 불편함이 조금 있었다.

다시 찾아보니 마켓플레이스에 편리한 많은 액션들이 추가되었다. (거의 2천개정도 되더란다.)

디테일한 작업은 추후작업으로 미루고 우선 push와 pull request 이벤트를 트리거하여 test를 실행하는 것이다. 코드는 다음과 같다.

name: Test
on:
push:
pull_request:
types: [opened, reopened]
jobs:
test:
runs-on: ubuntu-18.04
steps:
- uses: actions/checkout@v2
- name: Set up JDK 1.8
uses: actions/setup-java@v1
with:
java-version: 1.8
- name: Test task with Gradle Wrapper
# 제일 중요한 부분
run: |
chmod +x gradlew
./gradlew --version
./gradlew test

최종 결과

Dependabot에는 Bump now이라는 버튼 있어, 이를 클릭하면 주기에 상관없이 즉시 디펜던시를 찾아 pull request를 날려준다. 그러면 반영된 디펜던시로 test가 돌아 코드에 문제가 없는지 확인할 수 있다. 이로써 목표로 했던 안정적인 예제 만들기에 한 걸음 나아갔다. (아직 개선할게 많다...)

Dependabot, github-action은 완전 무료이기 때문에 간단한 저장소에 부담없이 사용하기 굉장히 좋은 기능인 것 같다.

alt github-action

앞으로 더 개선해야할 부분들

테스트 코드 작성

여러 프로젝트에는 나름 짜여진 테스트 코드들도 있고 테스트 코드 자체가 없거나 무의미한 테스트 코드가 있다. 정말 안정적인 코드가 되려면 필수적으로 테스트 코드를 작성해야 한다.

cache 적용

트리거될 때마다 grade을 다운로드하는데 사용량 제한이 있는 github-action, 보다 빠른 피드백을 위해 개선해야 한다. 물론 아직은 넉넉하다. (public repo 는 무료이다.)

중복 트리거

Dependabot를 적용해보니 push과 pr이 동시에 트리거되어 2배의 소요시간이 걸리고 사용량 또한 2배로 늘어난다. 추후에는 둘 중 하나만 트리거 되게끔 개선해야되지 않을까 싶다.

...