티스토리 뷰

게임 상용 엔진 중 Unreal Engine에서는 라이브 코딩 기능을 통해서 프로그램 동작 중에 실시간으로 유저가 프로그램을 편집하고 적용할 수 있는 편리함을 제공합니다. 이 덕분에 유저가 빠르게 코드를 편집하고 재가공한 것을 쉽게 확인할 수 있습니다.

 

이러한 기능을 현업에 도입하면 좋겠다는 생각이 들어 이와 관련된 기능들을 공부하려던 찰나 우연히 마이크로소프트에서 핫 리로딩 기능을 지원한다는 정보를 찾게 되어 이를 포스팅하고자 합니다.

 

 

 

개요


 

Visual Studio에서 제공하는 핫 리로드 기능은 2022 버전부터 지원하는 기능(feature)로, 문서에 따르면 핫 리로드를 다음과 같이 설명합니다:

사용자의 애플리케이션 코드 파일을 편집하고 즉시 코드 변경 사항을 동작 중인 어플리케이션에 적용할 수 있습니다, 이를 핫 리로드(hot reload)라고도 부릅니다.

변경점이 적용되면 사용자의 코드를 앱 자체에서 작업을 수행하여 재실행하여 변경사항을 즉시 확인할 수 있습니다. 이 때 중단점으로 앱을 일시중지할 필요가 없습니다

 

현재 닷넷 프레임워크 및 C++에 대해서 지원하고 있는 것으로 보이며, Visual Studio의 핫 리로드 기능에 대해 자세히 살펴보고자 한다면 링크를 참고하시기 바랍니다:

 

Write and debug code by using Hot Reload - Visual Studio (Windows)

Hot Reload, similar to edit and continue, allows you to make changes to your code while running apps

learn.microsoft.com

 

 

 

사용법


 

핫 리로드 기능을 사용하기 위해서는 간단한 설정을 해주어야 합니다.

 

먼저 핫 리로드 기능을 적용하고자 하는 프로젝트의 속성 페이지를 들어갑니다.

그림 1. 핫 리로드 활성화를 위한 그림 1

 

이후 구성 속성 - C/C++ - 일반에서 디버그 정보 형식을 편집하며 계속하기 프로그램 데이터베이스(/Zl)로 설정합니다.

그림 2. 핫 리로드 활성화를 위한 그림 2

 

이제 프로그램을 실행하여, 핫 리로드 기능이 동작하는지 살펴보겠습니다. 예전에 임시로 만둔 계산기 프로젝트를 들고 테스트해보겠습니다. 

그림 3. 예제 프로젝트 계산기 소스 코드 및 디버깅 실행 화면

 

예제 코드는 탈출할 방법이 없는 무한 루프에 사용자가 값을 2개 넣어주면 그것에 대한 덧셈 및 곱셈 결과를 콘솔창에 알려줍니다. 그림에서 1과 3을 넣었더니 덧셈의 결과로 4, 곱셈의 결과로 3이 나온 것을 확인할 수 있습니다.

 

그런데 계산기가 잘 돌아가는 것은 확인했는데, UI/UX가 너무 허술해서 코드를 보지 않으면 결과값을 해석하는 게 쉽지 않을 것 같아서 내용을 보강하려고 합니다. 4가 덧셈 결과라는 것과 3이 곱셈 결과라는 것을 표현해주면 좋을 것 같습니다. 이것을 디버깅 모드를 유지한 채로 코드를 다음과 같이 수정합니다.

그림 4. UI/UX가 사소하게 개선된 코드를 디버깅 도중에 추가

 

이후 아래 그림에서 빨간 네모 박스 안에 있는 핫 리로드 아이콘을 클릭하면 코드를 디버깅 모드에서 재컴파일하는 것을 볼 수 있습니다.

그림 5, 6. 핫 리로드 기능을 수행한 모습

 

이렇게 성공한 것을 볼 수 있습니다(급하게 만든 예제라 템플릿 관련 형변환 경고는 애교로 봐주시면 감사하겠습니다 XD). 그렇다면 콘솔로 돌아가 다시 새로운 입력 15 12를 넣어보겠습니다.

그림 7. 새 입력값 15, 12를 입력한 모습

 

정상적으로 핫 리로드 기능이 수행되어 덧셈 결과와 곱셈 결과를 표시해주고 있습니다.

 

 

 

사용 후기


 

이렇게 핫 리로드 기능을 이용하는 방법을 간단히 알아봤습니다. 간단한 예제를 통해 설명했기 때문에 복잡한 코드가 얽혀있는 현업 및 실제 프로젝트에서 적용하는 것은 힘들지 않냐고 생각하실 수 있지만, 현업에서 몇 주간 사용해본 결과 대부분의 경우 문제없이 잘 작동하는 것을 확인할 수 있었습니다.

 

특히 게임의 경우, 단순 색상 변경 또는 UI 위치 변경을 위해서 인스턴스를 끄고 코드를 수정하고 다시 실행시키면 게임 내에서 BI, CI 보여주고 로딩창에서 로그인하고 캐릭터 선택하고 인게임 월드에서 확인하는데까지 어마어마한 시간이 걸리는데요. 핫 리로드는 이런 부분에서 생산성을 올려주는 강력한 기능이라고 생각됩니다.

 

 

핫 리로드 기능의 경우 매번 코드를 수정하고 버튼 딸깍 누르는 것이 귀찮으면 위 아이콘 우측의 드롭다운 아이콘을 눌러 파일 저장 시 핫 다시 로드 기능을 활성화하면 파일 저장과 동시에 리컴파일이 이뤄지는 편리함을 가져갈 수 있습니다.

그림 8. 파일 저장 시 핫 다시 로드

 

또한 핫 리로드 기능은 모든 상황에서 다 사용할 수 있는 것은 아닌데, 상속 구조의 변경 등이나 템플릿 등에 제약이 있는 것으로 판단됩니다. 이에 대한 자세한 내용은 마이크로소프트의 문서에서 확인하실 수 있습니다. 마이크로소프트 측에서도 핫 리로드 기능에 대한 영상을 제공하고 있으니, 링크를 통해 참고하시기 바랍니다.

 

 

 

레퍼런스


Microsoft Learn - Write and debug running code with Hot Reload in Visual Studio (C#, Visual Basic, C++)

 

댓글