icon
10장 : 배포 및 유지보수

패키징 및 빌드 설정


이전 절에서 게임 배포를 위한 기본적인 환경 설정들을 최종 점검하는 방법을 배웠습니다. 이제 실제로 언리얼 엔진 프로젝트를 실행 가능한 게임 파일로 변환하는 핵심 과정인 패키징(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 ScanChunk 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 > Windows
    • Target RHI: 사용할 렌더링 API (DirectX 11, DirectX 12, Vulkan 등). 기본적으로 모든 지원 API를 포함하지만, 특정 API만 포함하여 빌드 크기를 줄일 수 있습니다.
    • Packaging 섹션에서 런타임에 필요한 Prerequisites (예: Visual C++ Redistributable)를 설치 프로그램에 포함할지 여부를 설정할 수 있습니다.
  • Android
    • Project Settings > Platforms > Android
    • APK Packaging
      • Build Configuration: Shipping
      • Package for Google Play: Google Play Store 배포 시 활성화 (AAB 파일 생성).
      • ETC2 / DXT / ASTCTexture Compression Format 선택: 디바이스 호환성 및 파일 크기에 큰 영향을 미칩니다. 모든 디바이스를 지원하려면 여러 포맷을 포함해야 할 수 있습니다.
      • Architectures to Package: ARM64 활성화.
    • Signing: Android SDK 설치 시 생성된 Keystore 파일을 사용하여 앱 서명 정보를 설정해야 합니다. (이름, 별칭, 비밀번호 등)
  • iOS
    • Project Settings > Platforms > iOS
    • Bundle Identifier, Version Number, Build Number 설정.
    • Signing: Apple Developer 계정에서 발급받은 CertificateProvisioning 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 빌드로 패키징하여 문제를 재현하고 디버거를 붙여 원인을 파 찾습니다.

패키징 및 빌드 설정은 게임 개발의 최종 결과물을 만들어내는 매우 중요한 과정입니다. 이 절에서 배운 빌드 구성, 쿠킹 설정, 플랫폼별 패키징 설정, 그리고 일반적인 문제 해결 방법을 숙지하여, 여러분의 게임이 목표 플랫폼에서 가장 최적화되고 안정적인 형태로 배포될 수 있도록 준비하세요. 완벽하게 준비된 빌드만이 플레이어에게 최고의 경험을 선사할 수 있습니다.