종종 400번대 오류를 내보낼 때, 무엇이 문제인지 확인이 필요할때가 있다. break point를 설정하여도 스프링부트가 자동으로 400번대로 리턴 하는 경우가 있어 무엇이 문제인지 파악하기 어려울 때가 있다. TRACE 로그를 찍어도 말이다.
이럴 경우, wireshark 같은것을 이용해서 내가 제대로 요청했는지 header 와 body 부분을 체크 하기도 한다.
또는, Interceptor 를 이용하여 코드로 구현해서 확인하는 방법이 있다.
클라이언트에서도, 서버에서도 모두 통신할때 Intercept 하여 처리 하는 경우가 있다. 스프링 부트에서 처리하는 방법을 알아보면,
- 인터셉터 구현
- 인터셉터 등록
두개로 볼 수 있다.
- 인터셉터 구현
- preHandle 에 break point를 걸어서 request 에 담겨 있는 내용이나, header 값 들을 조회할 수 있다.
package com.example.demo.interceptor;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
@Component
public class LoggingInterceptor implements HandlerInterceptor {
// 컨트롤러 호출 전에 실행
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response,
Object handler) throws Exception {
System.out.println("[Interceptor] Request URL: " + request.getRequestURL());
System.out.println("[Interceptor] HTTP Method: " + request.getMethod());
return true; // false 반환 시 컨트롤러 실행 안됨
}
// 컨트롤러 실행 후, 뷰 렌더링 전에 실행
@Override
public void postHandle(HttpServletRequest request,
HttpServletResponse response,
Object handler,
org.springframework.web.servlet.ModelAndView modelAndView) throws Exception {
System.out.println("[Interceptor] Post Handle");
}
// 뷰 렌더링 후 실행 (예외 여부 상관없이)
@Override
public void afterCompletion(HttpServletRequest request,
HttpServletResponse response,
Object handler,
Exception ex) throws Exception {
System.out.println("[Interceptor] After Completion");
}
}
- 인터셉터 등록
- WebConfig 에서 등록한다.
package com.example.demo.config;
import com.example.demo.interceptor.LoggingInterceptor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Autowired
private LoggingInterceptor loggingInterceptor;
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(loggingInterceptor)
.addPathPatterns("/**") // 모든 요청에 적용
.excludePathPatterns("/css/**", "/js/**", "/images/**"); // 제외 경로
}
}'Backend > SpringBoot' 카테고리의 다른 글
| 간단하게 API 테스트 하기 (파일명.http) (0) | 2025.09.19 |
|---|---|
| REST -> RESTful 예제 (0) | 2025.09.19 |
| json과 파일 데이터 동시에 받기(ft. Postman, swagger 에서 테스트) (0) | 2025.09.18 |
| 클라이언트의 파일을 받아 처리하기 (0) | 2025.09.15 |
| @RequestBody, @ResponseBody (0) | 2025.09.15 |