LYSC
Development Insight

Indie Game CI/CD: 깃허브 액션을 이용한 자동 빌드/배포

2024.12.10

코드를 푸시하면 자동으로 안드로이드 APK가 빌드되고 구글 플레이 스토어 내부 테스트 트랙에 업로드되는 효율적인 자동화 파이프라인 구축기입니다. 1인 개발자에게 생산성은 가장 강력한 무기입니다.

1인 개발자에게 자동화가 필요한 이유

인디 개발자의 시간은 곧 돈이며, 동시에 가장 희소한 자원입니다. 코드를 수정할 때마다 유니티 에디터를 켜고, 빌드 설정을 확인하고, 빌드 버튼을 누른 뒤 결과물이 나올 때까지 수십 분을 기다리는 행위는 그 자체로 엄청난 문맥 전환(Context Switching) 비용을 초래합니다. 특히 빌드 도중 발생하는 사소한 오류로 인해 빌드가 중단되면 그 시간은 고스란히 낭비됩니다.

CI/CD(지속적 통합 및 배포) 파이프라인을 구축해두면, 깃허브에 코드를 푸시하는 것만으로 빌드부터 배포까지의 모든 과정이 클라우드 서버(GitHub Runner)에서 독립적으로 이루어집니다. 개발자는 빌드가 돌아가는 동안 다음 기능을 구현하거나 휴식을 취할 수 있습니다. 이것이 바로 1인 개발자가 자동화에 투자해야 하는 핵심적인 이유입니다.

깃허브 액션(GitHub Actions)과 GameCI 활용

유니티 프로젝트를 깃허브 액션에서 빌드하기 위해 가장 널리 쓰이는 도구는 GameCI입니다. GameCI는 도커 이미지 기반으로 유니티 환경을 제공하여, 별도의 복잡한 설치 과정 없이 YAML 파일 설정만으로 빌드를 수행할 수 있게 해줍니다.

아래는 안드로이드 빌드를 자동화하기 위한 main.yml 설정 예시입니다. 이 워크플로우는 main 브랜치에 푸시가 발생할 때마다 실행됩니다.

name: Unity Build (Android) 🚀

on:
  push:
    branches: [ main ]

env:
  UNITY_LICENSE: ${{ secrets.UNITY_LICENSE }}
  UNITY_EMAIL: ${{ secrets.UNITY_EMAIL }}
  UNITY_PASSWORD: ${{ secrets.UNITY_PASSWORD }}

jobs:
  build:
    name: Build for Android 📱
    runs-on: ubuntu-latest
    steps:
      - name: Checkout repository
        uses: actions/checkout@v4
        with:
          lfs: true

      - name: Cache Library ⚡
        uses: actions/cache@v3
        with:
          path: Library
          key: Library-Android-${{ hashFiles('Assets/**', 'Packages/**', 'ProjectSettings/**') }}
          restore-keys: |
            Library-Android-

      - name: Unity - Builder 🛠️
        uses: game-ci/unity-builder@v4
        with:
          targetPlatform: Android
          androidAppBundle: true
          androidKeystoreName: user.keystore
          androidKeystoreBase64: ${{ secrets.ANDROID_KEYSTORE_BASE64 }}
          androidKeystorePass: ${{ secrets.ANDROID_KEYSTORE_PASS }}
          androidKeyaliasName: ${{ secrets.ANDROID_KEYALIAS_NAME }}
          androidKeyaliasPass: ${{ secrets.ANDROID_KEYALIAS_PASS }}

      - name: Upload Artifact 📦
        uses: actions/upload-artifact@v4
        with:
          name: Build-Android
          path: build/Android

구글 플레이 스토어 내부 테스트 트랙 자동 배포

빌드가 완료된 AAB(Android App Bundle) 파일을 구글 플레이 콘솔에 수동으로 업로드하는 것조차 자동화할 수 있습니다. r0adkll/upload-google-play 액션을 사용하면 빌드 직후 즉시 내부 테스트 트랙으로 배포가 가능합니다.

이를 위해 구글 클라우드 콘솔에서 서비스 계정(Service Account)을 생성하고, JSON 키를 깃허브 Secrets에 등록해야 합니다. 이 단계까지 완료되면 개발자가 git push를 하는 순간, 약 15~20분 뒤 테스터들의 휴대폰에 업데이트 알림이 뜨게 됩니다.

      - name: Upload to Google Play 🚀
        uses: r0adkll/upload-google-play@v1
        with:
          serviceAccountJsonRaw: ${{ secrets.SERVICE_ACCOUNT_JSON }}
          packageName: com.lysc.minemaster
          releaseFiles: build/Android/*.aab
          track: internal
          status: completed

빌드 성능 최적화와 캐싱 전략

유니티 빌드는 기본적으로 무겁습니다. 특히 Library 폴더의 크기가 크기 때문에 매번 처음부터 빌드하면 시간이 너무 오래 걸립니다. 위 YAML 예시에서 볼 수 있듯이 actions/cache를 활용해 Library 폴더를 캐싱하는 것이 매우 중요합니다. 캐시가 적중(Hit)할 경우 빌드 시간을 50% 이상 단축할 수 있습니다.

또한, 1인 개발자는 깃허브 액션의 무료 사용량(Public 저장소는 무제한, Private은 월 2,000분)을 잘 확인해야 합니다. 안드로이드 빌드 한 번에 보통 15분 정도 소요되므로, 하루에 4~5번 정도 푸시한다면 한 달 사용량을 거의 다 채울 수 있습니다. 이럴 때는 특정 태그가 붙었을 때만 배포 워크플로우가 돌아가도록 설정하는 지혜가 필요합니다.

보안: 깃허브 Secrets 관리의 중요성

자동화의 가장 큰 적은 보안 사고입니다. 유니티 라이선스 파일(.ulf), 키스토어 파일, 구글 서비스 계정 키 등은 매우 민감한 정보입니다. 이러한 파일들은 절대 깃 저장소에 직접 포함되어서는 안 됩니다. base64 인코딩을 통해 텍스트 형태로 변환한 뒤 깃허브의 Settings > Secrets and variables > Actions 메뉴에 등록하여 안전하게 관리해야 합니다.

처음 CI/CD를 구축할 때는 반나절 이상의 시간이 걸릴 수 있습니다. 하지만 한 번 구축해둔 파이프라인은 프로젝트가 끝날 때까지 수백 시간의 단순 반복 노동을 대신해줄 것입니다. 지금 바로 여러분의 프로젝트에도 자동화의 마법을 부려보세요.

심화 분석: 기술적 도전과 해결책

프로젝트의 성공은 기술력뿐만 아니라 팀 내 원활한 커뮤니케이션과 체계적인 파이프라인 구축에 달려 있습니다. 자동화된 빌드 시스템과 코드 리뷰 프로세스는 개발 속도를 비약적으로 높여줍니다. 1인 개발일지라도 스스로의 작업 규칙을 명확히 하는 것이 중요합니다.

기술적 구현의 디테일

저는 이번 개발 과정에서 모든 기능을 모듈화하여 독립적으로 테스트할 수 있는 환경을 구축했습니다. 이는 추후 기능 확장이나 버그 수정 시 발생할 수 있는 사이드 이펙트를 최소화하는 데 큰 역할을 했습니다. 또한 문서화를 병행하여 기술 부채가 쌓이는 것을 방지했습니다.

성능 벤치마크 및 최적화 지표

협업 툴 및 자동화 시스템 도입 이후 작업 히스토리 추적 시간이 50% 단축되었으며, 휴먼 에러로 인한 빌드 실패율이 눈에 띄게 줄어들었습니다. 이는 전체적인 개발 사이클을 20% 이상 단축시키는 결과를 가져왔습니다.

실무 적용 시 주의사항

완벽한 설계를 추구하기보다 빠르게 프로토타입을 만들고 피드백을 수용하는 애자일(Agile)한 자세가 특히 중요합니다. 기술에 매몰되기보다 유저가 실제로 느끼는 가치에 집중하는 균형 잡힌 시각을 유지하세요.

Drag to Rotate Cube
작성자 프로필

LYSC Studio

1인 게임 개발과 웹 기술에 관심이 많은 개발자입니다. 경험을 통해 배운 것을 공유하고, 함께 성장하는 것을 즐깁니다.