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
'개발 > Spring' 카테고리의 다른 글
| 스프링(Spring) 인터셉터(Interceptor) (0) | 2025.10.03 |
|---|---|
| MSA 환경(JAR)에서 실행 가능한 Spring Interceptor 기반 중복 방지 + 버튼 비활성화 (0) | 2025.09.12 |
| 스프링에서 생성자 주입(Constructor Injection)을 권장 (0) | 2025.09.12 |
| Spring Boot와 Jasypt로 비밀번호 암호화 및 복호화 설정 (0) | 2025.03.17 |
| Spring Boot에서 JSP 페이지 접근 시 "Path with WEB-INF or META-INF" 경고 해결 방법 (0) | 2025.02.25 |