패키징 및 빌드 설정
배포 전 점검을 끝냈다면, 이제 실제 실행 파일을 만드는 단계로 넘어갑니다.
이번 절의 핵심은 패키징(Packaging)과 빌드 설정입니다. 개발 환경에서 실행되던 프로젝트를 PC, 모바일, 콘솔 같은 대상 플랫폼에서 독립 실행 가능한 형태로 변환하는 과정이며, 이때 선택한 옵션이 파일 크기, 로딩 속도, 성능, 보안 수준에 직접 영향을 줍니다.
여기서는 목표 플랫폼에 맞는 빌드 설정을 고르는 기준과 적용 절차를 다룹니다. 기준을 명확히 잡고 패키징하면 릴리스 품질을 안정적으로 유지할 수 있습니다.
패키징 및 빌드의 이해
패키징은 언리얼 엔진 프로젝트를 플레이어가 설치하고 실행할 수 있는 최종 게임 파일(예: .exe 파일, .apk 파일)로 변환하는 일련의 과정입니다. 이 과정에는 쿠킹(Cooking), 링크(Linking), 패키징(Packaging) 등의 단계가 포함됩니다.
- 쿠킹 (Cooking): 개발 환경에서 사용하는 에셋(메시, 텍스처, 머티리얼, 블루프린트 등)을 특정 플랫폼에서 가장 효율적으로 로드하고 사용할 수 있는 형태로 변환하는 과정입니다. 이 단계에서 불필요한 데이터가 제거되거나 압축됩니다.
- 링크 (Linking): 엔진 코드, 게임 코드, 외부 라이브러리 등을 하나로 묶어 실행 가능한 바이너리 파일을 생성합니다.
- 패키징 (Packaging): 쿠킹된 콘텐츠와 링크된 바이너리 파일을 하나의 패키지(예:
.pak파일, 설치 프로그램)로 묶는 과정입니다.
패키징 설정 핵심 항목
파일(File) > 프로젝트 패키징(Package Project) > 설정(Settings...) 또는 편집(Edit) > 프로젝트 세팅(Project Settings) > 프로젝트(Project) > 패키징(Packaging) 메뉴에서 패키징 관련 설정을 조정할 수 있습니다.
빌드 구성 (Build Configuration)
가장 중요한 설정 중 하나로, 최종 빌드의 목적과 포함될 디버그 정보 수준을 결정합니다.
-
Development(개발)- 디버그 정보가 포함되어 개발 및 테스트에 용이합니다.
- 최적화 수준이 낮아 파일 크기가 크고 성능이 저하될 수 있습니다.
- 콘솔 명령 및 디버그 기능(예:
Stat명령어)이 활성화됩니다.
-
Shipping(배포)- 최종 사용자에게 배포할 때 사용합니다.
- 최고 수준으로 최적화되어 파일 크기가 가장 작고 성능이 가장 좋습니다.
- 디버그 정보가 거의 제거되어 보안성이 높습니다.
- 콘솔 명령 및 디버그 기능이 대부분 비활성화됩니다.
-
DebugGame(디버그 게임)Development와 유사하지만, C++ 코드 디버깅에 필요한 정보가 더 많이 포함됩니다.- 성능은
Development보다 약간 좋을 수 있습니다.
-
Debug(디버그)- 가장 많은 디버그 정보가 포함되어 디버깅에 매우 용이하지만, 파일 크기가 매우 크고 성능이 가장 낮습니다. 일반적으로 사용되지 않습니다.
빌드 타겟 (Build Target)
프로젝트 세팅 > 프로젝트 > 패키징또는파일 > 프로젝트 패키징메뉴에서 선택할 수 있습니다.Game: 일반적인 게임 실행 파일을 빌드합니다. (주로 사용)Client: 네트워크 게임에서 클라이언트 전용 실행 파일을 빌드합니다.Server: 네트워크 게임에서 전용 서버 실행 파일을 빌드합니다.
쿠킹 (Cooking) 설정
쿠킹은 최종 빌드에 포함될 콘텐츠를 효율적으로 만드는 과정입니다.
List of maps to include in a packaged build(패키지 빌드에 포함할 맵 목록):- 필수 확인 사항: 게임에 사용되는 모든 맵(시작 맵, 플레이 맵, 로딩 맵 등)이 이 목록에 추가되어야 합니다. 누락되면 게임에서 해당 맵을 로드할 수 없습니다.
Cook everything in the project content directory(프로젝트 콘텐츠 디렉토리의 모든 것을 쿠킹):- 활성화 시, 콘텐츠 폴더 내의 모든 에셋을 빌드에 포함하려고 시도합니다. 간편하지만, 불필요한 에셋이 포함될 수 있어 빌드 크기가 커질 수 있습니다.
- 비활성화 시, 위에 설정된 맵 목록과 맵에서 직접 참조되는 에셋만 쿠킹합니다. 빌드 크기 최적화에 유리하지만, 동적으로 로드되는 에셋이 누락될 수 있으므로 주의해야 합니다.
-
Generate chunk files(청크 파일 생성)- 게임 데이터를 여러 개의 청크(
.pak파일)로 분할하여 생성합니다. - 활용: 대용량 게임에서 특정 청크만 다운로드하거나, 패치를 용이하게 할 때 사용됩니다.
- 설정:
Project Settings > Game > Asset Manager에서Primary Asset Types to Scan과Chunk IDs를 설정하여 어떤 에셋이 어떤 청크에 포함될지 정의할 수 있습니다. (고급 기능)
- 게임 데이터를 여러 개의 청크(
패키징 설정
-
Use Pak File(Pak 파일 사용)- 권장: 활성화하여 모든 게임 데이터를
.pak파일이라는 하나의 압축된 아카이브 파일로 묶습니다. - 장점: 파일 수 감소, 파일 크기 감소, 디스크 I/O 최적화, 로딩 속도 향상, 데이터 암호화 및 무단 변조 방지에 유리합니다.
- 비활성화 시, 모든 에셋이 원본 파일 형태로 배포됩니다.
- 권장: 활성화하여 모든 게임 데이터를
-
For Distribution(배포용)- 활성화 시, 최종 배포를 위한 추가적인 최적화 및 보안 기능이 적용됩니다. (예: 추가적인 데이터 압축, 일부 디버그 정보 제거, 플랫폼별 서명 요구 사항 활성화)
- 특히 모바일 플랫폼에서 앱 스토어에 제출할 때 필수적입니다.
-
Encrypt Ini Files/Encrypt Pak Index/Encrypt UAsset Files(Ini 파일 / Pak 인덱스 / UAsset 파일 암호화)- 활성화 시, 게임 데이터에 암호화를 적용하여 데이터 추출 및 변조를 어렵게 합니다. 보안이 중요한 게임에 유용합니다.
- 주의: 암호화를 사용하려면
Project Settings > Crypto에서 암호화 키를 설정해야 합니다.
플랫폼별 패키징 설정 (재강조 및 추가)
각 대상 플랫폼에 따라 추가적인 설정이 필요합니다.
-
Windows
Project Settings > Platforms > WindowsTarget RHI: 사용할 렌더링 API (DirectX 11, DirectX 12, Vulkan 등). 기본적으로 모든 지원 API를 포함하지만, 특정 API만 포함하여 빌드 크기를 줄일 수 있습니다.Packaging섹션에서 런타임에 필요한Prerequisites(예: Visual C++ Redistributable)를 설치 프로그램에 포함할지 여부를 설정할 수 있습니다.
-
Android
Project Settings > Platforms > AndroidAPK PackagingBuild Configuration:ShippingPackage for Google Play: Google Play Store 배포 시 활성화 (AAB 파일 생성).ETC2 / DXT / ASTC등Texture Compression Format선택: 디바이스 호환성 및 파일 크기에 큰 영향을 미칩니다. 모든 디바이스를 지원하려면 여러 포맷을 포함해야 할 수 있습니다.Architectures to Package:ARM64활성화.
Signing:Android SDK설치 시 생성된Keystore파일을 사용하여 앱 서명 정보를 설정해야 합니다. (이름, 별칭, 비밀번호 등)
-
iOS
Project Settings > Platforms > iOSBundle Identifier,Version Number,Build Number설정.Signing: Apple Developer 계정에서 발급받은Certificate및Provisioning Profile을 설정해야 합니다.Supported Orientations: 세로/가로 모드 지원 여부.
- 콘솔: 각 콘솔 제조사(Sony, Microsoft, Nintendo)의 개발자 프로그램에 등록하고, 해당 SDK가 설치된 환경에서 언리얼 엔진의 전용 빌드 파이프라인을 사용해야 합니다. 설정은 콘솔별로 다릅니다.
패키징 실행 및 문제 해결
패키징 실행
파일(File) > 프로젝트 패키징(Package Project) > [대상 플랫폼]을 선택합니다.- 패키징이 시작되고
출력 로그(Output Log)창에서 진행 상황을 확인할 수 있습니다. - 성공적으로 완료되면 지정된 출력 폴더에 실행 가능한 게임 파일이 생성됩니다.
일반적인 패키징 오류 및 해결책
-
쿠킹 실패 (Cook Failed)- 원인: 콘텐츠에 오류(잘못된 참조, 누락된 에셋, 컴파일 오류가 있는 블루프린트)가 있는 경우.
- 해결:
출력 로그를 자세히 확인하여 어떤 에셋 또는 블루프린트에서 오류가 발생했는지 파악하고 수정합니다.Fix Up Redirectors in Folder(콘텐츠 브라우저에서 폴더 우클릭)를 주기적으로 실행하여 리다이렉터(Redirector) 오류를 수정합니다.
-
링킹 실패 (Linking Failed)- 원인: C++ 코드에 컴파일 오류가 있거나, 종속성 문제가 있는 경우.
- 해결: Visual Studio에서 C++ 프로젝트를 빌드하여 오류를 먼저 해결합니다.
-
서명 실패 (Signing Failed)(주로 모바일)- 원인: Android Keystore 정보가 잘못되었거나, iOS 인증서/프로비저닝 프로파일이 만료되었거나 잘못 설정된 경우.
- 해결: 플랫폼별 서명 설정(
Project Settings > Platforms > Android/iOS)을 다시 확인하고, 유효한 서명 정보를 사용합니다.
-
맵 누락 (Map Not Found)- 원인:
Project Settings > Packaging > List of maps to include in a packaged build에 필요한 맵이 포함되지 않은 경우. - 해결: 해당 맵을 목록에 추가합니다.
- 원인:
-
크래시 (Crash)발생- 원인: 패키징된 빌드 실행 중 크래시가 발생하면, 디버그 정보가 거의 없으므로
Shipping빌드 대신Development또는DebugGame빌드로 패키징하여 문제를 재현하고 디버거를 붙여 원인을 파 찾습니다.
- 원인: 패키징된 빌드 실행 중 크래시가 발생하면, 디버그 정보가 거의 없으므로
배포 직전 검증 순서 (성능/안정성)
Development빌드에서 기능 회귀를 먼저 제거합니다.- 동일 커밋으로
Shipping빌드를 만들고 로딩 시간/FPS/메모리를 측정합니다. - 인증/로그인/세이브 같은 상태 저장 기능이 패키징 후에도 동일하게 동작하는지 확인합니다.
- 패치 업데이트를 고려해 빌드 산출물 버전과 맵 포함 목록을 다시 점검합니다.
- 배포 후보 빌드는 클린 환경(새 PC/새 계정)에서 최종 검증합니다.
패키징/배포 오류 점검 체크리스트
Cook Failed의 원인 에셋을 로그 기준으로 정확히 특정했는가?- 플랫폼 서명(Android/iOS) 만료/권한 문제를 사전 점검했는가?
- 포함 맵 목록 누락으로 실행 불가 맵이 생기지 않았는가?
Shipping빌드에서만 재현되는 크래시를 별도로 테스트했는가?- 배포 산출물(실행 파일, DLC/패치 파일, 버전 문서) 정합성을 검수했는가?
패키징 및 빌드 설정은 게임 개발의 최종 결과물을 만들어내는 매우 중요한 과정입니다. 이 절에서 배운 빌드 구성, 쿠킹 설정, 플랫폼별 패키징 설정, 그리고 일반적인 문제 해결 방법을 숙지하여, 여러분의 게임이 목표 플랫폼에서 가장 최적화되고 안정적인 형태로 배포될 수 있도록 준비하세요. 완벽하게 준비된 빌드만이 플레이어에게 최고의 경험을 선사할 수 있습니다.