안동민 개발노트

본문 시작

환경 설정의 배포 준비

프로젝트·플랫폼·코드·콘텐츠 설정을 릴리스 기준으로 최종 점검해 개발 환경과 사용자 빌드의 차이를 줄입니다.

기능 구현과 성능 점검을 마쳤다면, 이제 결과물을 실제 사용자 환경으로 옮길 준비를 할 단계입니다.

10장 배포 및 유지보수는 게임을 플레이어에게 전달한 뒤에도 안정적으로 운영하기 위한 실무 흐름을 다룹니다.

그 시작점은 환경 설정의 배포 준비이며, 개발 환경에서만 동작하던 설정을 실제 사용자 환경에서도 문제없이 재현되도록 점검하는 과정입니다.

이번 절에서는 배포 직전 확인해야 할 설정 항목과 준비 순서를 정리합니다.

이 과정을 거치면 릴리스 직후 발생하기 쉬운 실행 환경 이슈를 크게 줄일 수 있습니다.


배포 준비의 중요성

배포 준비는 게임 개발의 마지막 단계이자, 플레이어에게 게임의 첫인상을 결정짓는 매우 중요한 과정입니다.

  • 실행 호환성 확인: 개발 환경과 플레이어 환경은 다를 수 있습니다. 배포 준비는 지원할 사용자 환경에서 실행되는지 검증합니다.
  • 최적의 성능 제공: 최종 빌드에 필요한 최적화 설정들이 올바르게 적용되었는지 확인하여, 지원 사양에서 목표 성능을 확인합니다.
  • 파일 크기 및 로딩 시간 최적화: 불필요한 데이터를 제거하고 효율적인 패키징을 통해 게임의 설치 용량과 로딩 시간을 줄입니다.
  • 보안 및 저작권 보호: 게임 데이터를 적절히 암호화하거나 패키징하여 데이터 추출·변조 비용을 높입니다. 패키징 자체가 무단 변조나 복제를 막는 보장은 아닙니다.
  • 플랫폼별 요구사항 충족: PC, 모바일, 콘솔 등 각 플랫폼이 요구하는 고유한 배포 기준과 인증 절차를 충족시킵니다.

프로젝트 설정 (Project Settings) 최종 점검

편집(Edit) > 프로젝트 세팅(Project Settings) 메뉴는 게임 배포를 위한 핵심적인 전역 설정들을 포함하고 있습니다.

다음 항목들을 최종 점검합니다.

프로젝트 (Project) 섹션

  • Maps & Modes (맵 및 모드)
    • Default Maps (기본 맵)
      • Editor Startup Map: 에디터 시작 시 로드될 맵 (개발용).
      • Game Default Map: 게임 시작 시 로드될 맵 (배포용). 반드시 게임의 시작 맵으로 설정합니다.
      • Transition Map: seamless travel의 전환에 사용하는 맵으로, 일반적인 로딩 화면과는 구분합니다.
    • Default GameMode: 게임의 기본 GameMode 클래스가 올바르게 설정되었는지 확인합니다.
  • Packaging (패키징)
    • List of maps to include in a packaged build: 빌드에 포함할 맵 목록을 정의합니다. 필요한 맵이 쿠킹되는지 확인합니다. 이 목록 외에도 Asset Manager·명령행 등 쿠킹 규칙이 영향을 줍니다.
    • Build Configuration: Development (개발용), Shipping (최종 배포용), DebugGame (디버그 정보 포함) 중 Shipping을 선택합니다. Shipping은 출시용 최적화와 콘솔·통계 제한을 적용합니다. 심볼 생성·보관과 패키지 포함 여부는 별도로 관리합니다.
    • Use Pak File: 쿠킹된 콘텐츠를 하나 이상의 .pak에 묶습니다. 압축은 별도 옵션이고, Io Store를 사용하면 .utoc/.ucas 컨테이너도 확인합니다.
    • For Distribution: 앱 스토어 등 대상 플랫폼의 배포 구성을 선택합니다. 인증서·서명·암호화 설정이 자동 완성되는 것은 아닙니다.
    • Cook everything in the project content directory: 모든 콘텐츠를 쿠킹(Cook)할지 여부. 모든 콘텐츠가 필요할 때 사용합니다. 크기를 제한하려면 필요한 맵·참조·동적 로드 에셋을 명시하고 누락을 테스트합니다.
  • Descriptions (설명)
    • Project Name, Company Name, Copyright Notice: 게임의 이름, 회사명, 저작권 정보 등을 정확히 입력합니다. 이는 설치 파일이나 실행 파일 정보에 표시될 수 있습니다.
    • Project Version: 게임의 현재 버전 정보를 명시합니다.

엔진 (Engine) 섹션

  • Rendering (렌더링)
    • 프레임 정책: 프레임 제한·동기화·백그라운드 동작을 실제 패키지에서 확인합니다. Use Less CPU when in Background는 에디터 환경 설정이므로 배포 게임의 정책으로 간주하지 않습니다.
    • Motion Blur, Anti-Aliasing Method, Global Illumination, Reflections 등 9장 3절에서 다룬 렌더링 품질 설정을 최종적으로 검토하고, 목표 플랫폼에 맞는 최적의 균형점을 찾습니다. (예: 저사양 플랫폼에서는 불필요한 고품질 효과 비활성화)
  • Input (입력)
    • 기존 입력의 Action Mappings/Axis Mappings 또는 Enhanced Input의 Input Action/Mapping Context: 모든 게임 컨트롤이 올바르게 매핑되었는지, 중복되거나 누락된 키는 없는지 확인합니다. (특히 Escape 키 같은 기본 시스템 키와의 충돌 여부)
  • Physics (물리)
    • Framerate and Substepping: 9장 4절에서 다룬 Max Physics Delta Time, Max Substeps 등의 설정이 게임의 물리 시뮬레이션 안정성에 적합한지 확인합니다.

플랫폼별 설정 (Platform Settings) 점검

각 플랫폼(Windows, Android, iOS 등)은 고유한 배포 요구사항을 가집니다.

  • 프로젝트 세팅 > 플랫폼 (Platforms) 섹션에서 대상 플랫폼을 선택하고 다음 항목들을 점검합니다.
  • Windows
    • 게임 아이콘과 실제 패키지 실행 파일 이름을 확인합니다.
    • 필수 런타임의 포함 여부는 Packaging의 Prerequisites에서, 설치 위치는 별도 설치 프로그램·스토어 설정에서 확인합니다.
  • Android / iOS
    • Android Package Name/버전 코드와 iOS Bundle Identifier/버전·빌드 번호 등 플랫폼별 식별 정보.
    • Signing: 앱 서명을 위한 키스토어(Android) 또는 인증서/프로비저닝 프로파일(iOS) 설정.
    • Build: ASTC·ETC2 등 엔진 버전과 대상 기기가 지원하는 텍스처 압축 포맷 확인.
    • Minimum SDK Version, Target SDK Version: Android 최소 실행 API와 대상 API 수준. Target SDK는 지원 가능한 최대 OS 버전을 뜻하지 않습니다. iOS 최소 지원 버전은 별도 설정합니다.
    • Orientation: 화면 방향 설정 (Portrait/Landscape).
    • Architecture: 64비트 (ARM64) 아키텍처 지원 여부.
  • 콘솔 (Console)
    • 각 콘솔 제조사(Sony, Microsoft, Nintendo)의 개발자 프로그램에 등록하여 SDK 및 배포 가이드를 따릅니다. 언리얼 엔진은 해당 SDK와 연동하여 빌드를 생성합니다.

코드 및 콘텐츠 최종 점검

환경 설정 외에도 최종 빌드를 위한 코드와 콘텐츠 점검이 필요합니다.

코드 및 블루프린트 정리

  • 디버그 코드 제거: 개발 과정에서 사용했던 Print String, Draw Debug Sphere의 Development Only 성격과 사용자 정의 디버그 경로를 확인합니다. C++의 에디터 전용 코드는 WITH_EDITOR, Shipping 분기는 UE_BUILD_SHIPPING 등 용도에 맞게 구분하며 WITH_EDITORONLY_DATA를 실행 코드용 일반 스위치로 쓰지 않습니다.
  • 사용하지 않는 코드/블루프린트 제거: 더 이상 사용되지 않는 함수, 변수, 이벤트 그래프 노드 등은 정리합니다.
  • 주석 및 문서화: 최종 코드에 대한 주석과 문서화를 통해 향후 유지보수를 용이하게 합니다.

콘텐츠 정리 및 검토

  • 사용하지 않는 에셋 제거: 콘텐츠 브라우저에서 에셋의 Reference Viewer를 사용하여 특정 에셋이 어디에서 사용되는지 확인하고, 동적 로드·Asset Manager 규칙까지 확인한 뒤 미사용 에셋만 제거합니다.
  • 중복 에셋 제거: 동일한 에셋이 여러 개 복제되어 존재하지 않는지 확인하고 하나로 통일합니다.
  • LOD 및 충돌 메시 최종 확인: 9장 2절에서 다룬 LOD와 충돌 메시 최적화가 모든 메시에 올바르게 적용되었는지 재확인합니다.
  • 퀄리티 체크: 모든 텍스처, 머티리얼, 메시가 시각적 결함 없이 의도한 대로 표시되는지 최종적으로 검토합니다.

빌드 및 테스트 준비

배포 준비의 마지막 단계는 실제 빌드를 생성하고 테스트하는 것입니다.

패키징 (Packaging)

  • UE5 상단 Platforms > [대상 플랫폼] > Package Project를 사용하여 원하는 플랫폼(Windows, Android 등)으로 게임을 패키징합니다.
  • Build Configuration은 Shipping 으로 설정하는 것을 잊지 마세요.
  • 패키징 과정에서 오류가 발생하면 출력 로그(Output Log) 창을 확인하여 원인을 분석하고 해결합니다. (예: 컴파일 오류, 에셋 참조 오류)

최종 테스트 (Final Testing)

  • 다양한 환경 테스트: 가능한 한 다양한 하드웨어 스펙(저사양/고성능)과 운영체제 버전에서 빌드된 게임을 테스트합니다.

  • 버그 보고 및 수정: 발견된 버그는 신속하게 보고하고 수정합니다.

  • 로딩 시간 측정: 게임의 로딩 시간이 허용 가능한 범위 내에 있는지 측정합니다.

  • 성능 측정: Development/Test의 통계로 원인을 분석하고, 콘솔·Stat이 제한되는 Shipping은 플랫폼 측정 도구나 프로젝트에 준비한 계측으로 목표 성능을 확인합니다.

  • 엔진이 설치되지 않은 지원 장치에서 설치·첫 시작·저장·종료·재실행을 확인합니다.

  • 빌드 번호, 설정, 필수 런타임과 측정 결과를 함께 보관합니다. 에디터의 성공만으로 패키지의 성공을 판단하지 않습니다.