그냥 하면 된다:
RiftAtlas 만들기
6개월 전, 나는 RiftAtlas를 만들기 시작했다. 처음부터 모든 것을 이해하려 들었다면 지레 겁먹고 시작조차 못 했을지도 모를, 야심 찬 팬 프로젝트였다. 이 글은 그 프로젝트가 어떻게 시작됐고, 사람들이 쓰기 시작한 뒤 무슨 일이 벌어졌으며, 거기서 어떻게 성장해 왔는지에 대한 이야기다.
나는 이 판들을 지켜보기만 했지, 정말로 참여하지는 않았다.
무언가에 빠지면 나는 그 주변의 콘텐츠를 잔뜩 소비하는 편이다. 게임, 스타트업, 만들기(building)도 다르지 않았다. 팟캐스트, 런칭 포스트, 아키텍처 후기, 창업자 스토리, 그리고 자기 작업을 공개적으로 공유하는 사람들을 따라다녔다. 그 덕에 그 커뮤니티들과 연결되어 있다는 느낌은 받았지만, 나는 대부분 구경꾼이었다. 그 시간이 낭비였다고 생각하지는 않는다. 다만 다른 사람이 무언가를 만드는 걸 지켜보는 것이 내가 직접 무언가를 만드는 것의 대체물은 아니었다. 보는 것에서 하는 것으로의 그 전환이 바로 이 글의 제목이 Aaron Francis에 대한 오마주인 이유이기도 하다. 그는 같은 마인드셋에 대해 많이 이야기해 왔다: 그냥 하면 된다(you can just do things).
여러 트레이딩 카드 게임을 온라인으로 플레이할 수 있는 브라우저 기반 플랫폼인 TCG Arena에서 Riftbound를 플레이하면서 이미 여러 아이디어가 있었다. 2월 8일, 아직 프로젝트를 저울질하던 중에 Riftbound 커뮤니티에 전용 시뮬레이터라면 무엇을 원하겠는지 물었다. 이틀 뒤, 첫 커밋을 했다. 그리고 정확히 6개월 뒤인 오늘 이 글을 발행한다.
기술 컨설팅과 소프트웨어 개발로 보낸 세월, 그리고 스타트업 창업 경험 덕에, 첫 버전조차 보통은 얼마나 많은 작업량이 드는지에 대한 감은 어느 정도 있었다. AI 코딩 도구가 그 '현실적으로 가능한 것'의 기준을 바꿔 놓았다. 이미 많이 써 보긴 했지만, Codex는 진짜 한 단계 도약처럼 느껴졌다. 그전에 써 본 도구들보다 훨씬 독립적으로 일할 수 있었기 때문이다. 덕분에 과정이 한결 매끄러워졌고, 시뮬레이터를 직접 만들어 보겠다는 자신감도 생겼다.
내가 훨씬 덜 생각해 본 것은 첫 버전 이후에 따라올 모든 것들이었다. 마케팅과 운영부터 스케일링, 그리고 들어갈 총 시간과 돈까지. 처음의 나는 그저 내가 쓰고 싶은 제품을 만드는 데만 집중했다. 만약 모든 것을 미리 계산하려 들었다면, 아예 시작하지 못했을지도 모른다.
내가 만들고 싶은 경험이 무엇인지는 알고 있었다.
RiftAtlas에서의 플레이는 매끄럽고, 명확하고, 따라가기 쉬워야 했다. 나는 온라인 플레이를 어색하게 만드는 작은 순간들에 집중했다. 실수를 되돌리는 것, 반복되는 루틴 액션을 처리하는 것, 상대에게 내가 무엇을 하려는지 보여주는 것 같은 순간들이다.
첫 릴리즈는 거의 전적으로 그 경험에만 집중했다. 계정도, 덱 빌더도, 저장된 덱도 없었다. 플레이어는 가입 없이 쓸 수 있었고, 플레이하고 싶을 때마다 그때그때 덱을 임포트했다.
초기 기술 결정은 빠르게 내렸지만, 그 5주의 대부분은 첫 버전의 사용감을 다듬는 데 쏟아부었다. AI 코딩 도구에 등장하기 시작한 더 에이전틱한 능력들 덕분에, 길고 여러 단계짜리 작업을 스스로도 놀랄 만한 속도로 쳐낼 수 있었다. 모델은 일의 어떤 부분에서는 다른 부분보다 훨씬 뛰어났지만, 여전히 밀착 지휘와 충분한 반복이 필요했다. 특히 UI가 그랬다. 첫 릴리즈가 미완성처럼 느껴지는 것만은 원치 않았기 때문이다. 그 속도가 일의 총량을 줄여 주지는 않았다. 나는 남는 여력을 RiftAtlas를 더 야심 차게 만드는 데 썼다. 작업은 격렬했고, 아주 재미있었다.
시작하고 약 5주 뒤, 첫 버전을 릴리즈하고 Reddit에 공개를 알렸다.
사람들이 나타나기 시작했다.
Reddit 발표는 빠르게 주목을 받았다. 팬이 만든 시뮬레이터가 Riot의 규정 안에 어떻게 들어맞는지에 대한 논쟁도 좀 일었다. 놀라웠던 건 그 관심이 포스트 이후에도 이어졌다는 점이다. 사람들이 웹사이트를 찾아오고, Discord 서버에 들어오고, 내가 다른 데서 딱히 홍보하지 않는데도 RiftAtlas를 남들에게 공유했다. 사이트는 하루 방문자 수백 명에서 금세 1천 명 안팎이 되었다. 그것만으로도 이미 굉장히 많은 사람처럼 느껴졌다.
비슷한 시기에 Khasino가 영상에서 RiftAtlas를 소개했고, 곧이어 Silent Knight가 리뷰와 사용법 영상으로 뒤를 이었다. 내 발표 바깥에서 입소문이 퍼지는 것을, 그리고 사람들이 RiftAtlas를 쓰고 즐기는 것을 지켜보는 건 정말 근사한 기분이었다.
유저가 늘어나자 제안과 버그 리포트도 늘었다. 나는 응답하고, 고치고, 사람들이 다음으로 무엇을 원하는지 들을 수 있었다. 활발한 커뮤니티가 붙어 있는 프로젝트를 만들어 본 건 처음이었다. B2B 맥락에서 피드백을 모으고 유저를 위해 만드는 일에는 익숙했지만, 보통 훨씬 작은 그룹이 대상이었다. 공개 커뮤니티가 RiftAtlas를 논의하고, 문제를 보고하고, 내가 다음에 무엇을 작업할지에 영향을 주는 건 아주 다른 경험이었다.
커뮤니티의 반응은 즉각적이었지만, 운영상의 문제들은 좀 더 서서히 드러났다. 트래픽이 늘면서 스케일링 이슈와 운영 비용이 일상 업무의 일부가 되었다.
더 많은 사람이 RiftAtlas를 쓰면서, 일이 늘어났다.
이제 지탱해야 할 매치가 더 많아졌고, 응답해야 할 리포트와 제안이 더 많아졌으며, 관리해야 할 인프라 비용도 올라갔다. 시뮬레이터를 개선하는 일은 여전히 중요했지만, 더 이상 일의 전부가 아니었다.
Discord 서버가 커지면서 모더레이터를 찾기 시작했다. Brandon은 그렇게 나서 준 사람 중 하나였고, 시간이 지나며 RiftAtlas 운영에 훨씬 깊이 관여하게 되었다.
시뮬레이터 개선
새 기능과 다듬기는 여전히 중요했지만, 이제 버그 하나하나가 점점 늘어나는 유저들에게 영향을 미쳤다.
매치를 계속 굴리기
매치 볼륨이 커지면서 신뢰성과 성능이 일상 업무의 일부가 되었다.
커뮤니티 지원
피드백, 버그 리포트, 모더레이션, 다음에 무엇을 작업할지 정하는 일 모두에 손이 필요했다.
성장을 지속 가능하게
인프라 비용이 빠르게 올라, 다른 셋업이 필요해졌다.
비용은 가장 시급한 운영 문제가 되었다. 읽기와 쓰기를 줄이는 것만으로는 부족해지자, 백엔드를 매니지드 서비스에서 내가 직접 운영하는 인프라로 옮겼다. 처음에는 비용이 크게 떨어졌지만, 사용량이 늘면서 신뢰성이 나빠졌고 인프라 비용도 다시 올라갔다. 이것이 장기적 해법이 아니라는 것이 곧 분명해졌다.
RiftAtlas는 첫 버전을 훨씬 넘어서 성장해 있었다.
그 이전(migration)은 시간을 벌어 줬지만, 성장은 계속해서 그 한계를 드러냈다. 장기 문제를 풀려면 또 한 번의 자잘한 개선 이상의 것이 필요했다.
가장 큰 변화는 라이브 매치가 돌아가는 방식이었다. 새 아키텍처는 각 매치에 격리된 자기만의 룸을 부여해서, 하나의 중앙 게임 프로세스를 공유하는 대신 매치들이 독립적으로 스케일할 수 있게 한다.
이것은 대규모 재작성이었고, 내가 출발했던 것과는 근본적으로 다른 모델이었다. 전환 초기에는 문제가 꽤 많았지만, 훨씬 나은 기반을 얻었다. 더 많은 작업과 반복 끝에 새 모델은 안정적이고 신뢰할 수 있게 되었다.
RiftAtlas의 나머지 부분에서도 개발은 계속되었다. 원래 애플리케이션의 거의 모든 부분이 결국 교체되거나 대대적으로 재작업되었다. 계정, 덱 빌더, 저장된 덱처럼 첫 릴리즈에서 빠져 있던 조각을 채워 넣는 변화도 있었고, 기존 기능을 재설계하거나 보이지 않는 곳의 동작 방식을 바꾸는 변화도 있었다.
비용을 감당 가능하게 유지하려면 다른 곳의 변화도 필요했다. 웹사이트가 콘텐츠를 로드하는 방식과 에셋을 전달하는 방식이 여기에 포함됐다.
프로젝트는 더 넓은 Riftbound 커뮤니티와도 점점 더 연결되어 갔다. Brandon의 역할은 계속 커졌고, 이 판에서 크리에이터들과 다른 프로젝트를 운영하는 사람들이 협업 방안을 놓고 연락해 오기 시작했다.
그 모든 재작업에도 불구하고, 첫 버전을 빠르게 릴리즈한 것이 옳은 결정이었다고 지금도 생각한다. 쓸 만해지자마자 RiftAtlas를 플레이어들 앞에 내놓은 것이 이 프로젝트가 계속할 가치가 있음을 보여줬고, 실제 사용이 무엇을 바꿔야 하는지를 더 분명하게 만들어 줬다.
오늘의 RiftAtlas.
만들기 시작한 지 6개월, RiftAtlas는 12만 명에 가까운 가입자를 기록했고, 플레이어들은 50만 개에 육박하는 덱을 저장했다.
우리는 지금 두 번째 대형 토너먼트를 준비하고 있다. RiftAtlas는 Riftbound 커뮤니티의 온라인 플레이에서 큰 비중을 차지하게 되었고, 사람들이 얼마나 즐겁게 쓰고 있는지 종종 내게 직접 이야기해 준다. 그 말을 듣는 건 여전히 정말 기분 좋은 일이다.
플레이해 준 모든 분들, RiftAtlas를 공유해 준 분들, 버그를 보고하고 개선을 제안해 준 분들, 커뮤니티가 굴러가게 도와준 분들, 콘텐츠를 만들어 준 분들, 우리와 협업해 준 분들 모두에게 감사드린다. 내가 만든 것을 사람들이 쓰는 걸 지켜보고, Riftbound 판의 다른 이들과 함께 일하는 것이 정말 즐거웠다. 그 모든 지원이 없었다면 이 프로젝트는 지금 이 자리에 있지 못했을 것이다.
이 글을 쓰면서 다음 문제로부터 한 발 물러나 프로젝트 전체를 바라보게 되었다. RiftAtlas가 6개월 만에 이렇게 되었다는 게 나로서는 아직도 좀 얼떨떨하다.
이 대부분은 처음부터 계획할 수 없었던 것들이다. 사람들이 RiftAtlas를 쓰기 시작한 뒤에야 비로소 보였기 때문이다. 나는 내가 쓰고 싶은 제품을 만드는 데서 시작했고, 그다음에 벌어지는 일들로부터 계속 배워 나갔다. 6개월이 지난 지금, 프로젝트가 잘못될 수 있는 온갖 경우의 수를 곱씹는 대신 그냥 저질렀던 것이 다행이라고 생각한다.