볼타랩은 거창한 사업 계획에서 출발하지 않았습니다. 시작은 단순했습니다.
- 혼자서 기획부터 개발까지 해보고 싶다
- 개발자로서 보여줄 수 있는 포트폴리오가 필요하다
- 평소 즐기던 FC온라인 볼타모드를 소재로 쓰면 어떨까
- 웹서비스로 만들면 광고 등으로 수익화까지 이어볼 수 있지 않을까
이 네 가지 조건을 두고 "그럼 뭘 만들 수 있을까"라는 질문에서 11월 초, 볼타랩이 시작됐습니다.
가장 먼저 만든 것 — 티어리스트
가장 먼저 필요했던 건 데이터였습니다. 넥슨 오픈 API로 볼타 공식경기 기록을 수집해, 포지션별로 어떤 선수가 많이 쓰이고 승률은 어떤지 보여주는 티어리스트부터 만들었습니다. 하루 API 호출 1,000회라는 예산 안에서 움직여야 했기 때문에, 처음부터 수집 구조를 효율적으로 짜는 게 중요했습니다.
통계의 함정을 마주하다
티어리스트가 돌아가기 시작하자 바로 이상한 점이 보였습니다. 10경기만 뛰고 전승을 기록한 선수가 1티어에 오르는 등, 표본이 적은 선수가 실력과 무관하게 상위권에 걸리는 현상이었습니다. 반대로 사용 빈도가 압도적으로 높은 선수가 오히려 낮은 티어에 머무는 경우도 있었습니다.
전자는 베이지안 보정(표본이 적을수록 포지션 평균 쪽으로 수치를 끌어당기는 방식)과 최소 경기수 기준을 함께 적용해 해결했습니다. 반면 후자(사용률 높을수록 승률이 낮아지는 현상)는 인위적으로 보정하지 않기로 했습니다. 대중적인 카드는 폭넓은 실력대의 유저가 쓰고, 희소한 카드는 숙련된 유저가 주로 쓰는 선택 편향에 가까워서, 이건 왜곡이 아니라 진짜 신호로 판단했기 때문입니다.
랭커들의 실전 조합이 궁금해지다 — 베스트스쿼드
개별 선수 티어만으로는 "그래서 실제로 어떤 조합이 강한가"를 알 수 없었습니다. 그래서 상위 랭커들의 실전 스쿼드를 집계하는 베스트스쿼드 기능을 기획했습니다. 볼타는 경기마다 포지션이 바뀌는 구조라 "같은 팀"을 어떻게 정의할지부터 고민이 필요했고, 결국 선수 카드 조합(선수파티)과 유저 조합(유저파티)을 둘 다 보여주는 방식으로 정리했습니다. 기존에 수집하던 랭커 데이터를 그대로 재활용해, 새로운 API 호출 없이 매일 자동 집계되도록 설계했습니다.
사람이 머무는 공간으로 — 선수평가와 댓글
데이터만 보여주는 사이트에서, 방문자가 직접 의견을 남길 수 있는 공간도 필요하다고 판단했습니다. 선수평가 기능을 먼저 만들고, 베스트스쿼드 상위 3팀에는 댓글 기능도 추가했습니다. 다만 공개 댓글은 스팸이나 비방 글이 생기기 마련이라, 운영자가 개입해 삭제·수정할 수 있는 관리자 기능도 함께 마련했습니다.
인프라도 같이 다듬다
개발은 한 대의 컴퓨터로만 하지 않았습니다. 두 번째 기기(노트북)에서도 작업할 수 있도록 개발 환경을 새로 구축했고, 이 과정에서 GitHub와 Vercel을 제대로 연동해 코드를 올리면 자동으로 배포되는 구조도 갖췄습니다.
지금, 그리고 앞으로
지금 이 글을 포함한 저널 섹션도 같은 흐름의 연장선입니다. 데이터를 보여주는 것에서 나아가, 왜 이런 선택을 했는지 기록하고 공유하는 공간을 만들고 있습니다. 앞으로도 볼타랩이 어떻게 달라지는지, 이 자리에서 계속 정리하겠습니다.