본문 바로가기

개발 공부 기록/UnrealEngine5

[UE5] 핫 리로드(Hot Reload)와 라이브 코딩(Live Coding) 테스트 및 정리

개요

예전에 UE4를 공부하고 프로젝트를 진행했을 때는 항상 코드를 수정하고 저장한 다음 에디터로 돌아오면 자동으로 컴파일을 시도때도 없이 해서 컴파일 타임이 난리가 났었는데 지금은 잠잠하다못해 아예 저장을 해도 반응이 없어서 왜 그런가 찾아보았다.

 

본문

여러 방면으로 검색 후 알게 된 사실은 기존에 사용하던 방식은 핫 리로드(혹은 핫 리로딩)라는 방식을 사용중이었다.

언리얼 엔진에서의 핫 리로드에디터가 열려있는 동안 개발자가 모듈을 컴파일 하면 에디터에서 이를 감지해 기존 모듈을 내리고 새 모듈로 바꾸는 작업을 수행하는 것을 의미한다.

문제는 에디터가 열려있는 상황에서 IDE를 통해 수정한 코드 내용을 컴파일 할 경우 종종 예기치 않은 문제들이 발생한다는 한계가 존재했다. 이를 해결하기 위해서 UE4.22 버전부터 라이브 코딩이라는 기능이 도입되었다.

라이브 코딩 에디터가 열려있는 상황에서도 C++ 코드를 리빌드하고 이를 통해 바이너리를 패치할 수 있는 시스템이라고 한다.

 

라이브 코딩 - 공식 문서

 

 

UE5.4에서는 라이브 코딩이 기본으로 활성화가 되어있는데 이를 설정하는 방법은 여러가지가 있다.

에디터 툴바 편집 -> 에디터 개인설정 -> 라이브 코딩에서 설정을 할 수 있고

에디터 우측 하단의 조각모음 같은 아이콘 버튼의 우측 더보기 버튼을 누르면 활성화를 설정할 수 있다.

C++ 코드를 편집한 이후 우측 하단 조각 모음 아이콘같은 라이브 코딩 버튼을 실행시켜주면 위와 같은 창이 나오며
성공 시 우측 하단에 라이브 코딩 성공이란 창이 나온다.

라이브 코딩 버튼은 기존 UE4에서의 컴파일 버튼의 역할도 대체하여 라이브 코딩을 비활성화 해줄 경우 일반 컴파일 기능을 수행한다.

 

라이브 코딩이 이렇게 보면 핫 리로드보다 수정 사항에 대해서 보다 빠른 속도로 반영되고 모든 면에서 완벽한 대체품처럼 보이지만 실상은 그렇지 않았다.

 

언리얼 엔진 프로젝트를 IDE에서 빌드를 수행할 경우 위의 4가지 파일(dll, modules, target, pdb)이 생성된다.

 

여기에서 라이브 코딩을 비활성화하고 기존 핫 리로드인 채로 컴파일을 수행해보았다.

핫 리로드인 경우 새로운 모듈이 기존의 모듈을 덮어 쓰지 않고 뒤에 숫자를 붙인 새로운 이름으로 생성이 된다.

이 파일들은 언리얼 에디터를 완전히 종료한 후 IDE에서 빌드를 수행하면 자동으로 제거가 된다.

 

그 다음으로 라이브 코딩을 활성화한 다음 IDE에서 수정 후 라이브 코딩을 수행해보았다.

변경 사항이 적용 될 때마다 patch_x 라하는 새로운 실행파일과 라이브러리 파일들이 생겨난다.

이러한 임시파일이 생겨나는 유사하다고 볼 수 있지만

왼쪽처럼 int32의 ID 변수를 추가하고 값을 입력해준 다음 라이브 코딩을 적용하고 레벨까지 저장하여 에디터를 껐다가 켰는데 오른쪽처럼 작업했던 내용이 저장되어 있지 않음을 확인할 수 있었다.

 

또한 에디터가 켜져있는 상태에서 IDE 빌드를 진행하면 'MSB3073' 오류가 발생하여 진행이 되지 않았다.

때문에 에디터와 IDE를 종료한 후 IDE만을 켜서 다시 빌드를 진행해보았다.

 

빌드를 했을 경우 마지막 라이브 코딩에서 적용했던 값이 잘 복원되어 저장이 되었다는 걸 확인할 수 있었다.

그러나 빌드를 수행했음에도 핫 리로드와 다르게 Binaries 폴더에 patch 파일들이 사라지지 않고 남아있었다.

이미 변경사항이 잘 적용이 되었기에 patch 파일들을 직접 제거해준 후 다시 수행을 해줬을 때도 적용은 잘 되어 있었다.

patch 파일들이 관리를 자주 해주지 않으면 용량 관리 측면에서 좋지 않을 것이기에 이러한 부분은 주의해야 할 것 같다.

 

결론

잦은 수정과 테스트를 하면서 빠르게 변경 사항을 확인해보고 싶다면 라이브 코딩을 사용하고
꼭 작업이 끝난 이후 에디터를 종료한 다음 빌드를 해주자.

그리고 난 후 잘 적용이 되어 있다면 patch 파일을 제거해주자.

 

라이브 코딩을 사용하지 않고 핫 리로드 방식을 사용한다면 이러한 임시 파일 관리 측면에서는 훨씬 편할 수도 있지만 프로젝트가 커지면서 간단히 주석 한 줄 다는데도 긴 컴파일 시간을 마주할 수도 있다.

이러한 차이점을 잘 이해한다면 상황에 따라서 라이브 코딩을 활성화/비활성화하여 잘 적용할 수 있을 것이다.