1. 개요

Spring WebFlux 의 도입으로 우리는 반응형 논블로킹 애플리케이션을 작성할 수 있는 또 다른 강력한 도구를 갖게 되었습니다. 이 기술을 사용하는 것이 이전보다 훨씬 쉬워 졌지만 Spring WebFlux에서 반응 시퀀스를 디버깅하는 것은 상당히 번거로울 수 있습니다 .

이 빠른 사용방법(예제)에서는 비동기 시퀀스에서 이벤트를 쉽게 기록하는 방법과 몇 가지 간단한 실수를 피하는 방법을 살펴봅니다.

2. 메이븐 의존성

반응형 스트림을 생성할 수 있도록 프로젝트에 Spring WebFlux 의존성을 추가해 보겠습니다.

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-webflux</artifactId>
</dependency>

 Maven Central에서 최신 spring-boot-starter-webflux 의존성을 얻을 수 있습니다.

3. 반응형 스트림 만들기

시작하려면 Flux 를 사용  하여 반응형 스트림을 만들고 log()  메서드를 사용하여 로깅을 활성화해 보겠습니다.

Flux<Integer> reactiveStream = Flux.range(1, 5).log();

다음으로 생성된 값을 사용하기 위해 구독합니다.

reactiveStream.subscribe();

4. 반응성 스트림 로깅

위의 애플리케이션을 실행한 후 로거가 작동하는 것을 볼 수 있습니다.

2018-11-11 22:37:04 INFO | onSubscribe([Synchronous Fuseable] FluxRange.RangeSubscription)
2018-11-11 22:37:04 INFO | request(unbounded)
2018-11-11 22:37:04 INFO | onNext(1)
2018-11-11 22:37:04 INFO | onNext(2)
2018-11-11 22:37:04 INFO | onNext(3)
2018-11-11 22:37:04 INFO | onNext(4)
2018-11-11 22:37:04 INFO | onNext(5)
2018-11-11 22:37:04 INFO | onComplete()

스트림에서 발생한 모든 이벤트를 볼 수 있습니다. 5개의 값이 방출된 후  onComplete() 이벤트로 스트림이 종료되었습니다.

5. 고급 로깅 ​​시나리오

더 흥미로운 시나리오를 보기 위해 응용 프로그램을 수정할 수 있습니다. 특정 개수의 이벤트만 제공하도록 스트림에 지시하는 take()Flux 에 추가해 보겠습니다 .

Flux<Integer> reactiveStream = Flux.range(1, 5).log().take(3);

코드를 실행하면 다음과 같은 출력이 표시됩니다.

2018-11-11 22:45:35 INFO | onSubscribe([Synchronous Fuseable] FluxRange.RangeSubscription)
2018-11-11 22:45:35 INFO | request(unbounded)
2018-11-11 22:45:35 INFO | onNext(1)
2018-11-11 22:45:35 INFO | onNext(2)
2018-11-11 22:45:35 INFO | onNext(3)
2018-11-11 22:45:35 INFO | cancel()

보시다시피  take() 는 세 개의 이벤트를 방출한 후 스트림을 취소했습니다.

스트림에서 log() 의 위치 는 매우 중요 합니다. take( ) 뒤에 log() 를 배치하면 어떻게 다른 출력이 생성 되는지 살펴보겠습니다 .

Flux<Integer> reactiveStream = Flux.range(1, 5).take(3).log();

그리고 출력:

2018-11-11 22:49:23 INFO | onSubscribe([Fuseable] FluxTake.TakeFuseableSubscriber)
2018-11-11 22:49:23 INFO | request(unbounded)
2018-11-11 22:49:23 INFO | onNext(1)
2018-11-11 22:49:23 INFO | onNext(2)
2018-11-11 22:49:23 INFO | onNext(3)
2018-11-11 22:49:23 INFO | onComplete()

보시다시피 관찰 지점을 변경하면 출력이 변경되었습니다. 이제 스트림이 세 개의 이벤트를 생성했지만 cancel() 대신 onComplete() 가 표시 됩니다. 이는 이 메서드에서 요청한 것 대신 take()  를 사용한 출력을 관찰하기 때문  입니다.

6. 결론

이 빠른 기사에서는 내장 log() 메서드를 사용하여 반응형 스트림을 기록하는 방법을 살펴보았습니다.

그리고 항상 그렇듯이 위 예제의 소스 코드는  GitHub 에서 찾을 수 있습니다 .

Generic footer banner