IDE에서 빌드
- Visual Studio / Rider 등에서 직접 빌드
- 구성: Development Editor, 플랫폼: Win64
- 에디터를 켠 채로도, 닫고서도 가능
언리얼에서 C++ 코드를 수정한 뒤 결과를 확인하는 방법은 크게 풀 빌드(Build) 와 라이브 코딩(Live Coding) 두 가지로 나뉩니다. 과거에는 그 사이에 핫 리로드(Hot Reload) 라는 방식도 있었습니다. 각각이 무엇을 하는지, 그리고 “언제 라이브 코딩으로 충분하고 언제 에디터를 닫고 풀 빌드해야 하는지”를 정확히 구분하는 것이 이 문서의 목표입니다.
빌드는 UBT(UnrealBuildTool) 가 C++ 소스 코드를 컴파일해 실행 가능한 모듈(에디터용 DLL 등) 로
만드는 과정입니다. 우리가 작성한 .h / .cpp 파일은 그대로는 엔진이 실행할 수 없고, 컴파일과 링크를
거쳐 바이너리 모듈로 바뀌어야 에디터와 게임에서 사용할 수 있습니다.
일반적으로 빌드는 다음 두 가지 흐름 중 하나로 이루어집니다.
IDE에서 빌드
에디터를 닫고 빌드
핫 리로드는 에디터가 실행 중인 상태에서 컴파일된 모듈 DLL을 통째로 교체하던 과거의 방식입니다. 새 DLL을 새로운 이름으로 만들어 메모리에 다시 로드하는 구조였는데, 객체 인스턴스와 리플렉션 데이터의 정합성이 깨지는 등 불안정한 문제가 잦았습니다.
라이브 코딩은 현재 언리얼이 권장하는 방식으로, 내부적으로 Live++ 기술을 사용합니다. 핵심 차이는 DLL을 통째로 교체하는 대신, 변경된 부분만 패치해서 이미 실행 중인 에디터에 반영한다는 점입니다. 덕분에 함수 본문을 고치는 정도의 작업은 매우 빠르고 강력하게 적용됩니다.
에디터를 켠 채로 다음 방법 중 하나로 실행할 수 있습니다.
// 이런 함수 "본문"만 고치는 경우 → 라이브 코딩으로 빠르게 반영void AMyActor::UpdateScore(){ // 예: 점수 계산 로직만 수정 Score += 10; // 변경 전 Score += 25; // 변경 후 (본문 수정 → Live Coding OK)}라이브 코딩은 함수 구현 변경에는 탁월하지만, 클래스의 구조나 리플렉션에 영향을 주는 변경에는 반영되지 않거나 불안정하게 동작할 수 있습니다. 아래 대비표를 기준으로 삼으면 헷갈리지 않습니다.
라이브 코딩으로 충분
에디터를 닫고 풀 빌드 권장
.h / .cpp 파일 추가.Build.cs, 모듈 의존성 변경아래는 라이브 코딩만으로는 안전하게 반영되지 않는 변경의 예시입니다.
UCLASS()class AMyActor : public AActor{ GENERATED_BODY()
public: // 새 UPROPERTY 추가 → 리플렉션/레이아웃 변경 UPROPERTY(EditAnywhere) int32 BonusScore = 0; // 멤버 추가 → 풀 빌드 필요
// 새 UFUNCTION 추가 또는 시그니처 변경도 마찬가지 UFUNCTION(BlueprintCallable) void ResetScore(); // 선언 변경 → 풀 빌드 필요};판단 기준은 단순합니다. “코드의 내용만 바뀌는가, 아니면 클래스의 모양(구조)이 바뀌는가” 를 물어보면 됩니다.
| 변경 종류 | 권장 방식 |
| --- | --- |
| 작은 로직 / 함수 본문 수정 | Live Coding |
| 멤버·시그니처 등 클래스 구조 변경 | 풀 빌드 |
| 리플렉션(UPROPERTY/UFUNCTION/UCLASS) 변경 | 풀 빌드 |
| 새 .h / .cpp 파일 추가 | 풀 빌드 |
| .Build.cs / 모듈 의존성 변경 | 풀 빌드 |
리플렉션이나 클래스 구조를 변경한 직후 에디터 동작이 이상하다면, 라이브 코딩이 변경을 제대로 반영하지 못한 것이 원인일 가능성이 높습니다. 이럴 때는 추측하지 말고 에디터를 닫고 풀 재빌드로 깨끗한 상태를 만든 뒤 다시 확인하는 것이 가장 확실합니다.