토비의 봄 TV - 비동기 노트 Chapter 1
in Back-end on Bakend-Etc
토비의 봄 수업을 들으면서 기억에 남는 내용을 기록했습니다
“리액티브”란 단어 조심해서 사용해야 함.
이 단어를 보고 각자 연상하고 떠오르는 개념들이 다 다름
리액티브: 이벤트가 발생하면, 거기에 반응하는 방식의 코드
Duality
Duality (쌍대성: 수학용어인듯하다, 하나의 속성은 다르고, 기능은 같다) (에릭 마이어)
Iterable ←—> Observable
Pull Push
Pull: iter.next()로 다음 것 가져옴. 땡긴다.
Push: 이벤트를 보낸다. (가져가게 한다.)
Observable: Event Source, 이벤트를 던진다, 옵저버는 여러개일수잇다, 옵저버패턴
Source → Event/Data → Observer
setChanged() ↔ update()
발행 ↔ 구독
(Reactive Streams) Publisher ↔ Subscriber
(Gang of Pattern) Subject ↔ Observer
(Reactive Extensions) Observable ↔ Subscriber
Event Driven 개념을 자주 사용하는 안드로이드, 스윙은 이런 패턴을 자주 사용한다
Duality
notifyObservers(intArg);
int intArg = it.next();
즉,
void method (DATA) ↔ DATA method(void)
push 방식은 미리 정해진 데이터를 가져오는 방식(pull)보다 훨씬 다이나믹하다
Reactive Extensions를 만든 MS 엔지니어들은 옵저버 패턴의 한계를 크게 2가지 지목
- 도대체 언제 이벤트 전송이 Complete 되는가?
- Error 핸들링을 어떻게 하는가?
옵저버 패턴에는 위 2개에 대한 기본 골조(아이디어)가 없다
이 2가지로 추가되어 확장된 옵저버 패턴인 옵저버블이 리액티브 익스텐즈의 한 축 (세가지 축 중)
다른 축: 스케줄러
에러
- 프로그램 버그: Report돼서 Fix해야 함
- 네트워크 에러: Recoverable함, 자연 복구될 수 있어
50~60분 아주 흥미로운 얘기: 리액티브 탄생 설화 MS → Netflix (ReactiveX 그룹 탄생)
subscribe → onNext* → onComplete | onError |
on: 이벤트가 일어났다 unbounded: 한계가 없는
Publisher ↔ Subscription ↔ Subscriber
Subscription: Back Pressure
토비님도… 공부할 때 헷갈렸다고 함… 이름도 비슷비슷하고…
굉장히 어려운 주제
학자들도 연구중, 토비님도 계속 공부중, 계속 발전해나감
4, 5세대 진행중
스케줄러: 비동기, 병렬적 수행
예외: 감당 가능한건지, 복구 가능한건지, 종료해야하는지
1:30 멀티 쓰레드
GRPC