GitHub Actions로 Java 빌드 자동화

발행: (2026년 1월 17일 오후 07:18 GMT+9)
7 min read
원문: Dev.to

Source: Dev.to

GitHub Actions를 사용한 Java 빌드 자동화 커버 이미지

Rohith V

우리는 모두 그런 경험을 해봤습니다. 코드를 작성하고, 노트북에서는 완벽히 실행되지만, 푸시하면 다른 사람 모두에게 빌드가 깨지는 경우죠. 혹은 더 심각하게, 누군가 테스트를 실행하는 것을 잊어버려 버그가 프로덕션에 슬쩍 들어가는 상황도 있습니다.

이때 지속적 통합(Continuous Integration, CI)이 등장합니다.

이 가이드에서는 코드를 푸시할 때마다 두 개의 마이크로서비스 애플리케이션(주문 서비스 & 제품 서비스)을 자동으로 빌드하고 테스트하는 매우 간단한 GitHub Actions 워크플로우를 자세히 살펴보겠습니다.

어떤 문제를 해결하나요?

코드를 보기 전에, 왜 이것이 필요한지 이해해 봅시다. 이 YAML 파일은 여러분의 저장소에 존재하며 세 가지 큰 문제를 해결합니다:

  • Consistency – 코드를 깔끔하고 중립적인 환경(Ubuntu)에서 빌드하므로, 여러분의 복잡할 수 있는 노트북에서 빌드하는 것을 피합니다.
  • Early Bug Detection – 모든 Pull Request마다 테스트를 자동으로 실행해, 깨진 코드를 병합하지 못하도록 합니다.
  • Monorepo Support – 하나의 저장소에서 여러 서비스(주문 서비스와 제품 서비스)를 관리하며, 한 서비스의 변경이 다른 서비스를 깨뜨리지 않도록 보장합니다.

워크플로 파일

다음은 분석할 전체 ci.yml 파일입니다:

name: Java CI with Maven

on:
  push:
    branches: [ "main" ]
  pull_request:
    branches: [ "main" ]
  workflow_dispatch:

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout code
        uses: actions/checkout@v4

      - name: Set up JDK 17
        uses: actions/setup-java@v4
        with:
          java-version: '17'
          distribution: 'temurin'
          cache: maven

      - name: Build and Test Order Service
        working-directory: ./OrderService
        run: |
          chmod +x mvnw
          ./mvnw clean verify

      - name: Build and Test Product Service
        working-directory: ./ProductService
        run: |
          chmod +x mvnw
          ./mvnw clean verify

Source:

코드 분석

1. 설정 및 트리거

name: Java CI with Maven

on:
  push:
    branches: [ "main" ]
  pull_request:
    branches: [ "main" ]
  workflow_dispatch:
  • name – 워크플로우가 GitHub의 Actions 탭에 표시되는 이름입니다.
  • on – 워크플로우를 트리거하는 이벤트들입니다.
    • pushmain 브랜치에 코드가 푸시될 때마다 실행됩니다.
    • pull_request – PR이 main을 대상으로 할 때마다 실행됩니다(코드 리뷰에 필수).
    • workflow_dispatch – “Run workflow” 버튼을 추가해 수동으로 시작할 수 있게 해줍니다(디버깅에 유용).

2. 환경 (Job)

jobs:
  build:
    runs-on: ubuntu-latest
  • jobs – 워크플로우는 하나 이상의 작업(job)으로 구성됩니다; 여기서는 build라는 단일 작업을 사용합니다.
  • runs-on: ubuntu-latest – GitHub가 최신 Ubuntu 릴리스를 실행하는 새로운 가상 머신을 제공하고, 이후 단계들은 모두 이 VM에서 실행됩니다.

3. 단계 (실제 작업)

단계 A – 코드 가져오기

steps:
  - name: Checkout code
    uses: actions/checkout@v4
  • uses – GitHub Marketplace에서 미리 만들어진 액션을 가져옵니다. actions/checkout은 리포지토리를 러너에 복제해 워크플로우의 나머지 단계가 파일에 접근할 수 있게 합니다.

단계 B – Java 준비

  - name: Set up JDK 17
    uses: actions/setup-java@v4
    with:
      java-version: '17'
      distribution: 'temurin'
      cache: maven
  • actions/setup-java – 러너에 Java를 설치합니다.
  • distribution: 'temurin' – Eclipse Temurin 빌드의 OpenJDK를 사용합니다.
  • cache: maven – 실행 간 Maven 의존성을 캐시하여 빌드 속도를 크게 향상시킵니다.

단계 C – 마이크로서비스 빌드

Order Service

  - name: Build and Test Order Service
    working-directory: ./OrderService
    run: |
      chmod +x mvnw
      ./mvnw clean verify

Product Service

  - name: Build and Test Product Service
    working-directory: ./ProductService
    run: |
      chmod +x mvnw
      ./mvnw clean verify
  • working-directory – 명령을 실행하기 전에 지정된 폴더로 이동합니다(모노레포에서 필요합니다).
  • chmod +x mvnw – Maven Wrapper 파일에 실행 권한을 부여합니다.
  • ./mvnw clean verify – Maven Wrapper를 실행해 프로젝트에 정의된 정확한 Maven 버전을 보장합니다. verify는 전체 라이프사이클을 실행해 통합 테스트 검증까지 수행하므로 install만 실행하는 것보다 더 철저한 검사를 제공합니다.

GitHub에서 설정하는 방법

  1. 프로젝트 열기 (로컬 또는 GitHub에서).

  2. 디렉터리 구조 만들기:

    .github/
    └─ workflows/
  3. 워크플로 파일 만들기:

    • Path: .github/workflows/ci.yml
    • 위에 표시된 YAML 내용을 추가합니다.
  4. 커밋하고 푸시하기:

    git add .github/workflows/ci.yml
    git commit -m "Add CI pipeline"
    git push

푸시하면 GitHub이 새 워크플로를 자동으로 감지합니다. Actions 탭에서 실행을 확인하거나 Run workflow 버튼을 통해 수동으로 트리거할 수 있습니다.

워크플로 실행

git push origin main

GitHub 리포지토리에서 “Actions” 탭으로 이동하세요. 워크플로가 시작되는 것을 볼 수 있습니다. 원이 녹색으로 바뀌면 코드는 안전한 것입니다. 원이 빨간색으로 바뀌면 빌드가 깨진 것이며, 다행히도 사용자가 겪기 전에 이를 알게 된 것입니다.

샘플 설정: ci.yml

Back to Blog

관련 글

더 보기 »

코드 통합이란?

통합이란 무엇인가? 소프트웨어 엔지니어링에서 통합은 여러 개발자들의 다양한 코드 변경을 하나의 일관된 s...