스프링 WebClient나 WebFlux 등 Reactor를 기반으로 한 프레임워크를 사용할때 체인이 조립(assembly)단계와 실행(subscription) 단계가 분리되어있어 스택 트레이스 분석이 애로한경우가 있다. 에러가 Netty의 별도 스레드에서 발생하기 때문. 이를 보완하기 위해 해당 프레임워크는 checkpoint라는 로그를 지원한다.
그 원리는.. 체인 조립시점에 checkpoint 정보를 캡쳐해두고, 이걸 Suppressed 예외로 전달한다고 하는데 무슨 소린지 더 알아보자.
프레임워크가 자동으로 삽입해주는 로그임.
*__checkpoint ⇢ 404 from GET http://.../meta [DefaultWebClient]
webClient.get()
.retrieve()
.bodyToMono(String.class)
.checkpoint("fetch video meta") // 직접 삽입
.map(...)
.checkpoint("map result");
로그 앞에 * 가 있으면 조립(assemby) 시점의 전체 스택을 캡쳐하지 않은 것. 보통 WebClient자동삽입 checkpoint 등은 이런 *가 붙은 경량 버전을 사용함.