상세 컨텐츠

본문 제목

project reactor

Spring Webflux

by Wanderer Kim 2023. 5. 1. 11:40

본문

728x90

reactor는 비동기 및 이벤트 기반 애플리케이션 개발을 위한 자바 라이브러리입니다. 이 라이브러리는 스프링 프레임위크의 일부로 개발되어 있으며, 리액티브 프로그래밍을 지원합니다.

 

1. 리액티브 프로그래밍

리액티브 프로그래밍은 데이터 스트림에 대한 비동기 및 이벤트 기반 처리를 위한 패러다임입니다. 이러한 처리 방식은 빠르게 증가하는 데이터 양과 복잡도에 대응하기 위한 방법론 중 하나입니다. 이를 위해 리액티브 프로그래밍은 비동기 및 이벤트 기반 처리를 지원하는 다양한 라이브러리와 프레임워크를 제공합니다.

 

2. Reactor의 핵심 개념

reactor는 flux와 mono라는 두 가지 핵심 클래스를 제공합니다. flux는 0또는 여러 개의 데이터를 발행하는 리액티브 스트림이며, mono는 0 또는 1개의 값을 발행하는 리액티브 스트림입니다. flux와 mono는 비동기적으로 처리될 수 있으며, non-blocking 및 callback 방식으로 처리됩니다.

 

flux와 mono는 여러 가지 연산자를 사용하여 데이터를 변환, 필터링, 정렬 및 조작할 수 있습니다. 예를 들어, map 연산자를 사용하여 데이터를 변환할 수 있습니다.

 

Flux<Integer> flux = Flux.just(1, 2, 3, 4, 5);

flux
    .map(value -> value * 2)
    .subscribe(System.out::println); // 2, 4, 6, 8, 10

위 코드에서 flux는 1부터 5까지의 정수를 발행하는 리액티브 스트림입니다. map 연산자를 사용하여 각각의 정수를 2배로 변환합니다. subscribe 메서드를 호출하여 변환된 데이터를 출력합니다.

 

3. Reactor의 기능

reactor는 스케쥴러를 제공하여 작업을 다른 쓰레드나 이벤트 루프에 배치할 수 있습니다. 이를 통해 애플리케이션의 성능과 확장성을 향상시킬 수 있습니다. 또한, 백프레셔를 지원하여 데이터를 처리하는 속도를 제어하여 과부하 상황을 발지하고, 스트림의 안전성을 유지할 있습니다.

Flux<Integer> flux = Flux.range(1, 10)
    .onBackpressureBuffer()
    .subscribe(new BaseSubscriber<Integer>() {
        @Override
        protected void hookOnNext(Integer value) {
            System.out.println(value);
            try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    });

위 코드에서 onBackpressureBuffer 메서드는 flux가 발행한 데이터를 버퍼링하고 소비자가 처리할 수 있는 속도에 맞춰서 데이터를 발행합니다. BaseSubscribe 클래스를 상속받은 클래스에서 bookOnNext 메서드를 오버라이드하여 데이터 처리를 정의할 수 있습니다.

 

4. 예외 처리

reactor는 예외 처리를 위한 다양한 메서드와 연산자를 제공합니다.

Flux<Integer> flux = Flux.just(1, 2, 3, 4, 5);

flux
    .map(value -> {
        if (value == 3) {
            throw new RuntimeException("Oops!");
        }
        return value;
    })
    .onErrorResume(e -> {
        System.err.println("Error: " + e.getMessage());
        return Mono.empty();
    })
    .subscribe(System.out::println);

위 코드에서 map 연산자에서는 정수 3을 처리하는 도중 예외를 발생시킵니다. onErrorResume 메서드는 예외가 발생했을 때 대체 데이터나 빈 데이터를 반환합니다.

 

결론

Reactor는 리액티브 프로그래밍을 위한 강력한 자바 라이브러리입닏. flux와 mono라는 두 가지 핵심 크랠스와 여러 가지 연산자, 스케쥴러, 백프레셔, 예외 처리 기능을 제공하여 비동기 및 이벤트 기반 애플리케이션 개발을 효율적으로 할 수 있습니다.

반응형

'Spring Webflux' 카테고리의 다른 글

Reactive Programming  (0) 2022.08.15

관련글 더보기

댓글 영역