찜하기 따닥 문제
안녕하세요 !
한가지 궁금한 점이 있어서 질문 드립니다!
addFavorite 메서드에서
찜하기를 유저가 요청하였을때 따닥이 발생할 경우, 현재 코드를 보니 findByUserIdProductId 를 통해 존재유무를 판단합니다.
거의 동시에 요청이 올 경우에는 존재유무(findByUserIdProductId) 둘다 통과하기 때문에추가적으로 userId, productId 에 유니크 제약을 걸어줘서 save() 시점에 예외를 통해 따닥을 감지를 해야할것 같은데 어떻게 생각하시는지 궁금합니다!
답변 2
0
안녕하세요 질문 감사드립니다!
꼼꼼히 잘 보신 것 같습니다!ㅎㅎ
해당 상황에 동시적 요청이라면 찜 데이터가 두 개가 생기는 문제가 있을테니 유니크 제약으로 방어 할 수 있을 것 같습니다!
감사합니다!
0
안녕하세요, 인프런 AI 인턴입니다. 박희운님 질문 주셔서 감사합니다.
말씀해주신 찜하기 기능에서 동일한 유저가 동시에 두 번 요청을 할 때 발생하는 문제는 일반적으로 동시성 이슈로 인해 발생할 수 있습니다. 이 문제를 해결하기 위해 여러 기법을 사용할 수 있는데, 설명드리겠습니다.
유니크 제약 설정: 데이터베이스에서
userId와productId조합에 대해 유니크 제약 조건을 추가하는 것은 좋은 접근 방법입니다. 이것은 데이터베이스 차원에서 동일한 조합이 두 번 저장되지 않도록 강제할 수 있습니다. 이 경우,save()메서드를 호출할 때 유니크 제약 조건 위반으로 예외가 발생하게 되며, 이를 통해 중복 요청을 감지할 수 있습니다.비관적 락(Pessimistic Locking): 이는 해당 리소스가 사용 중일 때 다른 트랜잭션이 접근하지 못하도록 하는 방법입니다. 하지만 성능 저하나 교착 상태가 발생할 수 있으므로 주의가 필요합니다.
낙관적 락(Optimistic Locking): 데이터에 버전 번호를 추가하여, 트랜잭션 커밋 시점에서 버전 번호가 맞지 않으면 충돌로 간주하고 롤백하는 방식입니다. 이는 비관적 락보다 덜 자원을 사용하지만 충돌이 자주 발생하는 경우에는 복잡도가 증가할 수 있습니다.
애플리케이션 레벨 캐싱: 요청이 먼저 들어오는 시점에서 해당
userId와productId조합을 캐시에 저장하고 잠깐 동안 변경이 있을 때 요청을 차단하여 처리할 수도 있습니다. 이는 간단한 트래픽에서 효과적일 수 있습니다.
다음 게시글에서 유사한 문제를 논의하고 있으니 확인하시면 도움이 될 것 같습니다:
- CouponService에서 이미 다운로드 한 쿠폰 안 내려주기
이 게시물에서는 인증 및 사용자 맞춤 작업과 관련된 고민과 해결책을 다루고 있습니다. 비록 찜하기 기능과는 다른 컨텍스트일 수 있지만, 동시에 요청되는 상황에서의 고려사항들이 매우 유사하니 참고하시면 좋겠습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
클로드 이외의 AI와 연결하기
2
43
1
신입 공백, 프로젝트 관련 질문이 있습니다.
1
55
2
mcp 연결안됌
1
55
2
수강기간 연장 문의드립니다
1
33
2





