Rust로 90년대 LAN 게임을 다시 만들며 마침내 배우기

발행: (2026년 3월 31일 AM 12:39 GMT+9)
8 분 소요
원문: Dev.to

Source: Dev.to

번역하려는 전체 텍스트를 제공해 주시면, 요청하신 대로 한국어로 번역해 드리겠습니다. (코드 블록, URL 및 마크다운 형식은 그대로 유지됩니다.)

소개

Cover image for I'm rebuilding a 90s LAN game in Rust to finally learn it

1990년대 후반, 형제와 사촌, 그리고 나는 한 대의 PC에 모여 Atomic Bomberman을 몇 시간씩 플레이했다. 화살표 키와 WASD, 팔꿈치가 부딪히고, 트래시 토크가 오갔다. 혼란스러우면서도 완벽했다.

최근에 그 게임을 많이 생각하게 된다. 단순히 향수 때문만이 아니라, 이번엔 인터넷을 통해 그들과 다시 플레이하고 싶다는 생각 때문이다. 그래서 나는 그것을 만들기로 결심했다.

처음에는 전체를 즉흥적으로 코딩하려는 충동이 있었다: 프레임워크를 고르고, AI에 의존하고, 주말에 무언가를 출시한다. 하지만 Gemini와 아이디어를 이야기하기 시작했고—그리고 나중에 주요 AI 멘토가 된 Claude와도—나는 더 흥미로운 무언가를 잡고 있다는 것을 깨달았다: Rust를 배울 수 있는 진정한 변명.

어려운 길

저는 시니어 풀스택 엔지니어입니다. 제 경력 대부분은 JavaScript 생태계—브라우저, Node, React, 전체 스택—에서 일해왔습니다. 이걸 TypeScript로 만들고 일요일까지 실행시킬 수 있습니다.

하지만 제가 보통 작업하는 추상화 레이어 아래에서 무슨 일이 일어나는지 궁금했습니다. 가비지 컬렉터가 잘못된 순간에 방해하지 않도록 기대하지 않아도 된다면 어떨까요? Rust는 오래전부터 제 리스트에 있었고, 60 Hz 서버 루프를 갖춘 멀티플레이어 게임이 최종적으로 뛰어들 이유가 될 것 같았습니다.

그래서 계획은 이렇게 바뀌었습니다: 서버는 Rust, 클라이언트는 React와 PixiJS, 그 사이에 WebSockets. 처음부터 멀티플레이어‑우선— 나중에 해체해야 할 싱글플레이어 프로토타입은 없습니다.

AI와 함께 배우기, AI를 통해 배우기 아님

저를 놀라게 한 부분입니다. 저는 Claude를 AI 멘토로 삼아 이 프로젝트를 시작했는데, 우리가 처음 마주한 문제는 기술적인 것이 아니라 프로세스였습니다.

Claude는 빨리 움직였습니다. 너무 빨리. 제가 아키텍처를 충분히 이해하기도 전에 바로 코드로 뛰어들곤 했습니다. 이해하지 못한 채 작동하는 코드를 얻게 되었고, 이는 본래 목표와 정반대였습니다. 우리는 멈추고, 한 걸음 물러서서 규칙을 정해야 했습니다.

결국 멘토‑리뷰 루프를 만들었습니다: AI가 목표를 명시하고 새로운 개념을 소개하면, 제가 코드를 작성하고 함께 검토합니다. 제가 막히고 요청할 때만 AI가 대신 코드를 작성합니다. 우리는 진행을 원활히 하기 위한 규칙을 마련했습니다.

목표는 게임을 가능한 한 빨리 완성하는 것이 아니라, 제가 실제로 플레이하고 싶은 무언가를 만들면서 Rust를 — 진정으로 — 배우는 것이었습니다.

Source:

내가 만들고 있는 것

이 게임은 멀티플레이어 Atomic Bomberman 클론입니다. 현재 작동 중인 부분은 다음과 같습니다:

  • 서버: Rust + Tokio, WebSocket을 통해 60 Hz 권한형 게임 루프 실행
  • 클라이언트: React + PixiJS, 서버가 전송하는 게임 상태를 렌더링
  • 게임플레이: 플레이어는 15×13 격자 위를 이동하고, 폭탄을 설치하며, 파괴 가능한 벽을 폭파하고, 파워‑업을 수집하고, 폭발에 맞아 사망합니다
  • 네트워킹: 클라이언트는 의도(방향, 폭탄 설치)를 전송하고, 서버가 진실을 결정합니다. 클라이언트가 게임 로직을 실행하지 않으므로 치팅이 불가능합니다

로컬호스트에서 플레이할 수 있습니다. 두 명의 플레이어가 연결되어 돌아다니며 서로에게 폭탄을 설치할 수 있습니다. 그래픽은 모두 색칠된 사각형이라 보기 좋지는 않지만, 메커니즘은 정상적으로 동작합니다.

Atomic Bomberman 게임플레이

앞으로의 내용

“localhost에서 작동한다”와 “형제와 사촌과 실제로 플레이할 수 있는 게임” 사이에는 큰 차이가 있습니다. 움직임이 더 부드러워야 합니다. 로비나 게임 흐름도 없습니다. 그리고 가장 큰 과제: 클라이언트‑사이드 예측을 구현해 실제 인터넷 연결에서도 답답함을 느끼지 않게 하는 것입니다.

이 시리즈에서는 여정을 다룹니다 — 제가 배우고 있는 Rust, 멀티플레이어 아키텍처 결정, 모든 것이 딱 맞아떨어지는 순간과 교착 상태가 조용히 게임을 멈추게 하고, 겉보기에 완벽해 보이는 코드를 한 시간 동안 바라보게 되는 순간들을 포함해서요.

다음 주제: 대부분의 경력을 JavaScript에 쏟아부은 당신이 Rust를 실제로 작성한다면 어떤 느낌일지.

0 조회
Back to Blog

관련 글

더 보기 »