이전 절에서 우리는 언리얼 엔진에서 게임 시스템을 기획하고 구현하는 방법에 대해 알아보았습니다. 코드를 작성하고 기능을 추가하는 것은 개발의 핵심이지만, 완벽한 코드는 존재하지 않으며 예상치 못한 버그와 문제가 끊임없이 발생합니다. 이때 필요한 것이 바로 디버깅(Debugging)과 테스트(Testing)입니다. 이 두 과정은 게임의 품질을 확보하고 플레이어에게 안정적인 경험을 제공하는 데 필수적입니다.
이번 절에서는 언리얼 엔진 프로젝트에서 효과적인 디버깅 기법과 다양한 테스트 전략을 통해 게임의 버그를 찾아내고 수정하는 방법에 대해 자세히 살펴보겠습니다.
이 다이어그램은 버그를 재현하고, 로그와 브레이크포인트로 원인을 좁힌 뒤, 자동화 테스트로 회귀를 막는 흐름을 정리합니다.
디버깅은 코드의 오류를 식별하고 수정하는 과정입니다. 언리얼 엔진은 강력한 디버깅 도구들을 내장하고 있으며, 외부 IDE와의 연동을 통해 더욱 세밀한 디버깅을 가능하게 합니다.
~ 키)
~ 키를 눌러 콘솔을 열고 다양한 명령어를 입력하여 게임 상태를 확인하고 변경할 수 있습니다.stat fps: 현재 프레임 속도 표시stat unit: CPU 및 GPU 시간 통계 표시show collision: 콜리전 메시 시각화toggledebugcamera: 자유 시점 디버그 카메라 활성화ai.debug [PawnName/ControllerName]: 특정 AI의 디버그 정보 표시log LogTemp Warning: 특정 로그 카테고리의 출력 수준 변경 (실시간)Window -> Developer Tools -> Blueprint Debugger: 블루프린트 로직의 실행 흐름을 시각적으로 추적하고 변수 값을 확인할 수 있습니다.Window -> Developer Tools -> Visual Logger: 게임 실행 중 발생하는 이벤트, AI 행동, 이동 경로 등을 시각적으로 기록하고 나중에 재생하여 분석할 수 있습니다. 특히 복잡한 AI나 물리 시뮬레이션 디버깅에 유용합니다.LogVis 또는 LogVisualizer를 입력하여 활성화합니다.Window -> Developer Tools -> Session Frontend -> Profiler: 게임의 성능 병목 현상을 파악하는 데 사용됩니다. CPU 사용 시간, GPU 시간, 메모리 사용량 등을 상세하게 분석하여 최적화가 필요한 부분을 찾아낼 수 있습니다.stat startfile / stat stopfile 명령어를 사용하여 프로파일링 세션을 기록할 수 있습니다.Window -> Developer Tools -> Session Frontend -> Memory: 게임의 메모리 사용량을 스냅샷으로 찍어 분석합니다. 메모리 누수나 과도한 메모리 사용량을 찾아내는 데 도움이 됩니다.C++ 코드를 사용하는 프로젝트에서 가장 강력한 디버깅 도구입니다.
Step Over (F10): 현재 라인을 실행하고 다음 라인으로 이동합니다. 함수 호출 시 함수 내부로 들어가지 않습니다.Step Into (F11): 현재 라인을 실행하고, 함수 호출 시 해당 함수 내부로 진입합니다.Step Out (Shift+F11): 현재 함수를 모두 실행하고, 해당 함수를 호출한 곳으로 돌아갑니다.DebugGame Editor (에디터 내 디버깅) 또는 DebugGame (독립 실행 빌드 디버깅)으로 설정해야 심볼 정보가 포함되어 디버깅이 가능합니다.UE_LOG(LogCategory, Verbosity, TEXT("Your message here..."));: C++ 코드에서 특정 카테고리와 중요도(Error, Warning, Log, Verbose 등)를 지정하여 메시지를 출력합니다. 이는 Output Log 창과 로그 파일에 기록됩니다.Print String 노드: 블루프린트에서 디버그 메시지를 화면에 표시하거나 Output Log에 출력하는 가장 흔한 방법입니다.디버깅 도구는 증상의 위치가 월드 상태인지, 블루프린트 흐름인지, C++ 호출 경로인지에 따라 먼저 볼 화면이 달라집니다.
테스트는 게임이 의도한 대로 작동하고, 안정적이며, 플레이어에게 즐거운 경험을 제공하는지 확인하는 과정입니다.
Test 모듈을 사용하여 테스트 케이스를 정의합니다.Engine/Source/Runtime/Core/Public/Tests/ 폴더에 예시가 있습니다.AutomationTest.h: IMPLEMENT_SIMPLE_AUTOMATION_TEST 또는 IMPLEMENT_COMPLEX_AUTOMATION_TEST 매크로를 사용하여 테스트를 정의합니다.Session Frontend -> Automation 탭: 에디터에서 자동화 테스트를 실행하고 결과를 확인할 수 있습니다.개발팀 내부 또는 전문 QA 팀에 의해 수행되는 체계적인 테스트입니다.
디버깅과 테스트 결과는 버그 리포트, 자동화 테스트, 회귀 확인으로 이어져야 같은 문제가 다시 숨어들 가능성을 낮출 수 있습니다.
아래 다이어그램은 크래시, 블루프린트, AI, 성능 증상별로 먼저 볼 도구와 수정 후 잠글 테스트를 연결한 품질 기준입니다.
디버깅과 테스트는 게임 개발 과정에서 끊임없이 반복되어야 하는 필수적인 활동입니다. 언리얼 엔진이 제공하는 강력한 내장 디버깅 도구와 외부 IDE의 기능을 적극적으로 활용하여 코드 레벨의 문제를 해결하고, 유닛 테스트부터 QA 테스트, 그리고 플레이테스트에 이르기까지 다양한 테스트 전략을 통해 게임의 기능, 성능, 안정성, 그리고 재미를 검증해야 합니다. 효과적인 버그 트래킹과 관리는 팀의 생산성을 높이고, 궁극적으로 플레이어에게 고품질의 게임을 제공하는 데 기여할 것입니다.
증상을 재현하고 도구로 좁힌 뒤 테스트로 잠그는 순서를 한 장으로 정리합니다.
디버깅과 테스트에서는 재현 조건, 로그 카테고리, 브레이크포인트 위치, 자동화 테스트 범위를 함께 점검합니다.