제한된 공간에서만 느껴지는 특유의 지루함이 있다. 학교 컴퓨터실, IT가 꽉 잠가놓은 회사 네트워크, "보안"이라는 이유로 인터넷 절반을 막아놓은 공공 와이파이가 있는 대기실 같은 곳들. 나는 그 지루함을 꽤 오래 겪었다. 지금의 게임을 만들기 위해 코드 한 줄이라도 쓰기 훨씬 전부터.

시작은 별거 아니었다. 브라우저에서 하는 우주 슈팅 게임을 좋아했는데, 10분 쉬는 시간에 잠깐 열어서 머리 식히고, 장애물 피하고, 이전 점수 깨고, 탭 닫는 식으로 즐기던 게임이었다. 그런데 회사에서는 네트워크 필터에 걸려버렸다. 차단. 몇 달 뒤 학교 컴퓨터로 친구에게 보여주려 했을 때도 똑같은 일이 벌어졌다. 네트워크는 달랐는데 벽은 똑같았다.
"회사를 차려야겠다" 같은 생각은 전혀 없었다. 그냥 "이게 왜 이렇게 짜증나지, 실제 위협을 막으려는 필터에 왜 이런 작은 게임이 걸리는 거야" 하는 생각뿐이었고, 그러다 문제없이 돌아가는 나만의 버전을 만들려면 뭐가 필요할지 궁금해지기 시작했다.
솔직히 말하면 방법을 몰랐다. 기본적인 스크립트 정도는 짤 줄 알았고 HTML도 조금 만져봤지만, 실제 게임 개발과는 거리가 멀었다. 그래서 며칠 밤을 그냥 자바스크립트를 처음부터 다시 배우는 데 썼다. 이번에는 튜토리얼 코드 짜깁기가 아니라 제대로 이해하면서. Canvas API로 방향을 빨리 잡았는데, 플러그인이나 다운로드 없이 탭에서 바로 실행되는, 네트워크 관리자가 막을 이유가 없는 가벼운 무언가를 만들고 싶었기 때문이다.
이걸 순전히 혼자 힘으로, 기억만으로 해냈다고 말하진 않겠다. 이 시기에 Claude를 많이 썼는데, 주로 뭘 잘못하고 있는지 무작정 고치는 대신 제대로 이해하기 위한 용도였다. 예를 들어 왜 어떤 화면에서는 우주선 움직임이 뚝뚝 끊기고 다른 화면에서는 멀쩡한지 같은 문제였는데, 알고 보니 프레임 속도에 의존하는 문제였다. 이건 직접 질문하고 fixed timestep이라는 개념을 설명받기 전까지는 존재하는지도 몰랐던 문제다. 실제 코드 작성과 수정에는 Cursor를 많이 썼는데, 덕분에 아이디어를 빠르게 시험해보고 절반은 버리고 괜찮은 것만 남기면서도 매번 설정에 시간을 낭비하지 않을 수 있었다.
이 과정을 거쳤다고 하루아침에 게임 개발자가 된 건 아니다. 다만 내가 원하는 속도로 반복 작업을 따라와줄 도구들이 생겼을 뿐이고, 독학으로 배우는 입장에서는 그게 완성과 포기를 가르는 차이였다.
게임 자체는 의도적으로 단순하게 유지했다. 작은 우주선을 조종해서 시간이 지날수록 빨라지는 장애물 웨이브를 뚫고 나가고, 좌우로 피하면서 가끔 파워업을 집어 이전 점수를 깨려고 하는 게 전부다. 뒤질 메뉴도 없고 먼저 봐야 할 튜토리얼도 없다. 페이지에 들어오면 이미 플레이 중이다. 이 단순함은 게으름이 아니라 핵심 그 자체였다. 누군가의 하루에서 2분짜리 틈을 채우려는 물건이라면 로딩 화면이나 팝업으로 그 틈을 갉아먹어서는 안 된다.
움직임을 제대로 느껴지게 만드는 데는 생각보다 오래 걸렸다. 처음 작동하던 버전은 뭔가 이상했는데 처음엔 뭐가 문제인지 말로 설명하기 힘들었다. 너무 붕 뜨는 느낌이거나, 방향키를 누르면 과도하게 반응하는 식으로, 시각적으로는 멀쩡해 보여도 게임을 싸구려처럼 느껴지게 만드는 자잘한 것들이 쌓여 있었다. 여러 밤을 그냥 가속도와 감속 값을 조정하는 데 썼고, 내 노트북에서 테스트한 다음 성능이 별로인 오래된 노트북에서도 어떻게 느껴지는지 확인했다. 앞서 말한 fixed timestep 변경이 결국 가장 큰 차이를 만든 수정이었다. 게임이 물리 연산을 업데이트하는 빈도와 화면을 그리는 빈도를 분리한 것이다. 그 전에는 모니터 주사율에 따라 게임이 다르게 돌아갔는데, 프로그래머가 아닌 친구들에게 "왜 내 컴퓨터에서는 느낌이 이상한데 너는 아니냐"는 질문을 설명하기 참 애매한 버그였다.
내가 가장 신경 썼던 부분, 애초에 이걸 시작한 이유는 빠르게 로딩되고 제한된 네트워크에서도 걸리지 않게 만드는 것이었다. 그러려면 무거운 프레임워크나 서드파티 임베드, 학교나 회사 필터에 걸리기로 유명한 것들을 멀리해야 했다. 순수 자바스크립트, 가벼운 에셋, 최소한의 외부 요청. 기술적으로 멋있어 보이려는 게 아니라, 공유 네트워크에서 로딩에 8초 걸리는 게임은 잠깐 쉬고 싶었던 사람을 이미 잃은 것이기 때문이다.
내 회사의 제한된 네트워크에서 집요하게 테스트했다. 필요해서이기도 했고, 이 모든 걸 시작하게 만든 그 벽을 마침내 넘었다는 소소한 만족감 때문이기도 했다.
어느 순간부터 이건 더 이상 나만의 것이 아니게 되었다. 동료가 링크를 물어봤고, 그 동료의 친구가 물어봤고, 그렇게 사람들이 그냥 쉽게 즐길 게임을 서로 보내주는 조용한 방식으로 퍼져나갔다. 사람들이 실제로 남긴 반응을 바탕으로 계속 수정했다. 모바일 터치 컨트롤을 다듬고, 첫 로딩을 늦추는 요소를 걷어내고, 90초의 여유 시간 말고는 아무것도 할 게 없는 사람에게만 의미 있는 자잘한 수정들이었다.
결국 이 프로젝트는 이름과 자리를 갖게 되었다. Space Waves라는 이름으로 지금은 spacewaves2.net에 자리 잡고 있고, 어디에 갇혀 있든 즉시 로딩되고 마찰 없이 플레이된다는 처음 그 아이디어를 여전히 그대로 담고 있다.
여기서 뭔가 배울 게 있다면, 아마 내가 만든 것 중 가장 쓸모 있었던 것들은 시장을 조사해서 나온 게 아니라는 점일 것이다. 작고 사소한 것에 개인적으로 짜증이 나서, 일단 나부터 고쳐보겠다고 고집을 부린 데서 나왔다. Claude는 내가 뭘 하고 있는지 이해하게 해줬고 Cursor는 실제로 그걸 해내게 해줬다. 짜증과 완성된 결과물 사이의 거리를 예전보다 훨씬 짧게 만들어줬을 뿐이다. 아이디어 자체는 그저 안 좋았던 점심시간, 막혀버린 탭 하나에서 시작됐다.