신입 개발자의 출근일지

[QA 출근 기록] 크래시가 불러온 나비효과: 탈것 소실과 UI 증발의 상관관계

creator2041 2025. 12. 31. 23:00

오픈월드 RPG를 개발하고 테스트하는 과정에서 우리는 수많은 '예외 상황'을 마주합니다. 오늘 제가 발견한 결함은 단순한 오류를 넘어, 게임의 상태 머신(State Machine)데이터 동기화가 얼마나 유기적으로(때로는 위험하게) 연결되어 있는지를 보여주는 사례였습니다.

신입 QA이자 예비 기획자의 시선으로, 이 기묘한 버그의 발생부터 원인 추적까지의 과정을 상세히 기록해 봅니다.


1. 사건 발생 (The Incident)

  • 환경: 오픈월드 RPG 개발 빌드 (에디터 환경)
  • 상황: 첫 번째 마을의 튜토리얼 성 퀘스트 완료 후 필드 이탈 시도.
  • 현상: 마을 외곽 경계선(로딩 트리거 구역) 진입 시 게임 클라이언트 즉시 강제 종료(Crash).

2. 수사 과정 (The Investigation)

Step 1. 데이터 유실 확인 (Missing State)

크래시 이후 재접속을 했을 때 첫 번째 이상 징후를 발견했습니다. 마을을 떠나기 전 분명히 타고 있었던 '탈것'이 사라진 것입니다.

  • 기획적 추측: 마을 이탈 시 발생하는 '자동 저장'과 '맵 전환 로직'이 충돌하면서, 캐릭터의 위치 정보는 저장되었으나 '탈것 탑승 상태값'은 유실된 것으로 보입니다. 즉, 서버와 클라이언트 간의 데이터 동기화가 깨진 비동기(Asynchrony) 오류의 시작이었습니다.

Step 2. 복구 시도와 2차 변수 (Secondary Bug)

사라진 말을 되찾기 위해 마을 안 마구간 NPC를 찾아갔습니다. NPC와의 대화 시퀀스를 강제로 발생시켜 상태를 갱신하려 했던 것입니다.

  • 수사 기록: 마구간지기와 대화를 나누고 승마 연출이 출력된 후, 캐릭터가 말을 탄 채로 월드에 복구되었습니다. 하지만 여기서 치명적인 2차 결함이 터졌습니다. 화면상의 모든 HUD(체력, 미니맵, 스킬 슬롯 등)가 사라졌고, 메뉴 버튼(ESC)이 전혀 작동하지 않았습니다.

Step 3. 예외 상황의 분리 (Action vs System)

여기서 중요한 포인트는 '무엇이 되고, 무엇이 안 되는가'를 구분하는 것이었습니다.

  • 작동함: 캐릭터 이동, 칼 뽑기(전투 태세), 공격 액션, 말 달리기.
  • 작동 안 함: 모든 UI 출력, 메뉴 진입, 상호작용 버튼.

이것은 단순한 그래픽 오류가 아니라, 시스템이 **'이벤트 시퀀스(대화 중)'**라는 터널에 갇혀 빠져나오지 못하고 있음을 의미했습니다.


3. 기획적 원인 분석 (Root Cause Analysis)

수사 결과, 이 연쇄 결함의 원인은 **'조건부 트리거의 누락'**으로 요약됩니다.

  1. 시퀀스 브레이크: 마구간 대화 시퀀스는 [UI 숨김] → [승마 연출] → [UI 복구 + 입력 해제] 순으로 작동해야 합니다.
  2. 의존성 충돌: 그런데 이전의 크래시로 인해 캐릭터가 '비정상적인 상태'로 플래그가 세워져 있었습니다. 시스템은 승마 연출이 끝났음에도 불구하고 **"아직 연출이 종료되지 않았다"**고 판단한 것입니다.
  3. 레이어 잠김(Input Block): 결과적으로 인게임 액션 레이어는 열렸지만, 시스템 레이어는 여전히 '이벤트 중' 상태로 잠겨버려 유저의 조작 권한을 돌려주지 않은 것입니다.

4. 수사 후기 및 QA 인사이트

이번 사례는 기획자에게 **'예외 처리(Exception Handling)'**가 얼마나 중요한지 다시금 일깨워줍니다.

  • E2E(End-to-End) 테스트의 가치: 디버그 툴로 강제 소환했을 때는 발견할 수 없었던 버그였습니다. 유저의 동선대로 일일이 걸어보고, 튕겨보고, 다시 접속해 보는 '수동 플레이'만이 잡아낼 수 있는 결함이었습니다.
  • 상태 관리의 엄격함: "튕겼으니까 다시 접속하면 되겠지"라는 안일한 생각은 데이터의 꼬임을 발생시킵니다. 어떤 시점에서 게임이 꺼지더라도 데이터를 안전하게 복구할 수 있는 **'세이프 가이드'**가 필요함을 절감했습니다.

[오늘의 교훈] 버그는 점이 아니라 선으로 움직인다. 크래시라는 점을 찍었을 때, 그것이 어떤 선을 그리며 게임 전체를 망가뜨리는지 추적하는 것. 그것이 QA의 핵심이자 기획자가 가져야 할 집요함이다.