게임을 시작할 때, 사용자는 자신만의 닉네임을 입력해야 했다.
이 닉네임은 다른 사용자와 중복되지 않아야 했지만, 우리는 게임이 끝난 후에만 사용자 정보를 저장하는 구조였기 때문에 닉네임 중복 여부를 확인하기 위해 DB를 조회하는 방식으로 처리하고 있었다.
그러나 이 방식에는 문제가 있었다.
예를 들어, 두 명의 사용자가 동시에 게임을 시작하고 동일한 닉네임인 “test” 를 입력했다고 가정해보자.
게임이 종료되기 전까지는 DB에 저장되지 않기 때문에,
두 사용자는 서로 같은 닉네임으로 게임을 진행할 수 있는 상황이 발생한다.
이는 동시에 여러 사용자가 게임을 시작할 경우, 닉네임 중복이 충분히 발생할 수 있다는 의미였다.
동작 화면을 보면
시작부터 아무런 경고도 없이 게임을 시작했을 뿐더러


두 화면을 보면 서로 다른 사용자임에도 똑같은 닉네임으로 게임이 끝난 것을 볼 수 있다.
DB에 게임이 저장되는 game 테이블을 보면
