우리 서비스는 참여 시 유저가 몇 번 요청하든 한 번의 참여만 가능하도록 설계되어있어요.

하지만 QA 단계에서 따닥 하고 버튼을 눌러 여러 번 참여를 시도했을 때 위와 같이 같은 회원이 두 번 이상 참여되는 것을 확인할 수 있습니다.
현재 참여 인원은 최대 모집 인원을 초과할 수 없도록 서버의 로직을 작성하였음에도 불구하고요.
이러한 예외 상황까지 핸들링하는 것이 저희가 한 회원 당 한 번의 참여만 가능하게 한다. 라고 세운 요구사항을 충족시키는 조건이 되겠죠.
그렇다면 이 문제는 왜 생길까요?
모임 참여 시 한 회원이 두 번 요청을 했을 때 정상적인 플로우는 다음과 같습니다.

1. 처음 참여를 시도한다.
2. 현재 참여 인원과 최대 참여 인원을 비교한다. 이때 회원이 참여 중인지 확인한다. (SELECT)
3. 최대 참여 인원을 넘지 않는 다면 모임에 참여한다. (INSERT)
4. 두 번째 참여를 시도한다.
5. 최대 참여 인원을 넘게 되어 모임에 참여할 수 없다.
하지만 여러 요청이 동시에 생기면 어떻게 될까요? 아래 상황을 가정해봅시다.

첫 번째 요청에 대한 INSERT 쿼리가 날라가기 전에 두 번째 참여 요청이 SELECT 쿼리로 이미 참여하였는 지 확인을 ****시도하게 되면, 참여하지 않았으니 INSERT가 통과 될 거에요. 그러면 데이터베이스에는 똑같은 회원이 두 번 참여된 상태로 저장될 것입니다.
정리하자면, 우리가 해결해야 할 핵심은 첫 번째 요청에 대한 INSERT가 수행된 다음 두 번째 요청에 대한 SELECT가 수행되는 것입니다.
