2023~/스프링으로 시작하는 리액티브 프로그래밍10 Ch10 Scheduler 10.1 스레드(Thread)의 개념 이해물리적인 스레드: CPU 코어를 논리적으로 나누어 놓은 스레드논리적인 스레드: 소프트웨어적으로 생성된 스레드물리적인 스레드는 진짜로 동시에 돌아가고 - 병렬성,논리적인 스레드는 여러 물리적 스레드를 빠른 속도로 번갈아 가며 실행되기 때문에 동시에 돌아가는 것 처럼 보인다 - 동시성 10.3 Scheduler를 위한 전용 Operator1) subscribeOn() Flux.fromArray(new Integer[] {1, 3, 5, 7}) .subscribeOn(Schedulers.boundedElastic()) .doOnNext(data -> log.info("# doOnNext: {}", data)) .doOnSubscri.. 2024. 11. 5. Ch09 Sinks 9.1 Sinks 란? - Publisher 와 Subscriber 의 역할을 모두 할 수 있는 리액티브 스트림즈 구성 요소- Reactor 3.5 부터 Processor 가 없어지고 Sinks만 지원- Sinks의 주 용도는 "signal을 프로그래밍 코드를 통해 명시적으로 전달하는 것"- create(), generate() operator는 싱글 스레드 기반에서 signal 을 전송하는데 사용하고, Sinks는 멀티스레드 방식으로 signal 을 전송하는데 사용함(thread-safety)1) create Operator를 사용하는 경우public class Example9_1 { public static void main(String[] args) throws InterruptedExcept.. 2024. 11. 3. Ch08 Backpressure 8.1 Backpressure Publisher 가 데이터를 emit 하는 속도가 Subscriber 가 처리하는 속도보다 훨씬 더 빠를 때, 오버플로우나 시스템 다운 발생 가능 이러한 문제를 해결하기 위한 수단이 BackPressure 8.2 Reactor에서의 Backpressure 처리 방식 1) 데이터 개수 제어 Subscriber 가 처리할 수 있는 수준의 데이터 개수를 Publisher 에게 지정(전달) 하는 방법 @Slf4j public class Example8_1 { public static void main(String[] args) { Flux.range(1, 5) .doOnRequest(data -> log.info("# doOnRequest: {}", data)) .subscrib.. 2024. 10. 22. Ch07 Cold Sequence 와 Hot Sequence 7.1 Cold 와 Hot 의 의미 Hot: 작업을 새로 시작하지 않고 기존 상태를 유지한다는 의미 (e.g Hot Swap, Hot Deploy) Cold: 기존의 연결을 끊고 같은 작업을 반복한다는 의미 (e.g Cold Wallet) 7.2 Cold Sequence 구독을 할 때마다 Publisher 가 데이터를 emit 하는 과정을 처음부터 다시 시작하는 데이터 흐름 (A가 구독하면 처음부터 emit, 추후에 B가 구독하면 다시 처음부터 emit) Flux coldFlux = Flux .fromIterable(Arrays.asList("A", "B", "C")) .map(String::toLowerCase); coldFlux.subscribe(each -> log.info("# Subscriber.. 2024. 10. 2. Ch06 마블 다이어그램 6.1 마블 다이어그램이란?마블(구슬) + 다이어그램(도표)Publisher 의 데이터 생성 + Operator 데이터 가공 + 데이터 출력 과정을 도표로 나타낸 것 Publisher 가 데이터를 emit 하는 타임라인OnComplete signal: 정상적으로 데이터가 emit 되었을 때 Publisher 가 보내는 signalemit 된 데이터에 Operator 함수를 적용하여 데이터 가공Operator 를 거쳐 변환된 데이터 타임라인onComplete signal: 데이터 처리 종료 후 Publisher 가 보내는 signalonError signal: 데이터 가공시 에러가 발생하면 Publisher 가 보내는 signal 6.2 마블 다이어그램으로 Reactor 의 Publisher 이해하기1).. 2024. 9. 19. Ch05 Reactor 개요 5.1 Reactor 란? 리액티브 스트림즈 사양의 구현체 중 하나(리액티브 프로그래밍을 위한 라이브러리로 Gradle dependency 에 spring-boot-starter-webflux 를 추가하면 Reactor도 추가된다)Reactor 특징 1) Reactive Streams 의 구현체2) Non-Blocking 어플리케이션3) 함수형 프로그래밍 API4) Flux[N], Mono[0|1]: Reactor 의 Publisher 에는 Flux, Mono 두 가지 타입이 있는데,: Flux[N] 은 0 ~ N 개의 데이터를 emit 할 수 있는 Publisher: Mono[0|1] 은 데이터를 emit 하거나/1개 하거나 이분법 적으로 emit 하는 Publisher5) MSA + 컴포넌트끼리 I/.. 2024. 9. 18. Ch04 리액티브 프로그래밍을 위한 사전 지식 4.1 함수형 인터페이스 Java 8 부터 함수형 인터페이스 도입인터페이스가 하나의 추상메서드를 가질 때, 인터페이스를 구현한 구현체를 함수의 파라미터로 전달하는 방식 함수형 인터페이스 예시 e.g Comparator @FunctionalInterfacepublic interface Comparator { int compare(T o1, T o2);}// 정렬시 인터페이스 구현한 익명 객체 전달Collections.sort(리스트, new Comparator() { @Override public int compare(Type o1, Type o2) { return o1.getName().compareTo(o2.getName()); }} 4.2 람다식 함수형 인터페이스를.. 2024. 9. 17. Ch03 Blocking I/O 와 Non-Blocking I/O Blocking I/O Spring MVC RedisTemplate 을 사용하여 동기적으로 API 응답을 주고 받는 방식요청 받은 작업 스레드가 작업을 완료하기 전까지 요청 스레드는 차단따라서 여러 작업을 차단없이 수행하려면 멀티 스레드를 사용해야 하는데 잦은 컨텍스트 스위칭, 스레드를 위한 메모리 할당 증가 등의 문제 존재 e.g. 클라이언트에서 본사 API 로 특정 책에 대한 정보를 요청할 때 본사 서버에서 다시 지점 서버로 요청하는 과정이 있다면, ClientApplication @SpringBootApplicationpublic class ClientApplication { public static void main(String[] args) { SpringApplication.. 2024. 8. 28. Ch02 리액티브 스트림즈(Reactive Streams) 2.1 리액티브 스트림즈란? 데이터를 리액티브하게 처리하기 위해서는 리액티브 라이브러리 필요리액티브 스트림즈 = 데이터를 리액티브(비동기 Non-Blocking 방식) 하게 처리하기 위한 리액트 라이브러리의 표준 사양 2.2 리액티브 스트림즈 구성요소 PublisherSubscriberSubscription(요청할 데이터 개수 지정, Publisher 구독 취소 등의 역할)Processor(Publisher, Subscriber 동시 역할 가능) 1) Subscriber 는 Publisher를 구독2) Publisher 는 데이터를 통지할 준비가 되었음을 Subscriber에 전달3) Subscriber 가 데이터 요청 개수 지정하여 요청(Subscription.request)4) Publisher 가 .. 2024. 8. 28. Ch01 리액티브 시스템과 리액티브 프로그래밍 1.1 리액티브 시스템이란? 리액티브(Reactive) 하다 = 반응을 잘 한다클라이언트에서 요청을 보냈을 때 지연 없이(혹은 지연을 최소화하여) 응답하도록 하는 것1.2 리액티브 선언문으로 리액티브 시스템 이해하기 Responsive, Resllient(회복성), Elastic(탄력성), Message Driven(메세지 기반)https://www.reactivemanifesto.org/ 1.3 리액티브 프로그래밍이란? 리액티브 시스템을 구축하는데 필요한 프로그래밍 모델비동기 메세지 통신 기반, Non-Blocking I/O 1.4 리액티브 프로그래밍의 특징 1) 선언형 프로그래밍: 명령형 프로그래밍 (실행할 동작을 구체적으로 명시) vs 선언형 프로그래밍 (동작에 대한 목표만 명시)2) 지속적으로.. 2024. 8. 22. 이전 1 다음