플랫폼별 빌드와 패키징
이전 장에서 우리는 게임의 성능 최적화에 대해 심도 있게 다루었습니다. 이제 게임 개발의 마지막 단계이자 플레이어에게 게임을 제공하기 위한 필수적인 과정인 배포(Deployment) 에 대해 알아보겠습니다. 게임을 배포한다는 것은 개발 환경에서 만들어진 프로젝트를 플레이어가 실행할 수 있는 독립적인 형태로 만드는 것을 의미하며, 이를 언리얼 엔진에서는 빌드(Build) 또는 패키징(Packaging) 이라고 부릅니다.
이번 절에서는 언리얼 엔진에서 게임을 다양한 플랫폼(Windows, Android, iOS 등)에 맞춰 빌드하고 패키징하는 기본적인 과정과 각 플랫폼별로 고려해야 할 사항들에 대해 자세히 살펴보겠습니다.
빌드와 패키징의 이해
- 빌드(Build): 소스 코드(C++)를 실행 가능한 바이너리 파일로 컴파일하는 과정과 게임 에셋(Asset)들을 특정 플랫폼에 맞게 변환하고 최적화하는 과정을 포함합니다.
- 패키징(Packaging): 빌드된 바이너리 파일과 최적화된 에셋, 그리고 게임 실행에 필요한 모든 파일(콘텐츠, 설정 파일, 외부 라이브러리 등)을 하나로 묶어 배포 가능한 형태로 만드는 과정입니다. 결과물은 플랫폼에 따라
.exe
,.apk
,.ipa
등 다양한 형태가 됩니다.
패키징된 게임은 언리얼 엔진 에디터가 설치되어 있지 않은 환경에서도 독립적으로 실행될 수 있습니다.
패키징 전 준비 사항
성공적인 패키징을 위해서는 몇 가지 중요한 사전 설정이 필요합니다.
프로젝트 설정 (Project Settings)
- Maps & Modes (맵 & 모드)
Default Maps
->Editor Startup Map
: 에디터 시작 시 로드될 맵.Default Maps
->Game Default Map
: 게임 시작 시 로드될 기본 맵. (매우 중요)Default Maps
->Transition Map
: 로딩 화면 등으로 사용될 맵.
- Packaging (패키징)
Build Configuration
:Development
,Shipping
,DebugGame
등 빌드 목적에 맞는 구성을 선택합니다. 일반적으로 최종 배포용은Shipping
을 사용합니다.Shipping
빌드는 디버그 정보가 제거되고 최적화가 최대한 적용되어 성능이 가장 좋습니다.Full Rebuild
: 체크하면 모든 파일을 처음부터 다시 빌드하여 깨끗한 상태로 만듭니다. 문제가 발생할 경우 유용하지만, 시간이 오래 걸립니다.For Distribution
: 마켓플레이스나 앱 스토어에 배포할 경우 체크합니다. 플랫폼별 서명 등 추가 요구사항이 활성화됩니다.Cook Content for Windows/Android/iOS/etc.
: 패키징할 타겟 플랫폼을 선택합니다.Compress Content
: 콘텐츠 파일을 압축하여 최종 빌드 크기를 줄입니다.Exclude content only projects if they are not being cooked
: 콘텐츠 전용 프로젝트가 Cook 되지 않을 경우 배포에서 제외합니다.
- Supported Platforms (지원 플랫폼): 프로젝트가 지원할 플랫폼을 여기서 활성화/비활성화합니다.
- Target Hardware (타겟 하드웨어):
Desktop
,Console
,Mobile
등 타겟 디바이스의 종류를 설정하여 렌더링 품질 및 기능 제한에 영향을 줍니다. - Description (설명): 게임 이름, 버전, 저작권, 아이콘 등 기본 정보를 설정합니다.
- iOS/Android/Linux/HTML5 etc. Platform Settings: 각 플랫폼별로 SDK 경로, 서명 정보, 앱 아이콘, 스플래시 화면 등 고유한 설정이 필요합니다.
플러그인 관리 (Plugins)
- 사용하지 않는 플러그인은 비활성화하여 빌드 크기를 줄이고 빌드 시간을 단축합니다.
- 써드파티 플러그인의 경우, 해당 플러그인이 타겟 플랫폼을 지원하는지 확인해야 합니다.
콘텐츠 최적화 (Optimized Content)
- 9장 "성능 최적화"에서 다룬 모든 최적화 기법(LOD, 텍스처 압축, 머티리얼 최적화 등)이 패키징된 빌드에 직접적인 영향을 미칩니다. 최종 빌드는 에디터에서 실행하는 것보다 훨씬 높은 성능으로 실행되므로, 최적화가 잘 되어 있어야 합니다.
패키징 실행
언리얼 엔진 에디터에서 패키징을 실행하는 방법은 간단합니다.
File (파일) 메뉴를 클릭합니다.
Package Project (프로젝트 패키지) 로 이동합니다.
패키징할 타겟 플랫폼을 선택합니다 (예: Windows, Android, iOS, Linux 등).
저장될 출력 디렉토리를 선택합니다.
패키징 과정은 시간이 오래 걸릴 수 있으며, 특히 프로젝트 규모가 크거나 처음 빌드할 때는 더욱 그렇습니다. 출력 로그를 주시하여 에러나 경고 메시지를 확인하는 것이 중요합니다.
플랫폼별 특이 사항 및 고려 사항
Windows (PC)
- 가장 일반적인 타겟: 가장 많이 사용되는 플랫폼이며, 패키징 과정이 비교적 간단합니다.
- 결과물: 실행 파일(
.exe
)과 데이터 폴더가 포함된 디렉토리가 생성됩니다. - 필수 요구사항
- DirectX 또는 Vulkan 런타임: 사용자 시스템에 필요한 그래픽 API 런타임이 설치되어 있어야 합니다. 언리얼 엔진은 일반적으로 자체 인스톨러에 포함시키거나, 게임 설치 시 필요한 런타임을 함께 설치하도록 권장합니다.
- Visual C++ Redistributable: 게임이 빌드된 Visual Studio 버전에 맞는 C++ 재배포 패키지가 사용자 시스템에 설치되어 있어야 합니다. 언리얼 엔진 빌드 시 함께 배포되도록 설정할 수 있습니다.
- Steam, Epic Games Store 등: 각 스토어 플랫폼의 SDK를 통합하고, 그들의 배포 도구를 사용해야 합니다.
Android (모바일)
안드로이드 플랫폼은 설정할 것이 많고 복잡할 수 있습니다.
- SDK 및 NDK 설정: 안드로이드 SDK, NDK, JDK(Java Development Kit), Ant (구 버전)가 시스템에 올바르게 설치되고 언리얼 엔진에 경로가 설정되어야 합니다.
Project Settings
->Platforms
->Android
에서 SDK, NDK, JDK 경로를 설정합니다.
- APK 서명 (Signing): Google Play Store에 앱을 업로드하려면
.apk
파일에 디지털 서명(Keystore)이 필요합니다.Project Settings
->Android
->Distribution Signing
에서 Keystore를 생성하고 관리합니다. - 권한 (Permissions): 앱이 카메라, 저장 공간, 인터넷 등 특정 기능을 사용하려면 AndroidManifest.xml에서 해당 권한을 선언해야 합니다. 언리얼 엔진은 일부 필수 권한을 자동으로 추가하지만, 커스텀 권한이 필요할 수 있습니다.
- ASTC 텍스처 압축: 모바일에서는 일반적으로 ASTC (Adaptive Scalable Texture Compression)를 사용하여 텍스처 메모리 사용량을 최적화합니다.
Project Settings
->Android
->Build
에서Support ASTC
를 활성화합니다. - 실행 파일 크기: 모바일 앱은 다운로드 크기 제한이 있는 경우가 많으므로, 불필요한 콘텐츠를 제거하고 압축을 최대한 활용하여 빌드 크기를 줄여야 합니다.
- 개발자 옵션: 개발 중에는 안드로이드 기기의 개발자 옵션을 활성화하여 USB 디버깅을 허용하고 앱을 직접 설치할 수 있습니다.
iOS (모바일)
iOS는 Apple의 생태계로 인해 특정한 요구사항이 있습니다.
- macOS 필요: iOS용 빌드는 반드시 macOS 환경에서 진행해야 합니다. 윈도우 PC에서 개발하더라도 빌드 서버나 맥과 연동해야 합니다.
- Xcode 및 SDK: 최신 버전의 Xcode가 설치되어 있어야 하며, 필요한 iOS SDK가 포함되어야 합니다.
- 개발자 계정 및 프로비저닝 프로파일: Apple Developer Program에 가입하고, 앱 ID, 개발 인증서, 프로비저닝 프로파일(Provisioning Profile)을 생성하여 앱 서명에 사용합니다.
Project Settings
->Platforms
->iOS
에서 Bundle Identifier, Signing Certificate, Provisioning Profile을 설정합니다.
- 디바이스 테스트: 빌드된
.ipa
파일을 실제 iOS 기기에 설치하여 테스트해야 합니다. - 앱 스토어 배포: TestFlight를 통한 베타 테스트 및 App Store Connect를 통한 최종 앱 스토어 제출 과정을 거쳐야 합니다.
콘솔
콘솔 플랫폼은 개발 키트와 NDA(비밀 유지 협약)가 필요하며, 일반적으로 더 엄격한 가이드라인과 인증 프로세스를 거쳐야 합니다.
- 개발자 등록: 각 콘솔 제조사의 개발자 프로그램에 정식으로 등록해야 합니다.
- 개발 키트 (Dev Kit): 게임 개발 및 테스트를 위해 전용 개발 키트 하드웨어가 필요합니다.
- SDK 통합: 각 플랫폼별 SDK를 언리얼 엔진 프로젝트에 통합해야 합니다.
- 플랫폼별 요구사항: 메모리 사용량, 로딩 시간, 프레임 속도, 특정 UI 가이드라인 등 각 콘솔이 요구하는 성능 및 기능 기준을 충족해야 합니다.
- 인증 (Certification): 최종 게임은 제조사의 엄격한 인증 테스트를 통과해야만 배포될 수 있습니다.
빌드 자동화 및 CI/CD
대규모 프로젝트나 지속적인 업데이트가 있는 프로젝트에서는 빌드 및 패키징 과정을 자동화하는 것이 필수적입니다.
- Command Line Builds: 언리얼 엔진은 명령 프롬프트에서
RunUAT.bat
스크립트를 사용하여 패키징을 자동화할 수 있는 강력한 기능을 제공합니다.RunUAT.bat BuildCookRun -project="[ProjectPath]" -noP4 -client -server -nocompile -nocompileeditor -installed -stage -archive -pak -prereqs -distribution -vfs -nodebuginfo -targetplatform=[Platform] -build -cook -pak -stagingdirectory="[OutputPath]"
- CI/CD (Continuous Integration / Continuous Deployment) 파이프라인: Jenkins, TeamCity, GitHub Actions 등 CI/CD 툴과 연동하여 코드 변경 시 자동으로 빌드, 테스트, 패키징 및 배포를 수행하는 시스템을 구축합니다. 이는 개발 효율성을 극대화하고 에러를 조기에 발견하는 데 도움이 됩니다.
패키징 후 테스트
패키징된 빌드는 에디터에서 실행되는 것과 다를 수 있습니다.
- 모든 플랫폼에서 테스트: 각 타겟 플랫폼의 실제 하드웨어에서 패키징된 빌드를 철저히 테스트하여 예상치 못한 버그나 성능 문제를 확인합니다.
- QA (Quality Assurance): QA 팀이나 테스터에게 빌드를 배포하여 광범위한 테스트를 수행합니다.
- 성능 프로파일링 (릴리스 빌드):
Shipping
빌드에서도 콘솔 명령어나 외부 도구를 사용하여 성능을 최종적으로 프로파일링하고 문제가 없는지 확인합니다. (일부 디버깅 정보는 제거되지만, 기본적인 프로파일링은 가능합니다.)
게임을 개발하는 것은 단순히 기능을 구현하는 것을 넘어, 최종 사용자가 실행할 수 있는 형태로 빌드하고 배포하는 것까지 포함합니다. 언리얼 엔진은 다양한 플랫폼에 대한 강력한 패키징 기능을 제공하지만, 각 플랫폼의 특성과 요구사항을 이해하고 그에 맞춰 프로젝트 설정을 올바르게 구성하는 것이 중요합니다. 철저한 사전 준비, 플랫폼별 지식 습득, 그리고 자동화된 빌드 및 테스트 파이프라인 구축은 성공적인 게임 배포와 운영을 위한 핵심적인 요소입니다.