언리얼 프로젝트를 패키징하는 과정에서 에러를 마주쳤습니다.
Dedicated Client / Server로 나누어서 패키징을 하기 위해 언리얼 에디터에서 패키징을 시도면 UBT에서 에러를 뿜으며 패키징이 진행되지 않습니다.
왜 이런지 확인하기 위해서 Epic Game Launcher로 설치한 "Installed Engine"과 Epic Github에서 제공하는 "Source Build Engine"의 차이를 확인했습니다.
언리얼 엔진(Unreal Engine)은 개발자의 필요와 프로젝트의 규모에 따라 두 가지 주요한 형태로 제공됩니다.
설치 버전 엔진(Installed Engine 또는 Binary Build)과 소스 빌드 엔진(Source Build Engine) 두 가지 방식은 엔진을 얻고 사용하는 방법, 커스터마이징의 자유도, 디버깅 능력, 그리고 프로젝트의 배포 전략에 있어 근본적인 차이를 가집니다.
1. 설치 버전 엔진 (Installed Engine / Binary Build)
1.1. 개요
설치 버전 엔진은 에픽게임즈 런처(Epic Games Launcher)를 통해 다운로드하고 설치하는, 미리 컴파일된(pre-compiled) 바이너리 형태의 언리얼 엔진입니다. 대부분의 사용자, 특히 언리얼 엔진을 처음 접하는 개발자, 아티스트, 디자이너, 소규모 팀에게 가장 일반적이고 편리한 방식입니다.
1.2. 특징
- 사용 편의성: 별도의 컴파일 과정 없이 런처에서 클릭 몇 번으로 설치하고 바로 사용할 수 있습니다.
- 빠른 설치 및 업데이트: 엔진 전체 소스 코드를 컴파일할 필요가 없으므로 설치 시간이 매우 짧습니다. 업데이트 또한 런처를 통해 자동으로 관리되어 편리합니다.
- 제한된 커스터마이징: 엔진의 소스 코드가 포함되어 있지 않거나, 헤더 파일(.h)만 포함된 경우가 많아 엔진 자체의 기능을 수정하거나 확장하는 것이 불가능합니다. 렌더링 파이프라인 변경, 물리 엔진 수정 등 엔진 코어 로직 변경은 할 수 없습니다.
- 디버깅 제약: 게임 프로젝트 코드에 대한 디버깅은 가능하지만, 엔진 내부에서 발생하는 크래시나 버그를 추적하기는 어렵습니다. 엔진 디버깅 심볼(.pdb)을 별도로 다운로드할 수 있지만, 이 경우에도 콜 스택(Call Stack) 확인 등 제한적인 정보만 얻을 수 있으며, 엔진 코드 내부로 직접 들어가서 변수 값을 확인하거나 실행 흐름을 제어할 수는 없습니다.
- 플러그인 호환성: 언리얼 마켓플레이스에서 받은 플러그인은 특정 바이너리 버전에 맞게 컴파일되어 제공됩니다. 따라서 소스 코드가 없는 플러그인은 해당 버전의 설치 엔진에서만 동작합니다.
1.3. 내부 구조 및 계층
설치 버전 엔진의 폴더 구조는 소스 빌드에 비해 단순화되어 있습니다.
Engine/Binaries: 엔진의 핵심 실행 파일(UE5Editor.exe 등)과 동적 링크 라이브러리(.dll)들이 여기에 위치합니다. 대부분의 기능이 이 바이너리 안에 컴파일되어 있습니다.Engine/Source: 엔진의 전체 소스 코드가 아닌, 공개된 API를 위한 헤더 파일이나 일부 모듈의 소스만 제한적으로 포함됩니다.Runtime,Developer,Editor등의 폴더에 헤더 파일들이 주로 존재하며, 이를 통해 개발자는 엔진 API를 호출하여 게임 로직을 작성할 수 있습니다.
동작 계층 구조
- 사용자 영역 (User Layer):
- 사용자는 에픽게임즈 런처를 실행합니다.
- 런처의 '라이브러리' 탭에서 원하는 버전의 언리얼 엔진을 '설치'합니다.
- 설치가 완료되면 '실행' 버튼을 눌러 에디터를 시작하고, 프로젝트를 생성하거나 엽니다.
- 에디터/런타임 계층 (Editor/Runtime Layer):
- 런처가
Engine/Binaries/Win64/UnrealEditor.exe와 같은 미리 컴파일된 실행 파일을 직접 실행합니다. - 에디터는 프로젝트의 C++ 코드를 발견하면, 내부적으로 포함된 Unreal Build Tool (UBT)을 사용하여 해당 게임 코드만 컴파일하고 동적 링크 라이브러리(.dll)로 만듭니다.
- 에디터는 이 게임 DLL을 런타임에 로드하여 프로젝트를 실행합니다. 즉, 게임 코드는 엔진의 바이너리에 '연결(linking)'되어 동작합니다.
- 런처가
- 빌드 시스템 계층 (Build System Layer):
- UBT는 게임 프로젝트를 빌드하는 역할만 수행합니다. 엔진 자체는 이미 빌드된 상태이므로 UBT가 엔진 코드를 컴파일하지는 않습니다.
- Visual Studio와 같은 IDE에서는 게임 모듈과 관련된 코드만 표시되며, 엔진 모듈은 디버깅할 수 없는 외부 라이브러리로 취급됩니다.
2. 소스 빌드 엔진 (Source Build Engine)
2.1. 개요
소스 빌드 엔진은 GitHub에 공개된 언리얼 엔진의 전체 소스 코드를 직접 다운로드하여 개발자의 PC에서 컴파일하는 방식입니다. 엔진의 모든 부분을 제어하고 수정할 수 있는 최고의 자유도를 제공하며, 주로 중/대규모 팀이나 특정 플랫폼으로의 이식, 엔진 커스터마이징이 필수적인 프로젝트에서 사용됩니다.
2.2. 특징
- 완벽한 커스터마이징: 엔진의 렌더링, 오디오, 물리, 네트워킹 등 모든 코드에 접근하고 수정할 수 있습니다. 회사나 프로젝트에 특화된 기능 추가가 가능합니다.
- 상세한 디버깅: 엔진 코드 전체에 대한 디버깅이 가능합니다. 게임 코드에서 엔진 함수를 호출했을 때, 그 함수 내부로 들어가(Step Into) 변수 상태와 실행 로직을 하나하나 추적할 수 있어 복잡한 버그를 해결하는 데 매우 강력합니다.
- 최신 기능 접근: 공식 릴리즈가 되기 전의 최신 변경 사항(commit)을 GitHub에서 바로 가져와 적용해볼 수 있습니다. (단, 불안정할 수 있습니다.)
- 전용 서버 빌드: 멀티플레이어 게임을 위한 C++ 기반 전용 서버(Dedicated Server) 빌드는 소스 빌드 환경에서만 가능합니다.
- 플랫폼 확장성: 기본적으로 지원하지 않는 플랫폼(예: 특정 임베디드 시스템)이나, Linux용 서버 빌드 등 공식 바이너리에서 제공하지 않는 빌드 타겟을 생성할 수 있습니다.
- 긴 초기 설정 시간: 수십 GB에 달하는 소스 코드를 다운로드하고, 전체 엔진을 컴파일하는 데 수십 분에서 수 시간이 소요될 수 있습니다.
2.3. 내부 구조 및 계층
소스 빌드 엔진의 폴더 구조는 모든 것을 포함합니다.
Engine/Source: 엔진의 모든 소스 코드가Runtime,Developer,Editor,Programs,ThirdParty등의 폴더에 체계적으로 정리되어 있습니다.GenerateProjectFiles.bat: 이 스크립트를 실행하면 UBT가 현재 시스템 환경과 소스 코드를 분석하여 Visual Studio 솔루션 파일(UE5.sln)을 생성합니다.UE5.sln: 생성된 솔루션 파일에는 엔진의 모든 모듈과 프로그램(에디터, UBT 등)이 프로젝트 형태로 포함되어 있습니다.
동작 계층 구조
- 사용자 영역 (User Layer):
- 사용자는 GitHub에서 언리얼 엔진 소스 코드 저장소(repository)를 클론(clone)하거나 압축 파일로 다운로드합니다.
Setup.bat을 실행하여 엔진 빌드에 필요한 추가 바이너리 파일들을 다운로드합니다.GenerateProjectFiles.bat을 실행하여 Visual Studio 솔루션 파일을 생성합니다.- Visual Studio에서
UE5.sln을 열고, 'Development Editor' 또는 'DebugGame Editor' 구성으로 'UE5' 프로젝트를 빌드하여 엔진을 컴파일합니다.
- 빌드 시스템 계층 (Build System Layer):
- 사용자가 Visual Studio에서 빌드를 시작하면, 내부적으로 Unreal Build Tool (UBT)이 호출됩니다.
- UBT는
Engine/Source폴더 내의 수많은 모듈들의 의존성을 분석하고 C++ 컴파일러(MSVC, Clang 등)를 호출하여 엔진 전체를 컴파일합니다. - 이 과정에서 Unreal Header Tool (UHT)이 모든 헤더 파일을 파싱하여 리플렉션(Reflection) 시스템에 필요한 코드(
*.generated.h)를 자동으로 생성합니다. - 컴파일이 완료되면
Engine/Binaries/Win64폴더에 사용자가 직접 빌드한 실행 파일과 라이브러리가 생성됩니다.
- 에디터/런타임 계층 (Editor/Runtime Layer):
- 사용자는 Visual Studio에서 직접 디버깅을 시작하거나(
F5), 생성된UnrealEditor.exe를 실행하여 커스텀 빌드된 에디터를 시작합니다. - 이 에디터 위에서 게임 프로젝트가 동작하며, 게임 코드와 엔진 코드가 모두 동일한 디버깅 세션 내에서 실행되므로 완벽한 상호 디버깅이 가능합니다.
- 사용자는 Visual Studio에서 직접 디버깅을 시작하거나(
3. 비교 분석
3.1. 비교표
| 항목 | 설치 버전 엔진 (Installed Engine) | 소스 빌드 엔진 (Source Build Engine) |
|---|---|---|
| 획득 방법 | 에픽게임즈 런처 | GitHub |
| 설치/설정 | 빠르고 간단함 (다운로드 후 즉시 사용) | 느리고 복잡함 (다운로드 + 컴파일 필요) |
| 엔진 수정 | 불가능 | 가능 (모든 소스 코드 접근 가능) |
| 디버깅 | 제한적 (게임 코드만 가능, 엔진은 콜 스택만) | 완전함 (게임과 엔진 코드 모두 Step-by-Step 디버깅 가능) |
| 전용 서버 | 불가능 | 가능 |
| 용량 | 상대적으로 작음 | 매우 큼 (소스 코드, 중간 파일, 심볼 등) |
| 업데이트 | 런처를 통해 간편하게 업데이트 | 수동으로 Git pull 후 전체 재컴파일 필요 |
| 주 사용 대상 | 초보자, 아티스트, 디자이너, 소규모 팀, 빠른 프로토타이핑 | 중/대규모 팀, 엔진 프로그래머, 특정 플랫폼/기능 요구 프로젝트 |
3.2. 언제 무엇을 사용해야 하는가?
설치 버전 엔진(Installed Engine) 경우:
- 언리얼 엔진을 처음 배우는 학생이나 개인 개발자: 복잡한 설정 없이 즉시 엔진의 기능과 워크플로우를 익히는 데 집중할 수 있습니다.
- 엔진 코드를 수정할 필요가 없는 프로젝트: 대부분의 게임은 엔진을 수정하지 않고도 블루프린트와 C++ 게임플레이 코드로 완성할 수 있습니다.
- 빠른 프로토타입 제작: 아이디어를 빠르게 구현하고 테스트하는 데 가장 효율적입니다.
- 아티스트, 레벨 디자이너 직군: 프로그래밍이나 빌드 과정에 신경 쓸 필요 없이 콘텐츠 제작에만 집중할 수 있습니다.
소스 빌드 엔진(Source Build Engine) 경우:
- 엔진의 특정 기능 수정/확장이 필요한 경우: 렌더링 파이프라인을 커스터마이징하거나, 물리 엔진의 동작을 바꾸거나, 에디터에 새로운 툴을 추가하는 등 코어 로직 변경이 필요할 때 필수적입니다.
- 엔진 레벨의 버그를 잡아야 할 때: 게임이 특정 엔진 코드에서 크래시되지만 원인을 알 수 없을 때, 소스 빌드를 통해 내부 깊숙이 디버깅해야 합니다.
- C++ 전용 서버(Dedicated Server)가 필요한 경우: 온라인 멀티플레이어 게임의 권위 있는(authoritative) 서버를 구축하려면 소스 빌드가 필요합니다.
- 팀 전체가 동일한 커스텀 엔진 버전을 공유해야 할 때: 대규모 팀에서는 버그 수정이나 기능 추가가 적용된 커스텀 엔진 버전을 빌드하여 모든 팀원이 동일한 환경에서 작업하도록 관리합니다.
- Linux 서버 빌드 등 공식 바이너리가 지원하지 않는 타겟이 필요할 때.
'Unreal' 카테고리의 다른 글
| EOS 보이스 인터페이스 (0) | 2025.12.26 |
|---|---|
| Unreal Engine 패키징 (0) | 2025.12.24 |
| 포스트 프로세스 볼륨 Post Process Volume (1) | 2025.12.19 |
| 레이 트레이싱 Ray Tracing (1) | 2025.12.18 |
| 온라인 서브시스템과 세션 인터페이스 (0) | 2025.12.17 |
