모던 자바 인 액션 17장 : CompletableFuture: 안정적 비동기 프로그래밍

Adam·2024년 7월 11일
0

모던 자바 인 액션

목록 보기
16/20

최근 프로그래밍 환경

  • 빅데이터: 페타바이트 단위의 데이터 매일 증가함
  • 다양한 환경: 모바일 부터 클라우드까지 다양한 환경에 애플리케이션이 배포
  • 사용 패턴: 사용자는 1년 내내 항상 서비스를 이용할 수 있으며 밀리초 단위의 응답 시간 기대

리액티브 프로그래밍에서는 다양한 시스템과 소스에서 들어오는 데이터 항목 스트림을 비동기적으로 처리하고 합쳐서 이런 요구사항 만족시킴

리액티브 매니패스토

리액티브 애플리케이션과 시스템 개발의 핵심 원칙

  • 반응성: 빠를 뿐 아니라 일정하고 예상할 수 있는 반응 시간을 제공
  • 회복성: 장애가 발생해도 시스템은 반응
  • 탄력성: 무거운 작업 부하가 발생하면 자동으로 관련 컴포넌트에 할당된 자원 수를 늘린다
  • 메세지 주도: 비동기 메세지를 전달해 컴포넌트 끼리 통신을 해 회복성과 탄력성을 얻을 수 있다

애플리케이션 수준의 리액티브

비동기로 처리하는 것(ex. 퓨처와 콜백)

스레드보다 가볍다

추상수준을 높일 수 있어 데드락, 경쟁 조건과 같은 문제를 직접 처리하지 않고 비즈니스 요구사항 구현에 집중할 수 있다.

시스템 수준의 리액티브

여러 애플리케이션이 한 개의 일관적인, 회복할 수 있는 플랫폼을 구성할 수 있게 해줄 뿐 아니라 이들 애플리케이션 중 하나가 실패해도 전체 시스템은 계속 운영될 수 있도록 도와주는 소픝트웨어 아키텍처

시스템을 조립하고 상호소통을 조절

  • 회복성: 컴포넌트에서 발생한 장애를 고립시킴으로 문제가 주변의 다른 컴포넌트로 전파되면서 전체 시스템 장애로 이어지는 것을 막는다
  • 탄력성: 위치 투명성을 제공해 리액티브 시스템의 모든 컴포넌트가 수신자의 위치에 상관없이 다른 모든 서비스와 통신할 수 있음

리액티브 스트림과 플로 API

리액티브 스트림: 무한의 비동기 데이터를 순서대로 그리고 블록하지 않는 억압력을 전제해 처리하는 표준 기술

발행-구독 프로토콜로 억압력을 제공한다

Flow 클래스 소개

정적 컴포넌트 하나를 포함하고 있으며 인스턴스화할 수 없다

발행-구독 모델을 지원할 수 있도록 중첩된 4개의 인터페이스 포함

  • Publisher: 항목 발행
  • Subscriber: 항목을 소비, 요구사항을 제공해 억압력을 준다
  • Subscription: Publisher과 Subscriber 사이의 제어 흐름, 억압력 관리
  • Processor: 리액티브 스트림에서 처리하는 이벤트의 변환 단계를 나타낸다

리액티브 라이브러리 RxJava 사용하기

Observable 만들고 사용하기

Observable<String> strings = Observable.just("first", "second");
// just() 팩토리 메서드는 한 개 이상의 요소를 이용해 이를 방출하는 Observable로 변환

Observable<Long> onePerSec = Observable.interval(1, TimeUnit.SECONDS);
//0에서 시작해 1초 간격으로 long 형식의 값을 무한으로 증가시키며 값을 방출
// 사용자와 실시간으로 상호작용하면서 지정된 속도로 이벤트를 방출해야 할때 위 메서드 사용하는 것이 적절

Observable 변환하고 합치기

요소를 변환(map 사용)

요소를 합침(merge 사용)

profile
Keep going하는 개발자

0개의 댓글