Data Validation으로 잘못된 데이터 찾기
26강. Data Validation으로 잘못된 데이터 찾기
1. 이번 강의에서 해결할 문제
에셋 이름 규칙과 필수 속성을 사람이 리뷰할 때마다 확인하면 누락이 반복됩니다. UI에서 경고만 띄우면 자동 빌드나 대량 검사에서 사용할 수 없습니다. 검증 결과는 Content Browser, 저장 시 검사, Commandlet에서 같은 기준으로 재현되어야 합니다.
2. 학습 목표
3. 핵심 개념
Data Validation은 에셋의 유효성을 Valid, Invalid, NotValidated로 표현합니다. 모든 UObject를 Load해 검사하면 대규모 프로젝트가 느려지므로 AssetData로 대상을 먼저 줄이고 필요한 에셋만 Load합니다.
UEditorValidatorBase의 함수 시그니처와 FDataValidationContext 사용법은 UE5 마이너 버전에서 확장된 적이 있습니다. 아래 코드는 최근 UE5의 AssetData·Context 기반 형태이며, 실제 프로젝트에서는 설치된 엔진의 EditorValidatorBase.h 선언을 최종 기준으로 맞춥니다.
4. 단계별 실습
#pragma once
#include "EditorValidatorBase.h"
#include "DataGuardNamingValidator.generated.h"
UCLASS()
class UDataGuardNamingValidator final : public UEditorValidatorBase
{
GENERATED_BODY()
public:
virtual bool CanValidateAsset_Implementation(
const FAssetData& InAssetData,
UObject* InObject,
FDataValidationContext& InContext) const override;
virtual EDataValidationResult ValidateLoadedAsset_Implementation(
const FAssetData& InAssetData,
UObject* InAsset,
FDataValidationContext& InContext) override;
};
#include "Validation/DataGuardNamingValidator.h"
#include "Engine/Blueprint.h"
#define LOCTEXT_NAMESPACE "DataGuardNamingValidator"
bool UDataGuardNamingValidator::CanValidateAsset_Implementation(
const FAssetData& InAssetData,
UObject* InObject,
FDataValidationContext& InContext) const
{
return InAssetData.AssetClassPath == UBlueprint::StaticClass()->GetClassPathName();
}
EDataValidationResult
UDataGuardNamingValidator::ValidateLoadedAsset_Implementation(
const FAssetData& InAssetData,
UObject* InAsset,
FDataValidationContext& InContext)
{
if (!IsValid(InAsset))
{
InContext.AddError(LOCTEXT(
"MissingObject", "The asset could not be loaded."));
return EDataValidationResult::Invalid;
}
const FString AssetName = InAssetData.AssetName.ToString();
if (!AssetName.StartsWith(TEXT("BP_")))
{
InContext.AddError(FText::Format(
LOCTEXT(
"BlueprintPrefix",
"Blueprint '{0}' must use the BP_ prefix."),
FText::FromString(AssetName)));
return EDataValidationResult::Invalid;
}
return EDataValidationResult::Valid;
}
#undef LOCTEXT_NAMESPACE
최근 엔진에서는 Validator가 Editor Subsystem에 자동 등록되는 C++ 기반 흐름을 제공합니다. Blueprint Validator 활성화 정책이나 Project Settings 항목은 엔진 버전에 따라 다를 수 있습니다.
Editor에서 에셋을 선택해 Validate Assets를 실행하고, 명령행에서도 같은 프로젝트를 검사합니다.
UnrealEditor-Cmd.exe ProjectName.uproject `
-run=DataValidation `
-unattended -nop4 -NullRHI `
-log=DataValidation.log
팀의 실제 엔진 경로와 프로젝트 이름으로 바꾸고 종료 코드뿐 아니라 로그의 Error·Warning 수를 저장합니다.
5. 코드가 동작하는 이유
CanValidateAsset이 Class Path만 보고 빠르게 후보를 제한하고, 선택된 Blueprint만 Load된 뒤 ValidateLoadedAsset이 이름 규칙을 검사합니다. Context에 추가한 오류는 Editor UI와 자동화 로그가 같은 의미를 공유하도록 합니다.
6. 자주 하는 실수와 해결법
7. 직접 실습
8. 이해 점검 질문 3개
9. 핵심 요약
Data Validation으로 잘못된 데이터 찾기 미니 퀴즈
선택 즉시 정답과 해설을 확인할 수 있습니다. 결과는 이 브라우저에만 저장됩니다.
학습을 마쳤나요?
직접 실습과 점검 질문까지 확인한 뒤 완료로 표시하세요.