문제정의
사실 수집
통합 테스트 돌릴 시 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));
}
'TIL' 카테고리의 다른 글
TIL 2024-02-05 의존성 주입 (0) | 2024.02.05 |
---|---|
TIL 2024-02-02 OSI 7계층 요약 (0) | 2024.02.03 |
TIL 2024-01-31 로깅에 대한 고민을하다 알게된 글~~ (0) | 2024.02.01 |
TIL 2024-01-30 도메인 간의 서비스 참조, 레포지토리 참조 (0) | 2024.01.31 |
TIL 2024-01-29 로그 MDC (0) | 2024.01.29 |