AOP를 활용한 api 중복 요청 방지 (따닥 방지)

2024. 7. 22. 01:00Backend 취업준비/Spring

숙박 서비스를 만들면서 숙소 등록 / 예약 등록 버튼을 누를 때 버튼을 실수로 여러번 누른다거나 하는 경우가 있었고, 이는 서비스에 안좋은 영향을 끼칠 것이라고 판단하여 이를 방지하고자 하였다.
프론트로 alert창으로 1차적으로 막는걸 시도했지만, 약간의 버튼을 누르고 alert창이 뜰 때 까지 약간의 텀이 있는 경우도 존재해서 충분하지 않았다. 이에 스프링 AOP를 활용하였다.

 

  • HttpServletRequest 객체에서 우저 정보를 가져온 후 시간 정보와 함께 HashMap에 저장한다
    • HttpServletRequest는 서블릿 컨테이너(예: 톰캣)가 HTTP 요청에 대한 정보를 제공하기 위해 사용하는 객체. 클라이언트로부터의 요청 정보를 포함하고 있으며, 파라미터, 헤더, 세션 정보 등을 제공
  • 특정 기준 시간 이내에 호출이 반복적으로 발생하면 예외를 발생시키고 막는다.

 

사용자정의 인터페이스를 만들고, @PointCut 어노테이션과 함께 중복요청 방지 기능을 원하는 메서드에 손쉽게 적용할 수 있다.




이렇게 구현하고 나니 문제가 발생했는데, 특정 기준 시간을 정하기가 어려웠다. 처음엔 10분 가량으로 했다가, 불편함을 느껴서 점점 줄이곤 하다가 방식을 바꿔야 겠다고 생각했다. 따라서 플래그 형태로 리팩토링 하였다.
또 메서드 별로 따로 적용이 되도록 구분을 해주어야 겠다고 생각했다.

조금 더 나은 형태가 되었다고 생각한다.

 

외에도 Get요청만을 제외하고 적용하는 방식도 괜찮다고 생각된다.