JAVA/Reactor,RxJava,Reactive Streams: 7개의 글
1.5 Spring5 Reactive 이번챕터에서 다룰 Spring Reactive는 제가 실무에서는 다루어보지 못한 기술입니다. 하지만 Spring5가 나오면서 가장 열정적으로 소개하고있는 기술이기에 정리를 해보려고 합니다. Spring에서는 “Reactive”라는 단어를 다음과 같이 정의하고 있습니다. The term, “reactive,” refers to programming models that are built around reacting to change — network components reacting to I/O events, UI controllers reacting to mouse events, and others. In that sense, non-blocking is react..
java stream api를 많이 사용하실텐데요. 예상치 못하게 NullPointerException 발생을 맞이하는 경우가 있어서 정리해보고자 합니다. 예시 SimpleEntry keyValue = new SimpleEntry("test", null); System.out.println(keyValue.getValue()); SimpleEntry는 java.util의 key - value를 담을 수 있는 클래스입니다. (HashMap에서 사용하는 그것) 위를 실행하면 어떤 결과가 나올까요? 네. 예상하신것 처럼 "null"입니다. SimpleEntry keyValue = new SimpleEntry("test", null); List list = Arrays.asList(keyValue); Objec..
본격적인 리액티브 프레임워크를 사용하기 전에, 옵저버 패턴 - 발행구독 패턴으로 만들어진 Spring Event와 SSE를 통해 리액티브 어플리케이션을 만들어보자 cf) 옵저버 패턴 포스팅 : https://sjh836.tistory.com/180 1. Spring 에서 Event 를 다룬다? 스프링 프레임워크에서는 EventListener를 통해 발행-구독(Pub/Sub) 패턴, 이벤트 버스(EventBus) 등을 지원한다. ApplicationContext 레벨에서 지원 도메인 서비스간 강한 결합, 강한 의존성을 Event 기반으로 풀어내면, 느슨한 결합 등을 얻을 수 있다. 개인적으론, 이것은 상황에 따라 장점이 될수도 있고, 단점이 될 수도 있다고 본다. 핵심 비즈니스 이외, 부가적인 비즈니스 로..
Spring 프레임워크도 5.x 부터는 리액티브를 지원하기 시작했지만, 이 글에서는 그 전까지의 상황을 살펴보았다. 리액티브가 왜 필요하고, 스프링5가 나오기전까진 반응성을 어떻게 구현하였는지를 살펴본다. 1. 리액티브(반응형)이 왜 필요한가? 1-1. C10K 문제 http://www.kegel.com/c10k.html 다수의 클라이언트를 동시에 처리할 수 있는가? 서버에서 10K(1만)개의 클라이언트에 대한 연결, 응답, 부하에 관련된 이야기 스레드는 서버의 cpu core 수에 종속적, 멀티스레드로 10k 요청에 대해 처리할 수 있는 한계가 있다. 요청 스레드들이 io wait 에 전부 빠져있다면? 대안) event-driven 방식 이벤트(=요청)와 io처리(I/O 멀티플렉싱)를 분리 이벤트루프는..
참조문서 https://projectreactor.io/ https://github.com/reactor/reactor-core https://godekdls.github.io/Reactor%20Core/contents/ 리액티브 스트림을 기본적으로 이해해야, Reactor 도 수월하게 이해할 수 있다. cf) 리액티브 스트림 포스팅 : https://sjh836.tistory.com/182 예제코드는 io.projectreactor:reactor-core:3.4.2 기준으로 작성되었다. 1. Reactor의 탄생 reactor 1.0은 13년 7월에 출시되었다. spring 프레임워크의 개발팀인 pivotal 에서 만든 오픈소스이다. 리액터 패턴, 함수형 프로그래밍, 메세지 기반 등의 설계와 모범사례들..
1. RxJava는? https://github.com/ReactiveX/RxJava 리액티브 프레임워크 중 하나이다. 다른 구현체로는 Akka, 리액터 등 RxJava 1.3.8을 끝으로 EOL 되었지만, 개념을 익히는 용도로만 사용해보자 RxJava 2.x 나 3.x 사용 권장 아래에서 사용하는 API들은 매우 기본적인 거라, 다른 버전에서도 호환됨 2. 스트림의 생산과 소비 @Test public void 스트림의_생산과_소비() { // 스트림 생산 : 이벤트 생성기 Observable observable = Observable.create(new Observable.OnSubscribe() { @Override public void call(Subscriber
참조문서 http://www.reactive-streams.org https://github.com/reactive-streams/reactive-streams-jvm/ https://engineering.linecorp.com/ko/blog/reactive-streams-with-armeria-1/ 1. Reactive Streams 란? 리액티브 스트림 스펙을 정의하고, 인터페이스를 제공하는 reactive-streams.org 를 살펴보면, 다음과 같다. Reactive Streams is an initiative to provide a standard for asynchronous stream processing with non-blocking back pressure. non-blocking b..