프로젝트를 진행하면서 코드, 에셋 수와 더불어 팀 규모가 커지면 확장 문제가 발생할 수 있습니다. 에픽게임즈는 프로젝트를 최대한 원활하게 진행할 수 있도록 UE와 함께 다음을 위한 다양한 툴을 제공합니다.
엔진과 프로젝트를 팀에 배포하기
컴파일 및 패키징 시간 단축하기
프로젝트가 차지하는 하드 드라이브 공간 줄이기
버전 관리에서 업데이트된 코드 및 에셋을 가져올 때의 동기화 시간 단축하기
자동화된 빌드 파이프라인 설정하기
자동화된 테스트 파이프라인 설정하기
이는 모두 언리얼 엔진으로 작업할 때 각 팀원이 느끼는 마찰을 줄이고, 기능을 빌드, 테스트 및 변경하는 데 걸리는 반복작업을 줄이는 데 도움이 됩니다.
버전 관리 소프트웨어로 프로젝트 관리하기
버전 관리는 모든 게임 개발 프로젝트에서 필수적인 부분입니다. 버전 관리 서버는 중앙 집중식으로 프로젝트의 코드와 파일의 오소리티 있는 사본을 저장하고, 버전 관리 클라이언트는 팀원들이 이러한 파일에 액세스하고 업데이트할 수 있는 방법을 제공합니다. '저장소'는 명확하게 버전이 지정되고 버전 관리 서버에 저장된 파일 그룹이며, '워크스페이스'는 특정 저장소의 클라이언트 사본을 각각 저장하는 클라이언트 측 디렉터리입니다.
버전 관리 통합으로 다음과 같은 작업을 수행할 수 있습니다.
프로젝트의 사본을 로컬 컴퓨터에 가져옵니다.
코드와 에셋을 리뷰하고 커밋합니다.
업무 흐름을 분리하여 충돌을 방지합니다.
여러 팀원이 같은 파일에서 작업하지 못하도록 파일을 체크 아웃하거나 잠그거나 해제할 수 있습니다.
파일의 차이를 비교하고 병합합니다.
또한, 버전 관리는 저장소에 커밋된 변경사항의 실행 목록을 유지하므로 변경 때문에 문제가 발생하면, 이전 버전의 에셋이나 코드로 쉽게 롤백할 수 있습니다.
UE는 다음과 같은 버전 관리 통합을 지원합니다.
Perforce
GitLFS를 사용한 Git
Subversion
Diversion
에셋이나 코드 작업을 시작하기 전에 가장 먼저 프로젝트에 이러한 버전 관리 시스템 중 하나를 설정해야 합니다. 이러한 버전 관리 시스템을 모두 사용할 수 있지만, 에픽게임즈는 주로 Perforce를 사용하며, 이 가이드의 많은 기능이 UE의 Perforce 통합을 중심으로 설명됩니다. 프로젝트에 저장소가 있으면 콘텐츠 브라우저와 통합하여 언리얼 에디터에서 바로 파일을 체크아웃하고 관리할 수 있습니다.
UE에서 버전 관리를 사용하는 방법에 대한 자세한 내용은 [소스 컨트롤](understanding-the-basics\source-control) 페이지와 [언리얼 엔진에서 협업하기](setting-up-your-production-pipeline\collaboration-in-unreal-engine) 섹션을 참조하세요.
언리얼 게임 싱크를 사용하여 프로젝트 배포하기
언리얼 게임 싱크(Unreal Game Sync, UGS)는 팀원들이 프로젝트의 작업 빌드를 쉽게 다운로드하거나 컴파일할 수 있도록 Perforce, 언리얼 빌드 툴 및 IDE(해당하는 경우)와 연동하는 클라이언트입니다. 사용자는 UGS를 설정하고 나면 자신의 .uproject 파일을 선택하고 해당 프로젝트의 빌드 목록을 확인하고, 정상 작동하는 것으로 검증된 빌드를 찾을 수 있습니다. IDE가 설치되어 있으면 명령 한 번으로 소스 파일을 가져오고 빌드할 수 있습니다. 설치되어 있지 않다면 사전 빌드된 바이너리가 포함된 빌드를 찾아 다운로드할 수 있습니다.
자세한 내용은 UGS 문서를 참조하세요.
팀을 위한 오프라인 인스톨러 생성하기
엔진 소스를 포킹하고 커스터마이징했다면, 설치된 빌드를 생성한 후, 언리얼 엔진의 오프라인 인스톨러로 패키지를 만들 수 있습니다. 오프라인 인스톨러 생성에 대한 자세한 내용은 설치된 빌드 생성 및 설치된 빌드 레퍼런스 페이지를 참조하세요.
언리얼 엔진 모듈과 ICWYU로 과도한 C++ 컴파일 줄이기
프로젝트에 C++ 코드가 많을수록 IDE에서 컴파일하는 시간이 늘어납니다. 따라서 프로젝트가 진행됨에 따라 C++ 컴파일 시간이 늘어나는 것이 일반적입니다. 특히 대규모 프로젝트의 경우 프로그래머의 반복작업 시간이 늘어나 방해가 될 수 있습니다.
UE의 아키텍처는 이 문제를 완화하기 위해 코드를 모듈로 세분화합니다. 코드를 모듈로 정리하면 작업 중인 모듈의 코드만 리컴파일되고 다른 모듈은 그대로 유지됩니다. 모듈을 사용하면 다른 이점도 있는데, 자세한 내용은 언리얼 엔진 모듈 섹션과 에디터 모듈 페이지에서 확인할 수 있습니다.
UE의 코드베이스는 또한 IWYU(Include What You Use) 패러다임을 사용하며, #include 구문과 포워드 선언을 더 효율적으로 사용하여 빌드 시간을 단축할 수 있습니다. 자세한 내용은 IWYU(Include What You Use) 페이지를 참조하세요.
UAT, BuildGraph, 호드를 사용한 자동 빌드 생성
언리얼 에디터에서도 프로젝트를 패키징할 수 있지만, 언리얼 자동화 툴(UAT)의 BuildCookRun 명령은 패키지로 만든 빌드를 생성하는 기본 메커니즘이며, 운영 체제의 모든 명령줄 인터페이스에 사용할 수 있습니다. UAT에는 버전 관리 시스템에 각 제출물을 자동으로 컴파일하도록 빌드 서버를 설정하는 등, GUI를 사용할 수 없는 시나리오에서 빌드 프로세스를 자동화하는 데 유용한 스크립트가 많이 있습니다. UAT의 BuildCookRun 명령을 사용하여 직접적이고 간단한 방식으로 자신만의 자동화된 빌드 파이프라인을 스크립팅할 수도 있고, BuildGraph를 사용하여 더 상세한 자동화 빌드 시스템을 설정할 수도 있습니다.
호드(Horde)는 빌드 그래프 프레임워크 위에 구축된 강력한 지속적 통합 툴세트로, 빌드 상태를 모니터링하고, 태스크 트래킹 소프트웨어와 통합하고, 원격 테스트 기기를 관리하고, 상세 분석 및 로그를 제공할 수 있는 다양한 툴이 포함되어 있습니다. 추가적인 이점으로, 호드는 여러 서버 및/또는 워크스테이션에 작업을 분산하여 컴파일 속도를 높일 수 있는 언리얼 빌드 액셀러레이터(Unreal Build Accelerator, UBA)도 지원합니다.
빌드 파이프라인을 커스터마이징하려면 언리얼 빌드 시스템 섹션에서 자동화 툴과 빌드 툴에 대한 전체 레퍼런스를 참고하세요.
멀티 프로세스 쿡으로 쿠킹 시간 단축하기
빌드를 패키징하면 UE는 프로젝트의 에셋을 타깃 플랫폼에 맞게 쿠킹하여 해당 플랫폼과 호환되는 포맷으로 변환하고 사용자가 설정한 압축 세팅을 적용합니다. 일반적으로 쿠킹은 단일 프로세스이지만, 쿠킹 시간을 단축하려면 다중 프로세스 쿡을 활성화하고 사용하려는 동시 쿠킹 프로세스 수를 환경설정하면 됩니다. 자세한 내용은 멀티 프로세스 쿡 가이드를 참조하세요.
버추얼 에셋으로 에셋 관리 간소화하기
프로젝트의 에셋 수와 크기가 커질수록 팀원이 소스 컨트롤에서 각자의 프로젝트를 업데이트하는 시간이 급격히 느려질 뿐 아니라 프로젝트의 로컬 사본이 사용하는 하드 드라이브 공간도 늘어날 수 있습니다.
언리얼 엔진은 이 문제에 대응하기 위해 버추얼 에셋(Virtual Assets)을 지원합니다. 버추얼 에셋은 에셋의 콘텐츠 브라우저에 표시하는 데 사용되는 메타데이터와 에셋의 메인 데이터를 분리합니다. 팀원이 프로젝트를 동기화할 때는 전체 에셋보다 훨씬 적은 공간을 사용하는 메타데이터만 동기화합니다. 확인이나 변경을 위해 실제 에셋에 액세스해야 하는 경우, UE는 온디멘드로 팀의 저장소나 파생 데이터 캐시(Derived Data Cache, DDC)에서 벌크 데이터를 가져옵니다.
자세한 내용은 버추얼 에셋 문서를 참조하세요.
파생 데이터 캐시로 에디터 셰이더 컴파일 시간 단축하기
UE의 많은 에셋이 파생 데이터를 사용합니다. 예를 들어, 머티리얼을 생성할 때 언리얼은 그 머티리얼이 완전히 표시되기 전에 셰이더를 컴파일해야 합니다. 버전 관리 시스템의 파일에는 모든 플랫폼에 공통적이고 편집하기 좋은 셰이더를 생성하는 데 필요한 지침이 포함되어 있습니다. 파생 데이터는 별도의 개념과 메커니즘으로 존재하는데, 그 이유는 파생 데이터를 원본 데이터와 같은 파일에 저장할 경우 저장소가 부담스러울 정도로 커질 수 있고 컴파일된 셰이더의 정확한 포맷이 사용하는 하드웨어와 운영 체제에 따라 다를 수 있기 때문입니다. 프로젝트나 팀의 규모가 커질수록 큰 변경사항을 가져와야 할 때 프로세스가 번거로워질 수 있으며, 프로젝트를 처음부터 다운로드해야 할 때가 특히 그렇습니다.
파생 데이터 캐시(DDC)는 이러한 타입의 파생 데이터를 위한 보조 저장소 역할을 합니다. 어떤 사용자가 에셋을 컴파일하거나 쿠킹하면 파생된 데이터를 DDC에 추가합니다. 그러면 호환되는 하드웨어를 보유한 다른 사용자가 에셋을 동기화할 때 UE는 에셋과 파생된 데이터를 모두 가져올 수 있으므로 처음부터 다시 컴파일할 필요가 없습니다. 버전 관리와 달리 DDC는 일반적으로 제출된 모든 파일의 모든 버전을 유지하지 않고 지정된 한도까지 가장 최근 데이터만 보관합니다. 드물지만 누군가 아주 오래된 버전의 프로젝트를 체크아웃해야 하는 경우, 파생 데이터는 언제든지 다시 생성할 수 있습니다. 다양한 공유 DDC를 직원 기준으로 각기 다른 위치에 배포하고, 팀원들이 가장 빠르고 안정적인 소스에서 데이터를 가져올 수 있도록 액세스 방식에 대한 규칙을 정의할 수 있습니다.
DDC 사용에 대한 자세한 내용은 파생 데이터 캐시 문서를 참조하세요. UE는 여러 가지 공유 DDC 호스팅 메서드를 지원하지만, 에픽에서는 젠 스토리지 서버(Zen Storage Server)를 권장합니다.
자동화된 테스트로 테스트 확장하기
UE에는 다양한 컨텍스트에서 코드를 테스트할 수 있는 자동화된 테스트 프레임워크가 다양하게 준비되어 있습니다. 이를 통해 코드의 버그를 더 일찍 자주 탐지할 수 있으며, QA 테스터가 사용자 경험 문제에 더 집중할 수 있습니다. 자세한 내용은 자동화 테스트 프레임워크 섹션을 참조하세요.