kwivaro웹 도구
UNREAL · 실전 트러블슈팅

언리얼 Live Coding으로 되는 것과 안 되는 것

게임 클라이언트 개발자2026-09-106분

C++를 고쳤는데 에디터에 반영이 안 돼서 “왜 안 바뀌지?” 하고 시간을 버린 적이 몇 번 있다. 거의 다 Live Coding이 뭘 즉시 반영하고 뭘 못 하는지를 몰라서 생긴 일이었다. 규칙만 알면 재시작·재빌드 타이밍은 매번 바로 판단할 수 있다.

Live Coding이 하는 일

Live Coding은 실행 중인 에디터를 끄지 않고 바뀐 C++를 다시 컴파일해서 프로세스에 덧붙인다. 핵심은 ‘이미 로드된 상태 위에 얹는다’는 것이다. 그래서 기존 코드의 동작을 바꾸는 건 잘 되는데, 이미 로드된 구조 자체를 바꾸는 건 한계가 있다.

즉시 반영되는 것

  • 기존 함수의 본문(구현) 수정 — 계산식, 조건, 로그, 로직 변경
  • 함수 안에서의 값·분기 조정
  • 매크로가 아닌 순수 로직 변경 대부분

이건 컴파일하고 바로 PIE에서 확인하면 된다. 재시작 필요 없다.

안 되는 것 (재시작·풀 재빌드 필요)

리플렉션 등록이랑 메모리 레이아웃은 에디터 시작 시점에 이미 확정된다. 그래서 ‘구조’를 건드리는 건 Live Coding으로 핫패치가 안 된다.

  • UCLASS 추가
  • UPROPERTY / UFUNCTION 멤버 추가
  • 리플렉션되는 새 USTRUCT / UENUM 추가
  • 상속 구조나 멤버 레이아웃 변경

증상도 특징적이다. 컴파일은 성공했다고 뜨는데 새 클래스가 콘텐츠 브라우저나 BP에 안 보이고, 추가한 프로퍼티가 디테일 패널에 안 나온다. 이때는 에디터를 완전히 닫고 다시 빌드해야 한다.

헷갈리는 예외 — 네이티브 GameplayTag

‘새로 추가하는 건 다 재시작’이라고 외우면 여기서 한 번 틀린다. 네이티브로 선언하는 GameplayTag는 Live Coding으로도 즉시 등록돼서, 태그를 추가해도 재시작 없이 바로 쓰는 경우가 많다. 반대로 그 태그를 담는 새 UPROPERTY 자체를 추가했다면 그건 위 규칙대로 재시작이 필요하다.

Build.bat이 “Unable to build while Live Coding is active”로 막힐 때

에디터를 켜 둔 채로 외부 터미널에서 Build.bat을 돌리면 이 메시지로 실패한다. Live Coding이 대상 모듈을 잡고 있어서다. 방법은 둘이다.

  • 에디터 안에서 Ctrl+Alt+F11로 Live Coding 컴파일을 트리거한다.
  • 완전 재빌드가 필요하면 에디터를 종료한 뒤 Build.bat을 돌린다.

컴파일 오류 메시지가 짧게만 보이면 전체 로그는 여기서 본다.

%LOCALAPPDATA%\UnrealBuildTool\Log.txt

결국 이렇게 판단한다

  • 기존 함수 본문만 고쳤다 → Live Coding(또는 Ctrl+Alt+F11)으로 충분
  • 새 클래스·멤버·리플렉션 타입을 추가했다 → 에디터 종료 후 재빌드
  • 컴파일은 됐는데 에디터에 안 보인다 → 구조 변경이니 재시작
  • 외부 빌드가 막힌다 → 에디터 종료하거나 Ctrl+Alt+F11

정리하면 고친 건 Live Coding, 추가한 건 재시작이다. 딱 이 한 줄만 기억해도 헤매는 시간이 확 준다.