Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Related Issue 📌
Description ✔️
중복 회원가입 동시성 문제
회원가입 비즈니스 로직에 디스코드 웹훅 기능을 추가한 후 처리 시간이 길어져 동시 요청 시 중복 회원가입 되는 문제점이 발생했습니다.
즉, 회원가입 로직의 처리 시간이 증가하여 특정 사용자가 회원가입 버튼을 클릭하고 대략 1초 정도의 딜레이 시간이 생기게 되었고 해당 딜레이 시간 동안 버튼을 연속으로 클릭 시 중복으로 회원가입 처리 되었습니다.
해결방안
회원가입 로직을 임계 영역으로 두고 race condition이 발생하지 않도록 락을 활용하여 문제를 해결할 수 있었습니다.
문제를 해결하기 위해 고민했던 락은 Pessimistic Lock, Optimistic Lock, Lettuce Setnx Lock 세 가지였습니다.
저희 서비스는 refresh token 저장 용도로 레디스를 사용 중이기 때문에 추가적인 인프라 구축 비용이 들지 않는점 그리고 DB 접근보다 레디스 접근이 조금 더 높은 성능을 가져올 수 있어 사용자의 대기 시간을 최대한 줄일 수 있다고 생각되어 Lettuce Setnx Lock을 활용하였습니다. 또한 락을 걸고 해제하는 작업을 위해 파사드 패턴을 적용하였습니다.
동일한 사용자의 약 20개 회원가입 동시 요청에 대한 테스트 코드를 작성하였습니다.