스프링 WebClient나 WebFlux 등 Reactor를 기반으로 한 프레임워크를 사용할때 체인이 조립(assembly)단계와 실행(subscription) 단계가 분리되어있어 스택 트레이스 분석이 애로한경우가 있다. 에러가 Netty의 별도 스레드에서 발생하기 때문. 이를 보완하기 위해 해당 프레임워크는 checkpoint라는 로그를 지원한다.

그 원리는.. 체인 조립시점에 checkpoint 정보를 캡쳐해두고, 이걸 Suppressed 예외로 전달한다고 하는데 무슨 소린지 더 알아보자.

자동 checkpoint

프레임워크가 자동으로 삽입해주는 로그임.

*__checkpoint ⇢ 404 from GET http://.../meta [DefaultWebClient] 

개발자가 직접 checkpoint 삽입하기

webClient.get()
    .retrieve()
    .bodyToMono(String.class)
    .checkpoint("fetch video meta")  // 직접 삽입
    .map(...)
    .checkpoint("map result");

*의 의미

로그 앞에 * 가 있으면 조립(assemby) 시점의 전체 스택을 캡쳐하지 않은 것. 보통 WebClient자동삽입 checkpoint 등은 이런 *가 붙은 경량 버전을 사용함.