반응형 프로그래밍이란?
반응형 프로그래밍(Reactive Programming)은 데이터 스트림과 변경 전파를 중심으로 하는 프로그래밍 패러다임입니다. 정보처리기사 시험에서는 Observable, Subject, 주요 Operator, Backpressure, 리액티브 선언문이 핵심 출제 범위입니다.
리액티브 시스템 핵심 원칙(Reactive Manifesto)
- 반응성(Responsive): 빠르고 일관된 응답 시간
- 탄력성(Resilient): 장애 상황에서도 응답성 유지
- 유연성(Elastic): 부하 변화에 따른 자원 자동 조정
- 메시지 기반(Message Driven): 비동기 메시지로 느슨한 결합
Observable과 Observer
- Observable: 0개 이상의 값을 비동기적으로 방출하는 데이터 소스. subscribe()로 구독
- Observer: next(값 처리), error(에러 처리), complete(완료 처리) 세 가지 콜백
- Subscription: Observable 구독 핸들. unsubscribe()로 메모리 누수 방지
- Cold vs Hot Observable: Cold = 구독 시 데이터 생성(HTTP 요청), Hot = 이미 존재하는 스트림(마우스 이벤트)
Subject 유형
- Subject: Observable + Observer 역할 동시 수행. 멀티캐스팅
- BehaviorSubject: 초기값 필요. 새 구독자에게 마지막 값 즉시 방출
- ReplaySubject: 지정한 수의 과거 값을 새 구독자에게 재방출
- AsyncSubject: 완료(complete) 시에만 마지막 값 방출
주요 Operator
- map/filter: 배열과 유사. 스트림 변환·필터링
- mergeMap(flatMap): 내부 Observable을 병렬로 구독. 순서 보장 없음
- switchMap: 새 값 방출 시 이전 Observable 취소. 검색어 자동완성에 적합
- concatMap: 순서 보장. 이전 Observable 완료 후 다음 구독
- debounceTime: 지정 시간 동안 새 값 없을 때만 방출. 키입력 이벤트 처리
- throttleTime: 일정 시간 동안 첫 번째 값만 방출. 스크롤 이벤트 처리
Backpressure 처리
생산자가 소비자보다 빠를 때 발생하는 문제입니다. 리액티브 스트림 표준에서는 요청 기반 제어(Request/Demand)로 처리합니다.
- buffer: 값을 모아서 배열로 방출
- throttle: 일정 주기로 제한
- sample: 일정 주기마다 최신 값만 방출
정보처리기사 기출 핵심 정리
- 리액티브 선언문 4원칙: Responsive·Resilient·Elastic·Message Driven
- Cold Observable = 구독 시 생성, Hot = 이미 존재
- switchMap = 이전 취소(검색 자동완성), mergeMap = 병렬
- BehaviorSubject = 마지막 값 즉시 방출, ReplaySubject = 과거 N개 재방출
- debounceTime = 정지 후 방출(타이핑), throttleTime = 첫 번째 방출