비동기 프로그래밍을 처리하는 접근 방식중, 리액티브 프로그래밍에 대해 알아본다.
리액티브 프로그래밍은 "데이터나 이벤트의 변경이 발생하면 이에 반응해 처리하는 프로그래밍 기법"을 의미한다.
"변경이 발생하면" 이라는 문구에서 옵저버 패턴을 쉽게 떠올릴 수 있는데, 실제로 이에 영감을 받아 설계되었으며,
손쉬운 비동기 처리를 위해 함수형 프로그래밍의 접근 방식을 사용한다.
리액티브 스트림(Reactive Stream)
- 리액티브 스트림은 리액티브 프로그래밍의 표준 API 사양을 의미한다.
- 리액티브 스트림은 TCK(Technology Compatibility Kit)을 지원하기 때문에 라이브러리가 사양에 맞게 구현되었는지 보장할 수 있다.
- 표준 사양을 채택한 대표적인 구현체는 Project Reactor, RxJava, JDK9 Flow, Vert.x 등이 있다
리액티브 스트림의 사양은 "핵심 인터페이스"와 "프로토콜"로 구성된다.
<인터페이스>
인터페이스 명 | 설명 |
Publisher | 데이터를 생성하고 구족자에게 통지 |
Subscriber | 데이터를 구독하고 통지 받은 데이터를 처리 |
Subscription | Publisher, Subscriber간의 데이터를 교환하도록 연결하는 역할을 하며 전달받을 데이터의 개수를 설정하거나 구독을 해지할 수 있다 |
Processor | Publisher, Subscriber을 모두 상속받은 인터페이스 |
<프로토콜>
public interface Subscriber<T> {
public void onSubscribe(Subscription s);
public void onNext(T t);
public void onError(Throwable t);
public void onComplete();
}
메서드 명 | 설명 |
onSubscribe | 구독시 최초에 한번만 호출 |
onNext | 구독자가 요구하는 데이터의 수 만큼 호출 (최대 java.lang.Long.MAX_VALUE) |
onError | 에러 또는 더이상 처리할 수 없는 경우 |
onComplete | 모든 처리가 정상적으로 완료된 경우 |
리액티브 프로그래밍의 간단한 개념과 표준에 대해 정리해보았다.
이후에는 실제로 Webflux, Coroutine 등을 활용해 어떻게 적용이 가능한지 정리해보고자 한다.
출처 : 실무 프로젝트로 배우는 Kotlin & Spring : 리팩토링부터 서비스 구현까지, 패스트캠퍼스(https://fastcampus.co.kr/courses/211160)