회사에서 Live 중인 게임 프로젝트에서 중복 닉네임이 생성되는 문제가 발생했습니다.
그래서 유저 케릭터의 중복 닉네임이 N개가 프로필 관련 데이터베이스 테이블에 저장되어 있었습니다.
문제 상황 정리
제일 큰 문제는 중복 검증 로직이 없어서 발생하는 문제였습니다.
이런 문제가 발생 시 운영팀과 개발자의 입장에서 각자 고려해봤습니다.
DB 무결성 훼손
닉네임이 중복되면 데이터베이스의 무결성이 손상될 수 있습니다.
특히, 닉네임을 기본 키나 고유 식별자로 사용하는 경우 문제가 심각합니다.
쿼리 및 검색 오류
게임 내 특정 플레이어를 찾기 위해 닉네임 기반으로 쿼리를 작성할 때,
중복된 결과가 반환되어 의도치 않은 동작을 초래할 수 있습니다.
NOT EXISTS
조건을 통과할 가능성이 있어 중복이 허용될 수 있음. LIMIT 1
조합은 인덱스가 없을 경우 성능에 악영향을 미침. Username
컬럼에 인덱스를 설정해 검색 속도 향상. SELECT ... FOR UPDATE
로 잠금을 설정해 Race Condition 방지.UPDATE 프로필 SET 닉네임 = @닉네임
WHERE 유저ID = @유저ID
AND NOT EXISTS (SELECT 1 FROM (SELECT 1 FROM 프로필 WHERE 닉네임 = @닉네임 LIMIT 1) a);
닉네임1
, 닉네임2
.닉네임#1234
.SELECT ... FOR UPDATE
를 사용하여 트랜잭션 내에서 동시성 제어. 리그 오브 레전드(LoL)에서 중복 닉네임이 허용됩니다, 하지만 단순히 "똑같은 이름"을 허용하는 방식은 아닙니다. 정확히는, 같은 이름이라도 공백, 대소문자, 특수 문자, Riot ID 태그 등을 활용해 다른 이름으로 인식될 수 있습니다.
Riot ID는 "소환사 이름#태그" 형식으로 되어 있습니다.
공백, 대소문자, 특수 문자
이름에 공백이나 대소문자를 다르게 사용하거나, 일부 허용된 특수 문자를 삽입해 같은 이름처럼 보이지만
실제로는 다른 닉네임을 생성할 수 있습니다.
서버 구분
지역별로 닉네임 중복이 가능하며, 예를 들어 한국 서버와 북미 서버에 같은 이름을 사용할 수 있습니다.
LoL에서는 Riot ID 시스템과 다양한 문자 조합을 활용해 같은 이름처럼 보이는 중복 닉네임이 가능합니다.
다만, 정확히 동일한 조합은 허용되지 않습니다.
디아블로 4에서는 닉네임 중복이 허용됩니다.
대신, 배틀태그 시스템을 통해 각 플레이어를 식별합니다.
캐릭터 이름은 게임 내에서 자유롭게 설정할 수 있으며, 같은 이름을 여러 캐릭터에 사용할 수도 있습니다.
다른 플레이어와 중복되더라도 문제없이 사용할 수 있으며, 구체적인 구분은 배틀태그로 이루어집니다
일부 게임에서 중복 닉네임을 허용하는 이유는 사용자 경험을 개선하고 시스템 유연성을 높이기 위해서입니다.
다양한 게임 디자인과 기술적 요구 사항에 따라 중복 닉네임을 허용하는 이유는 다음과 같습니다.
닉네임 제한 완화
인기 있는 닉네임은 이미 사용 중인 경우가 많기 때문에, 중복을 허용하면 플레이어들이 원하는 이름을 쉽게 사용할 수 있습니다.
예) 페이커같은 유명인의 닉네임도 선택 가능.
창의성 부담 감소
고유 닉네임을 강제할 경우, 플레이어가 이름을 만들 때 복잡한 조합(숫자, 특수 문자)을 사용해야 하는 번거로움이 생깁니다.
중복을 허용하면 이러한 부담이 줄어듭니다.
친구 찾기 및 소셜 기능 강화:
플레이어들이 닉네임만 보고 친구를 찾는 것이 아니라, 고유 ID 또는 소셜 플랫폼을 통해 연결되기 때문에
중복 닉네임 허용이 가능해집니다.
익명성 강화:
동일한 닉네임을 사용하는 플레이어들이 많아지면, 특정 닉네임이 익명성을 유지하는 데 도움이 될 수 있습니다.