How to Prevent Duplicate Requests Effectively

sojw·2024년 10월 9일
0

https://medium.com/javarevisited/rest-api-how-to-prevent-duplicate-requests-effectively-d3be88ef7838

구현 아이디어

  1. 요청 데이터 필드 사용: API 호출 시, 요청 본문에서 특정 필드를 선택하여 Redis 키를 생성합니다.
  2. MD5 해시 생성: 선택한 필드를 기반으로 키를 생성하고, MD5로 해시합니다.
  3. Redis 중복 키 확인: Redis에서 해당 키가 존재하는지 확인합니다. 존재하면 중복 오류를 반환하고, 존재하지 않으면 키를 Redis에 저장하고 만료 시간을 설정합니다.
  4. 키 만료 시간 설정: 생성된 키는 40초 동안 유지됩니다(데모에서는 40초).

주요 클래스 및 설명

  • PreventDuplicateValidator: 중복 요청 방지를 위한 어노테이션. 요청 필드와 만료 시간을 설정할 수 있습니다.
  • PreventDuplicateValidatorAspect: 중복 요청 검증을 수행하는 AOP 클래스.
  • Utils: 요청 본문에서 데이터를 추출하고 MD5 해시를 생성하는 유틸리티 클래스.
  • HandleGlobalException: 중복 요청 시 발생하는 DuplicationException을 처리하는 클래스.

Redis 설정

  • Redis는 Docker를 통해 설정되며, Spring Boot 애플리케이션은 Redis와 연결됩니다.

테스트 시나리오

  1. Postman을 사용하여 API를 호출하면, 첫 번째 요청은 정상적으로 처리되고 Redis에 키가 저장됩니다.
  2. 동일한 요청을 다시 보내면 Redis에 이미 해당 키가 존재하므로 중복 요청으로 오류 메시지를 반환합니다.

결론

  • 중복 요청을 방지할 필드 선택이 중요합니다.
  • Redis 키의 만료 시간은 비즈니스 요구에 맞게 조정해야 합니다.
  • MD5 해시를 사용할지 여부는 성능 최적화 관점에서 고려해야 합니다.

0개의 댓글