DATA & VERIFICATION
단어 데이터와 닉네임 검증 방식
Rarenick의 104,069개 원단어가 검수·중복 제거되는 과정과 Nexon Open API 조회, D1 캐시, 상태별 만료 정책을 공개합니다.
1. 공개 단어풀은 실시간 크롤링 결과가 아닙니다
2026년 8월 23일 기준 공개 버전에는 31개 분야, 104,069개 원단어가 들어 있습니다. 신화, 인물 이름, 꽃, 천문학, 과학 용어, 음식처럼 닉네임의 소재가 될 수 있는 분야를 각각 CSV 원본으로 관리합니다. 서비스 방문 중에 인터넷을 즉시 긁거나 사용자의 검색어를 자동으로 사전에 추가하지 않습니다.
각 행에는 분야, 한글 라벨, 가능한 경우 영문 라벨, 설명과 원천 식별자가 들어갑니다. 공개 전에 데이터 빌드가 문자 규칙, 빈 설명, 중복 라벨, 잘못된 영문 표기를 검사합니다. 현재 빌드는 영문 라벨 검수 오류가 0건일 때만 배포할 수 있도록 막혀 있습니다.
2. 한글과 영문은 번역 버튼 하나로 만들지 않습니다
같은 개념이라도 한국어 번역어와 음역어가 다를 수 있습니다. ‘보라’와 ‘바이올렛’처럼 뜻은 가까워도 실제 이름으로는 서로 다르게 읽히는 경우에는 별도 후보로 유지합니다. 반대로 같은 철자와 같은 개념이 여러 원천에서 반복되면 하나의 공개 항목으로 합칩니다.
영문 라벨에 한글이 섞였거나 한글 라벨과 영문 라벨이 사실상 같은 값인 경우, 근거 없이 자동 생성된 표기인 경우에는 공개 대상에서 제외합니다. 설명은 단순히 “관련 단어입니다”라고 반복하지 않고, 인물·장소·물질·개념이 무엇인지 구분할 수 있도록 분야별 원본에서 검수한 내용을 사용합니다.
- 같은 normalized 한글 라벨은 전체 통합에서 한 번만 노출합니다.
- 한 개념이 여러 분야와 관련되면 각 분야에서는 노출할 수 있습니다.
- 한글 별칭의 철자가 다르면 독립된 닉네임 후보로 유지합니다.
- 영문 근거를 확인하지 못한 항목은 한글 전용으로 남기거나 공개에서 제외합니다.
3. 랜덤 추천은 데이터베이스를 무작위로 정렬하지 않습니다
공개 단어는 버전이 붙은 정적 JSON shard로 나누어 Cloudflare의 정적 자산에서 제공합니다. 분야별 shard 순서를 세션 안에서 섞고, 한 번 사용한 shard는 가능한 한 전체 순환이 끝나기 전까지 다시 선택하지 않습니다. 전체 통합은 여러 분야를 고르게 골라 교차 배치하므로 한 분야만 계속 나오는 현상을 줄입니다.
이 구조에서는 사용자가 랜덤 버튼을 누를 때마다 D1에서 ORDER BY RANDOM() 같은 고비용 쿼리를 실행하지 않습니다. 단어 파일은 CDN 캐시를 사용할 수 있고, D1은 닉네임 조회 상태와 요청 제한 카운터만 담당합니다. 랜덤 한글은 가능한 조합이 매우 크기 때문에 사전에 저장하지 않고 브라우저에서 즉석 생성합니다.
4. Nexon 조회는 cache-first로 수행합니다
분야나 필터를 바꾸는 것만으로는 D1 또는 Nexon API 검증을 시작하지 않습니다. 원단어 모드에서는 현재 분야의 무료 정적 후보 파일만 브라우저 캐시에 미리 받아둡니다. 첫 화면에서는 실제로 보이는 원단어 최대 18개만 자동 확인하며, 브라우저 캐시가 살아 있는 후보는 다시 호출하지 않고 숨겨진 예비 후보도 확인하지 않습니다. 사용자가 추천 버튼을 누르면 원단어는 CDN의 정적 shard에서 가져오고, 랜덤 한글은 브라우저에서 즉석 생성하므로 사용하지 않을 다음 결과를 대량으로 실시간 검증하는 비용은 발생하지 않습니다.
버튼을 누르면 원단어 18개 또는 랜덤 한글 24개를 먼저 표시한 뒤 cache-first 방식으로 점진 확인합니다. 브라우저 로컬 캐시에 유효한 결과가 있으면 먼저 사용하고, 공개 원단어는 D1의 사용 중·휴먼닉 캐시도 확인합니다. 랜덤 한글과 임의 검색어는 D1 캐시에 저장하지 않으며, 필요한 이름에 한해서만 Nexon Open API를 호출합니다. 사용 중 닉네임 줄이기로 빈자리가 생기면 현재 화면을 채울 예비 후보부터 추가 확인합니다.
‘사용 중 닉네임 줄이기’는 메이플 캐시 또는 사용자 요청에 따른 실시간 조회에서 생성불가·휴먼닉으로 확인된 후보를 결과에서 제외하고 준비된 후보로 빈자리를 채웁니다. 다른 게임용 후보만 찾는 경우에는 이 옵션을 끌 수 있습니다. 2글자 무받침 랜덤 한글은 브라우저에서 더 넓은 후보군을 만들고 희소 음절 조합부터 확인하지만 서버 확인량은 늘리지 않습니다. 확인된 결과가 충분해지면 즉시 멈추고, 한 번의 클릭에서 최대 72개까지만 확인합니다. 이 상한 뒤에도 확인되지 않은 예비 후보는 새 카드로 올리지 않습니다. 공백·기호·길이처럼 로컬에서 판정할 수 있는 메이플 범위 밖 후보는 Worker를 호출하지 않으며, 확인 결과는 브라우저 로컬 캐시에 상태별 만료 시간만큼 보관합니다. 복사는 확인 완료를 기다리지 않고 먼저 처리합니다.
5. 상태별 캐시 시간과 표시 의미
| 상태 | 기본 캐시 | 의미 |
|---|---|---|
| 가능성 높음 | 15분 | 조회 시점에 동일 캐릭터를 확인하지 못함 |
| 생성불가 | 30일 | 동일 이름의 캐릭터 식별자가 조회됨 |
| 휴먼닉 | 7일 | 식별자는 있으나 기본 정보 분류가 제한됨 |
| 확인 실패 | 3분 | 외부 API 오류·점검·네트워크 문제 |
| 규칙상 불가 | 30일 | 서비스 내부 문자·길이 검사에서 제외됨 |
표의 시간은 브라우저 로컬 캐시 기준입니다. 서버 D1은 공개 원단어의 생성불가와 휴먼닉만 최대 30일 저장하며, 랜덤 한글·임의 검색·복사 재검사는 저장하지 않습니다. 캐시 시간은 비용과 최신성 사이의 운영 기준이며 게임의 공식 보장 기간이 아닙니다.
6. 재현 가능성과 오류 수정
데이터 빌드와 검증 로직은 자동 테스트와 배포 전 감사를 거쳐 관리합니다. 공개 shard에는 API 키, 원본 IP, 사용자별 조회 이력을 넣지 않습니다. 애플리케이션은 원본 IP나 IP 해시를 D1에 저장하지 않으며, Cloudflare의 요청 제한과 Turnstile 봇 확인을 통과한 브라우저에 짧은 서명 세션만 발급합니다.
잘못된 번역, 설명 오류, 분야 불일치가 발견되면 저장소의 Issues에 단어와 근거 URL을 남길 수 있습니다. 수정은 원본 CSV에 반영한 뒤 전체 데이터 감사와 테스트를 통과해야 다음 배포에 포함됩니다. 단어 개수를 늘리는 것보다 틀린 후보가 자동으로 되살아나지 않게 하는 것을 우선합니다.