달동네 :: 세상사는 이야기

Spring Boot Interceptor, 어디까지 가봤니? 특정 URL에만 스윽~ 적용하기! 본문

카테고리 없음

Spring Boot Interceptor, 어디까지 가봤니? 특정 URL에만 스윽~ 적용하기!

JJ_W 2025. 4. 2. 06:16

 

 

Intro: "Interceptor야, 넌 누구냐"

Spring Boot 개발 중, 모든 요청에 무작정 Interceptor를 던져놓고 보는 건 마치 감기에 걸렸다고 해서 전신 MRI 찍는 격이죠. 가볍게 인증 체크만 필요한 URL도 있고, 굳이 건들지 않아야 할 공용 리소스도 있잖아요?

그래서 오늘은! Interceptor를 딱 원하는 URL에만 스마트하게 적용하는 방법을 재미있게 알려드릴게요. 읽고 나면 “아~ 이 맛에 Spring Boot 하지~” 소리 나올지도 몰라요.

 

 

Step 1. Interceptor 클래스 만들기

Interceptor는 HandlerInterceptor를 구현한 클래스죠. 여기선 간단히 요청이 들어올 때 로그를 찍는 인터셉터를 만들어볼게요.

 

public class MyCustomInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request,
                             HttpServletResponse response,
                             Object handler) throws Exception {
        System.out.println("🎯 인터셉터 발동! URL: " + request.getRequestURI());
        return true;
    }
}
 

이 친구는 요청이 들어올 때마다 "어디 가세요?" 하고 체크하는 느낌이죠.

 

Step 2. WebMvcConfigurer에서 URL 설정하기

이제 진짜 중요한 부분! “Interceptor야, 넌 이 URL만 맡아!”라고 말해줘야죠.

@Configuration
public class WebConfig implements WebMvcConfigurer {
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new MyCustomInterceptor())
                .addPathPatterns("/api/secure/**")   // 이 URL에는 적용하고
                .excludePathPatterns("/api/public/**"); // 이건 제외!
    }
}

 

addPathPatterns vs excludePathPatterns

  • addPathPatterns는 적용할 URL 패턴 지정
  • excludePathPatterns는 예외 패턴 지정
    이 둘을 잘 써먹으면 진짜 깔끔하게 원하는 구간만 타게 만들 수 있어요.

예를 들면:

  • /api/secure/**: 인증이 필요한 API
  • /api/public/**: 누구나 접근 가능한 오픈 API

💡 Tip: 여러 개의 Interceptor를 순서 있게 등록하려면?

Interceptor도 순서가 중요하죠. 먼저 실행될 친구를 위에, 나중에 실행될 친구는 아래에 두면 됩니다.

registry.addInterceptor(new FirstInterceptor()).order(1);
registry.addInterceptor(new SecondInterceptor()).order(2);

 

마무리 한 조각

Interceptor를 잘 쓰면, AOP 없이도 상당히 많은 요청 전후 로직을 처리할 수 있어요.
하지만! 무분별하게 모든 요청에 적용하는 건 과유불급.
"Interceptor도 사람이다. 일이 너무 많으면 지친다."

 

 

실전 예시 요약

URL 패턴적용 여부
/api/secure/login ✅ 적용됨
/api/public/status ❌ 제외됨
/css/style.css ❌ 제외 (리소스는 보통 설정하지 않음)

🗨️ 마무리 한마디

Spring Boot Interceptor, 알고 보면 정말 유용하죠?
“Spring을 안다고 해도 Interceptor를 안 쓰면 반만 안 거다”는 말도 있…진 않지만, 그 정도로 쓸 곳이 많다!

반응형