1. 문제 발단

게임을 시작할 때, 사용자는 자신만의 닉네임을 입력해야 했다.

이 닉네임은 다른 사용자와 중복되지 않아야 했지만, 우리는 게임이 끝난 후에만 사용자 정보를 저장하는 구조였기 때문에 닉네임 중복 여부를 확인하기 위해 DB를 조회하는 방식으로 처리하고 있었다.

그러나 이 방식에는 문제가 있었다.

예를 들어, 두 명의 사용자가 동시에 게임을 시작하고 동일한 닉네임인 “test” 를 입력했다고 가정해보자.

게임이 종료되기 전까지는 DB에 저장되지 않기 때문에,

두 사용자는 서로 같은 닉네임으로 게임을 진행할 수 있는 상황이 발생한다.

이는 동시에 여러 사용자가 게임을 시작할 경우, 닉네임 중복이 충분히 발생할 수 있다는 의미였다.

동작 화면을 보면

시작부터 아무런 경고도 없이 게임을 시작했을 뿐더러

image.png

image.png

두 화면을 보면 서로 다른 사용자임에도 똑같은 닉네임으로 게임이 끝난 것을 볼 수 있다.

DB에 게임이 저장되는 game 테이블을 보면

image.png