사용자가 만약 버튼을 여러번 눌렀을 때 데이터베이스에서 트랜잭션을 처리하다가 완료되기 전에 두 번째 요청이 들어가게 되면 ?
데이터 일관성 문제와 자원 낭비를 일으킬 수 있다.
그러면 중복 요청 이슈를 막기 위하여 어떠한 방법이 있는지 알아보자.
단기간에 여러번 클릭해서 서버에 여러번 요청이 들어가는 거면 debounce를 걸어 지정해놓은 시간이 끝나면 요청이 들어가게 하면 되지않을까?
단순하게 함수 실행을 지연해서 해결하는 방식.
또는 일정 시간 간격으로만 실행하여(Throttle) API 요청이 중복으로 나가는 것을 방지.
그렇다면 API 요청이 성공하지 못한다면?
debounce가 적용된 함수에서 api 요청에 대한 응답이 돌아오지 않으면, 돌아올 때까지 버튼을 사용할 수 없게 된다.
다음과 같은 방법들이 있으나 프론트 쪽 지식이 부족해 공부가 더 필요할 것 같습니다...
https://chunho.tistory.com/109
https://happysisyphe.tistory.com/72
https://velog.io/@mini_suyo/React%EC%97%90%EC%84%9C-%EC%A4%91%EB%B3%B5%ED%98%B8%EC%B6%9C%EB%B0%A9%EC%A7%80
https://velog.io/@funco247/%ED%94%84%EB%A1%A0%ED%8A%B8%EC%97%94%EB%93%9C%EC%97%90%EC%84%9C-%EC%A4%91%EB%B3%B5-%EC%9A%94%EC%B2%AD-%EB%B0%A9%EC%A7%80%ED%95%98%EA%B8%B0
개념: 동일한 요청이 여러 번 들어와도 결과가 변하지 않도록 하는 설계 기법
방법: 클라이언트에서 요청마다 고유한 요청 ID를 넘기고, 서버는 이 ID를 저장해 중복 요청인지 판단
이미 처리된 요청 ID가 들어오면, 처리하지 않고 이전 결과를 재사용
전자상거래 결제 등 중요한 상태 변경에 필수적
트랜잭션: 데이터 무결성과 일관성을 보장하기 위해 작업을 원자적으로 실행
락: 중복 데이터 변경이나 병행성 문제를 막기 위해 레코드나 테이블 단위 락 적용
단, 락이 과도하면 성능 저하 및 교착 상태 이슈 발생 가능하므로 적절한 수준 유지 필요
특정 시간당 같은 사용자 또는 IP에서 반복되는 요청 제한
DDOS 공격 대응에도 효과적
https://ksh-coding.tistory.com/149
블로그 참조
https://upcurvewave.tistory.com/646
https://hyeri-dev.tistory.com/55
https://f-lab.kr/insight/understanding-idempotency-in-api-design
https://wookjongbackend.tistory.com/39
https://hogwart-scholars.tistory.com/entry/Spring-Boot-%EC%9E%90%EB%B0%94-%EC%8A%A4%ED%94%84%EB%A7%81%EC%97%90%EC%84%9C-%EC%B2%98%EB%A6%AC%EC%9C%A8-%EC%A0%9C%ED%95%9C-%EA%B8%B0%EB%8A%A5%EC%9D%84-%EA%B5%AC%ED%98%84%ED%95%98%EB%8A%94-4%EA%B0%80%EC%A7%80-%EB%B0%A9%EB%B2%95
https://k-sky.tistory.com/714
https://ksh-coding.tistory.com/149