TIL
TIL 2024-02-01 통합 테스트 HttpRequest No thread-bound request found 오류
wonow_
2024. 2. 1. 23:29
문제정의
사실 수집
통합 테스트 돌릴 시 No thread-bound request found 오류 발생
원인 추론
로깅 AOP 28번째 줄 HttpRequest 받아오는 부분에서 문제가 난 것으로 추정
조치 방안 검토
- ObjectProvider
- getObject() 하는 시점까지 RequestScope Bean 생성을 지연할 수 있다.
- 그 후 HTTP 요청이 일어나서 Logger 가 필요하게 되면 getObject() 를 통해서 빈이 생성 처리 된다.
- 통합 테스트 환경에선 HTTP 요청이 일어나지 않으니 이 방법이 아님
- 실질적인 Request 가 없는 곳이거나 Static 메서드에 HttpRequest를 받았을 때 문제가 생긴다.
- HttpRequest Logging AOP 분리
- 현재 @SwapLog는 서비스 레이어단의 로깅을 위해서 만든 어노테이션이지만 통합 테스트에서 서비스 레이어를 테스트하고 있고, HttpRequest를 실질적으로 받는 환경이 아니기 때문에 분리해야할 필요를 느꼈다.
- HttpRequest Logging AOP 분리
조치 방안 구현
@Before("@annotation(piglin.swapswap.global.annotation.SwapLog)") // 서비스 레이어
public void swapLog(JoinPoint joinPoint) {
log.info("\nMethod - {} | Method Argument - {}",joinPoint.getSignature().getName(), joinPoint.getArgs());
}
@Before("@annotation(piglin.swapswap.global.annotation.HttpRequestLog)") // 컨트롤러 레이어
public void httpRequestLog(JoinPoint joinPoint) {
MDC.put("traceId", UUID.randomUUID().toString());
HttpServletRequest req = ((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()).getRequest();
log.info("\nIP - {} | Browser - {}\n▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ Cookie ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼\n{} \n▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲", getRemoteAddr(req), getBrowser(req), getCookie(req));
}