WOOWACON 2025 미니게임 WOOWA POP! | 우아한형제들 기술블로그 (새 탭에서 열림)
우아콘 2025에서 선보인 '우아팝(WOOWA POP!)'은 단순한 이벤트를 넘어 기술적 무결성을 증명하기 위한 도전의 결과물입니다. 대규모 인원이 참여하는 랭킹 시스템에서 발생할 수 있는 조작 가능성을 차단하기 위해, 단순히 보안 솔루션을 덧붙이는 대신 게임의 동작 원리 자체를 보안 메커니즘으로 활용했습니다. 서버에서 클라이언트의 플레이 과정을 결정론적으로 재현하여 검증함으로써, 기술 콘퍼런스에 걸맞은 투명하고 공정한 게임 환경을 구축했습니다.
게임 보안과 수학적 증명
- 폰 노이만의 게임 이론에 따르면 모든 게임은 수학적 구조로 환원될 수 있으며, 해커는 이를 역공학하여 최적해(조작)를 찾아내는 존재입니다.
- 기존의 보안 방식이나 CAPTCHA는 게임의 재미를 반감시키거나 AI 기술의 발전으로 인해 점차 무력화되는 한계가 있었습니다.
- 수박 게임과 같은 물리 기반 퍼즐 게임은 수학적으로 NP-난해(NP-hard) 문제에 속하며, 답을 찾기는 어렵지만 주어진 답이 맞는지 확인하는 것은 쉽다는 특성을 가집니다.
- 이를 이용해 사용자가 보낸 최종 점수를 그대로 믿는 것이 아니라, 점수에 도달하기까지의 '과정'을 증명서처럼 제출받아 서버에서 검증하는 방식을 채택했습니다.
결정론적 물리 엔진의 구현
- 서버가 클라이언트의 플레이를 정확히 재현하기 위해서는 동일한 입력에 대해 항상 동일한 결과가 나오는 '결정론(Determinism)'이 보장되어야 합니다.
- 웹 환경의
Math.sin이나Math.cos같은 함수는 브라우저나 OS 엔진에 따라 미세한 오차가 발생할 수 있어, 이를 대체할 결정론적 수학 라이브러리를 사용했습니다. - 물리 엔진인 Matter.js를 활용하여 물체의 생성 위치, 시간(프레임), 충돌 계산 등을 정수 기반 혹은 오차 없는 계산 방식으로 통일했습니다.
- 클라이언트는 사용자의 조작 로그(아이템 투하 위치, 타이밍 등)를 기록하여 서버로 전송하고, 서버는 Node.js 환경에서 이 로그를 그대로 시뮬레이션하여 최종 점수의 일치 여부를 판단합니다.
14,570점의 등장과 검증의 실효성
- 행사 기간 중 약 2,000명의 사용자가 참여했으며, 서버 로그를 통해 모든 플레이 과정이 실시간으로 검증되었습니다.
- 운영 도중 물리적으로 도달하기 어려운 14,570점이라는 비정상적인 점수가 전송되었으나, 서버의 재현 시뮬레이션 결과 클라이언트가 보낸 점수와 일치하지 않음을 감지하여 자동으로 랭킹에서 제외했습니다.
- 이는 별도의 복잡한 보안 툴 없이도 게임 엔진의 결정론적 특성만으로 완벽한 부정행위 방지가 가능함을 입증한 사례입니다.
단순히 점수 데이터를 주고받는 방식에서 벗어나, 실행 과정을 서버에서 재현할 수 있도록 설계하는 것은 게임뿐만 아니라 높은 신뢰성이 필요한 다양한 웹 시스템에 응용될 수 있습니다. 특히 결정론적 설계를 통해 클라이언트와 서버의 상태를 동기화하는 기법은 복잡한 비즈니스 로직의 무결성을 확보하는 데 매우 강력한 도구가 됩니다.