제로에서 랭크까지: Next.js 14와 Cloudflare로 고성능 NBA 플레이어 랜덤라이저 구축
Source: Dev.to
개발자이자 NBA 팬으로서, r/NBA2K 같은 커뮤니티에서 자주 보이는 문제를 발견했습니다. 새로운 MyLeague 재구축을 시작하거나 Blacktop 1v1 세션을 시작할 때 플레이어들이 “선택 마비”에 빠지는 경우가 많습니다. 정적인 리스트는 지루하고, 기존 랜덤화 도구들은 광고가 많거나 특정 필터가 부족한 경우가 많았습니다.
그래서 고성능 솔루션을 직접 만들기로 했습니다. Next.js 14와 Cloudflare를 활용해 빠르고 SEO에 최적화된 도구를 만든 과정을 소개합니다.
The Stack: Why Next.js and Cloudflare?
- Next.js 14 (App Router) – Server Components를 뛰어나게 처리하고 내장된 이미지 최적화를 제공.
- Cloudflare Pages – 엣지 배포를 통해 사용자의 위치와 관계없이 제너레이터가 즉시 로드됩니다.
- Tailwind CSS – 게임 커뮤니티와 잘 맞는 “다크 모드” 미학을 제공합니다.
Data Strategy: JSON vs. CSV
- Performance – Next.js는 JSON 파일을 직접 import 할 수 있어, CSV에 비해 런타임 오버헤드 없이 JS 엔진이 데이터를 파싱합니다.
- Filtering Logic – 플레이어 데이터를 구조화된 JSON 형식으로 저장하면 팀, 포지션, 국가별 필터링을 API 호출 없이 즉시 클라이언트 측에서 수행할 수 있습니다.
The Core Logic: Ensuring True Randomness
랜덤화 도구에 대한 흔한 불만은 “결과가 반복된다”는 점입니다. 모든 플레이어에게 동일한 기회를 주기 위해 Fisher‑Yates Shuffle 알고리즘을 구현했으며, 이는 플레이어 배열에 대한 편향 없는 순열을 생성합니다.
사용자가 필터를 적용하면(예: “프랑스 출신 센터”), 도구는 먼저 필터링된 서브셋을 만든 뒤 이를 섞어 매 클릭마다 새로운 결과를 제공합니다.
SEO for Tools: Beyond the Meta Tag
- Topical Authority – NBA 2K 챌린지와 판타지 농구 활용 사례를 설명하는 포괄적인 FAQ 섹션을 추가했습니다.
- Dynamic Metadata – 각 페이지는 Next.js 14의
generateMetadata를 사용해 “Random NBA Team”, “2K26 Randomizer”와 같은 키워드가 올바르게 색인되도록 합니다. - Internal Linking – 메인 플레이어 제너레이터를 NBA 팀 제너레이터와 같은 특화 도구에 연결해 “topic cluster”를 구축했습니다.
Check out the live project here: