피드로 돌아가기
The Hidden Complexity of Two-Player Browser Games — A Practical Guide to Keyboard Input
Dev.toDev.to
Frontend

NKRO 하드웨어 제약을 극복한 로컬 멀티플레이어 입력 아키텍처 설계

The Hidden Complexity of Two-Player Browser Games — A Practical Guide to Keyboard Input

Marvin Tang2026년 4월 30일9intermediate

Context

단일 키보드를 공유하는 브라우저 기반 2인용 게임에서 하드웨어적 N-key rollover(NKRO) 한계로 인한 입력 누락 및 Ghosting 현상 발생. 기존 브라우저 이벤트 처리 방식으로는 동시 입력 시 발생하는 물리적 제약과 OS 수준의 기본 동작 간섭을 해결하기 어려움.

Technical Solution

  • 하드웨어 Key Matrix 구조를 고려하여 WASD와 Arrow keys로 입력 영역을 물리적으로 분리함으로써 Ghosting 발생률 최소화
  • Keyboard Layout 및 Shift 상태에 영향을 받지 않는 물리적 위치 기반의 event.code를 채택하여 입력 일관성 확보
  • keydownkeyup 이벤트를 조합한 Set 기반의 Held Keys 추적 구조를 설계하여 상태 기반 이동과 전이 기반 액션을 동시에 처리
  • event.repeat 속성 또는 상태 추적 로직을 통한 중복 입력 필터링으로 액션 키의 단발성 실행 보장
  • 서비스 영향도가 낮은 특정 gameKeys 화이트리스트에 대해서만 preventDefault()를 적용하여 브라우저 기본 기능과 게임 입력 간의 충돌 방지

1. 입력 시스템 설계 시 `event.key` 대신 `event.code`를 사용하여 물리 키 매핑을 구현했는가?

2. 고가의 기계식 키보드가 아닌 저가형 Membrane 키보드에서 동시 입력 테스트를 수행했는가?

3. `preventDefault()`를 전체 적용하지 않고 특정 키 화이트리스트 기반으로 제어하고 있는가?

4. 액션 키 처리 시 `event.repeat` 또는 별도의 상태 Set을 통해 중복 실행을 방지했는가?

원문 읽기