정적 분석은 '불가능'이라 했지만, 실측은 렌더됐다
Gaussian Splatting(GS) — 실사 장면을 수많은 작은 가우시안으로 표현해 사진처럼 렌더하는 기법 — 을 시뮬레이터에서 쓸 수 있는지 조사하고 있었습니다. 코드와 바이너리를 샅샅이 뒤진 정적 분석의 결론은 단호했습니다. "이 빌드에선 불가능."
정적 분석의 4가지 'X'
근거는 빈틈없어 보였습니다.
도식 렌더링 중…
확장도 없고, 스키마도 등록 안 됐고, 렌더 바이너리에 관련 심볼도 안 보이고, 타입 핸들러도 없다 — 어느 모로 봐도 "불가능"이었습니다.
그런데 실제로 돌려 보니
여기서 멈추지 않고 실제로 한 번 돌려 봤습니다. 결과는 충격이었습니다 — 사진 같은 실내(인테리어)가 화면에 떴습니다. 렌더된 픽셀의 99.6%가 실제 콘텐츠였습니다.
도식 렌더링 중…
정적 분석이 100% 확신했던 결론을, 실측 한 번이 뒤집은 것입니다.
왜 정적 분석이 틀렸나
비밀은 예상과 다른 경로에 있었습니다. GS 데이터가 별도의 전용 확장으로 처리될 거라 가정했는데, 실제로는 표준 USD Volume prim에 커스텀 속성을 얹은 형태였고, 그걸 RTX의 볼륨 렌더 경로가 직접 처리하고 있었습니다. "전용 확장"을 찾던 정적 분석엔 안 보였을 뿐, 경로가 달랐던 것입니다.
💡 재현의 핵심 — 단일 GPU 핀 — 다만 멀티 GPU 환경에서 이걸 켜면 GPU 간 동기화가 교착(deadlock)에 빠졌습니다. 단일 GPU로 고정하니 안정적으로 렌더됐습니다. "안 된다"의 일부는 기능 부재가 아니라 환경 설정이었습니다.
교훈 — Instrument-First
이 사건은 디버깅 철칙 하나를 완벽히 보여줍니다 — 코드만 읽고 추측하지 말고, 한 번 돌려 데이터로 판단하라.
⚠️ 정적 분석의 자신감을 경계하라 — "확장 없음·스키마 없음·심볼 없음"은 강력한 증거처럼 보입니다. 하지만 그건 내가 가정한 경로에 없다는 뜻일 뿐입니다. 실제 경로가 다르면 정적 분석은 통째로 빗나갑니다. 비싸 보여도 실측 1회가 추측 10회보다 정확합니다.
이건 우리가 모든 런타임 버그에 적용하는 원칙이기도 합니다 — 추측→수정→실패→재추측의 늪 대신, 핵심 지점에 로그를 심고 1회 실행해 데이터로 가설을 세우는 것. GS 사건은 그 원칙이 기능 가능성 판단에서도 통한다는 증거였습니다.
한 줄 정리
📌 정적 분석(확장·스키마·심볼 전부 없음)은 "GS 불가능"이라 단언했지만, 실측 한 번이 사진급 렌더로 뒤집었다. 기능이 예상과 다른 경로(표준 Volume + RTX 볼륨 렌더)로 동작했을 뿐. 추측 10회보다 실측 1회 — instrument-first는 기능 가능성 판단에도 통한다.
