개발/Spring

Spring Interceptor 기반 중복방지

피터JK 2025. 9. 12. 12:07
728x90

 

1️⃣ Spring Interceptor 특성

  • Interceptor는 Spring MVC의 요청 처리 흐름에 끼어들어 preHandle/postHandle/afterCompletion을 수행합니다.
  • eGovFrame이 WAR든 JAR든 Spring MVC를 기반으로 동작한다면 Interceptor는 정상적으로 동작합니다.
  • 즉, EgovDoubleSubmitHelper처럼 세션 기반 토큰을 쓰든, 단순 시간 기반 중복 체크를 하든
    Interceptor 방식은 Spring의 기본 기능을 이용하기 때문에 eGovFrame과 충돌이 거의 없습니다.

2️⃣ 장점

  • JAR(MSA) 환경에서도 사용 가능: Interceptor는 Spring Bean으로 등록되므로 내장 톰캣(Spring Boot)에서도 문제 없음.
  • 중앙 집중형 관리 가능: 특정 URL이나 URL 패턴에 대해 한 곳에서 일괄 처리 가능.
  • 유연성: 세션, DB, 캐시(Redis 등) 기반 중복 체크 모두 구현 가능.

3️⃣ 참고 구현

public class DuplicateRequestInterceptor extends HandlerInterceptorAdapter {

    private static final String LAST_REQUEST_TIME = "LAST_REQUEST_TIME";

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        Long lastTime = (Long) request.getSession().getAttribute(LAST_REQUEST_TIME);
        long now = System.currentTimeMillis();

        if (lastTime != null && (now - lastTime) < 3000) { // 3초 이내 같은 요청 차단
            response.sendError(HttpServletResponse.SC_BAD_REQUEST, "중복 요청 감지");
            return false;
        }

        request.getSession().setAttribute(LAST_REQUEST_TIME, now);
        return true;
    }
}
  • WAR든 JAR든, servlet-context.xml이나 @Configuration으로 등록만 하면 동일하게 동작합니다.

4️⃣ 결론

  • MSA + JAR 환경에서도 안전하게 동작
  • eGovFrame WAR 전용 컴포넌트(EgovDoubleSubmitHelper)와 달리 Spring MVC 표준 기능을 사용하므로 충돌 걱정이 거의 없음
  • 필요 시 세션 대신 Redis, DB 등 분산 환경 캐시를 사용하면 MSA에서도 안정적인 중복방지 구현 가능
728x90