
개요최근 진행한 프로젝트에서 동시성 문제로 인한 에러를 경험했습니다. 게시글에 '좋아요'를 토글할 수 있는 기능이 있는데, 사용자가 이 버튼을 빠르게 연타하면 MySQL에 동일한 Unique Key로 insert를 시도하게 되면서 중복 엔트리 예외가 발생하는 케이스였습니다. 처음에는 조회 쿼리에 배타적 Lock을 추가해서 해결했습니다. 에러를 해결하는게 우선이니, 가장 쉽고 빠른 방법을 선택했습니다. 그런데 Lock으로 해결하는 방식은 최선의 방법이 아니었다고 생각했습니다. Lock으로 인해 불필요한 DB 부하가 발생하고, 무엇보다 응답 시간이 길어져 사용자 경험에 악영향을 끼친다고 느꼈기 때문입니다. 그래서 동시에 들어오는 요청들을 순서대로 처리해주는 메시지 큐 시스템을 도입했습니다. 요청에 대한 성공..