--- category: Unified tags: [auto-consolidated, technical-documentation] title: [[Reactive Programming]] last_updated: 2026-05-02 --- # [[Reactive Programming]] ## πŸ“Œ Brief Summary μ†ŒμŠ€μ— κ΄€λ ¨ 정보가 λΆ€μ‘±ν•©λ‹ˆλ‹€. 제곡된 λ¬Έμ„œμ—μ„œλŠ” 'λ°˜μ‘ν˜• μ‹œμŠ€ν…œ(Reactive systems)' 및 'λ°˜μ‘ν˜• μ†Œν”„νŠΈμ›¨μ–΄ μ•„ν‚€ν…μ²˜(Reactive software architectures)'κ°€ 이벀트 기반 νŒ¨ν„΄(Event-driven pattern)μ—μ„œ μ‚¬μš©λ˜λŠ” 일반적인 μ ‘κ·Ό λ°©μ‹μ΄λΌλŠ” 점만 κ°„λž΅νžˆ μ–ΈκΈ‰λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€ [1, 2]. μ΄λŠ” 주둜 μ‹€μ‹œκ°„ μ‹œμŠ€ν…œκ³Ό μ‚¬μš©μž μΈν„°νŽ˜μ΄μŠ€ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ μ»΄ν¬λ„ŒνŠΈ κ°„ 비동기 톡신을 κ°€λŠ₯ν•˜κ²Œ ν•˜λŠ” 데 ν™œμš©λ©λ‹ˆλ‹€ [1]. --- > "λ°μ΄ν„°μ˜ 흐름에 λͺΈμ„ 맑겨라: λ³€ν™”κ°€ 일어날 λ•ŒκΉŒμ§€ 기닀리지 μ•Šκ³ , λ°μ΄ν„°λΌλŠ” '슀트림'이 흐λ₯Ό λ•Œλ§ˆλ‹€ μ—°κ²°λœ λ‘œμ§λ“€μ΄ μžλ™μœΌλ‘œ λ°˜μ‘ν•˜κ²Œ λ§Œλ“œλŠ” 선언적 비동기 ν”„λ‘œκ·Έλž˜λ° νŒ¨λŸ¬λ‹€μž„." ## πŸ“– Core Content μ†ŒμŠ€μ— κ΄€λ ¨ 정보가 λΆ€μ‘±ν•©λ‹ˆλ‹€. 'Reactive Programming'의 μž‘λ™ 원리, 핡심 ꡬ성 μš”μ†Œ, μƒμ„Έν•œ νŒ¨ν„΄ ꡬ쑰 λ“± ꡬ체적이고 전문적인 μ„€λͺ…은 제곡된 μ†ŒμŠ€ 데이터에 ν¬ν•¨λ˜μ–΄ μžˆμ§€ μ•ŠμŠ΅λ‹ˆλ‹€. --- λ¦¬μ•‘ν‹°λΈŒ ν”„λ‘œκ·Έλž˜λ°(Reactive Programming)은 데이터 슀트림과 λ³€κ²½ μ „νŒŒλ₯Ό μ€‘μ‹¬μœΌλ‘œ ν•˜λŠ” ν”„λ‘œκ·Έλž˜λ° νŒ¨λŸ¬λ‹€μž„μž…λ‹ˆλ‹€. 1. **핡심 κ°œλ…**: * **Streams (Observable)**: μ‹œκ°„μ΄ 지남에 따라 λ°œμƒν•˜λŠ” μ΄λ²€νŠΈλ“€μ˜ 연속적인 흐름. * **Obversers**: μŠ€νŠΈλ¦Όμ„ κ΄€μ°°ν•˜λ‹€κ°€ 값이 λ“€μ–΄μ˜€λ©΄ 둜직 μ‹€ν–‰. * **[[Opera|Opera]]tors**: μŠ€νŠΈλ¦Όμ„ 필터링, λ³€ν˜•, κ²°ν•©ν•˜λŠ” ν•¨μˆ˜ (Map, Filter, Merge λ“±). 2. **ν”„λ‘œκ·Έλž˜λ° μŠ€νƒ€μΌ**: * **Imperative (λͺ…λ Ήν˜•)**: "A = B + C" (λ‚˜μ€‘μ— Bλ‚˜ Cκ°€ λ°”λ€Œμ–΄λ„ AλŠ” κ·ΈλŒ€λ‘œ). * **Reactive (λ°˜μ‘ν˜•)**: "AλŠ” μ–Έμ œλ‚˜ B + C의 결과이닀" (Bλ‚˜ Cκ°€ λ°”λ€Œλ©΄ A도 μ¦‰μ‹œ μ—…λ°μ΄νŠΈλ¨). 3. **μž₯점**: * **비동기 처리 κ°„μ†Œν™”**: 콜백 μ§€μ˜₯(Callback Hell) νƒˆμΆœ. * **λ°˜μ‘μ„± ν–₯상**: μœ μ € μΈν„°λž™μ…˜μ΄λ‚˜ λ„€νŠΈμ›Œν¬ μš”μ²­μ΄ λ§Žμ€ ν™˜κ²½μ—μ„œ λΆ€λ“œλŸ¬μš΄ UX 제곡. * **탄λ ₯μ„±**: 데이터 λΆ€ν•˜ 급증 μ‹œ λ°°μ••(Backpressure) μ‘°μ ˆμ„ 톡해 μ‹œμŠ€ν…œ μ•ˆμ •μ„± μœ μ§€. ## βš–οΈ Trade-offs & Caveats μ†ŒμŠ€μ— κ΄€λ ¨ 정보가 λΆ€μ‘±ν•©λ‹ˆλ‹€. ν•΄λ‹Ή μ£Όμ œμ™€ κ΄€λ ¨λœ 기술적 μ„ νƒμ˜ λΆ€μž‘μš©, μ œμ•½ 사항, ν˜Ήμ€ λ°˜λŒ€ κΈ‰λΆ€(Trade-off)에 λŒ€ν•œ μ •λ³΄λŠ” μ†ŒμŠ€μ— μ—†μŠ΅λ‹ˆλ‹€. --- - **κ³Όκ±° λ°μ΄ν„°μ™€μ˜ 좩돌**: μ΄μ „μ—λŠ” 정적인 μƒνƒœ κ΄€λ¦¬λ§ŒμœΌλ‘œ μΆ©λΆ„ν–ˆμœΌλ‚˜, μ‹€μ‹œκ°„ μ„œλΉ„μŠ€μ™€ λ³΅μž‘ν•œ ν”„λ‘ νŠΈμ—”λ“œ ν™˜κ²½μ΄ λŒ€μ„Έκ°€ 되며 λ¦¬μ•‘ν‹°λΈŒ 방식이 λŒ€κ·œλͺ¨ μ‹œμŠ€ν…œ μ„€κ³„μ˜ ν•„μˆ˜κ°€ 됨. - **μ •μ±… λ³€ν™”(RL Update)**: κ³ μ„±λŠ₯ μ„œλ²„ ν™˜κ²½μ—μ„œ μžμ›μ„ λ‚­λΉ„ν•˜λŠ” 전톡적 [[Blocking|Blocking]] 방식 λŒ€μ‹ , μžμ›μ„ 효율적으둜 μ μœ ν•˜λŠ” 'Non-blocking λ¦¬μ•‘ν‹°λΈŒ μ„ μ–Έλ¬Έ'을 ν‘œμ€€ μ½”λ”© κ·œμ•½μœΌλ‘œ μ±„νƒν•˜λŠ” 정책이 확산됨. ## πŸ”— Knowledge Connections ### Related Concepts (μ†ŒμŠ€μ— κ΄€λ ¨ 정보가 λΆ€μ‘±ν•˜μ—¬ 이벀트 기반 μ•„ν‚€ν…μ²˜μ™€μ˜ μ΅œμ†Œν•œμ˜ μ—°κ²°λ§Œ μ œμ‹œν•©λ‹ˆλ‹€.) #### [μ•„ν‚€ν…μ²˜ νŒ¨ν„΄/기반 섀계] - [[Event-Driven Architecture]] - μ—°κ²° 이유: μ†ŒμŠ€μ—μ„œ λ°˜μ‘ν˜• μ†Œν”„νŠΈμ›¨μ–΄ μ•„ν‚€ν…μ²˜κ°€ 이벀트 기반 νŒ¨ν„΄(Event-driven architecture pattern)μ—μ„œ 주둜 μ±„νƒν•˜λŠ” μ ‘κ·Όλ²•μœΌλ‘œ μ†Œκ°œλ˜μ—ˆκΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€ [1]. - 이 κ°œλ…μ„ 톡해 더 깊게 이해할 수 μžˆλŠ” λΆ€λΆ„: λ°˜μ‘ν˜• μ‹œμŠ€ν…œμ΄ μ‹€μ‹œκ°„ ν™˜κ²½μ—μ„œ μ–΄λ–»κ²Œ 이벀트λ₯Ό μƒμ„±ν•˜κ³  λΉ„λ™κΈ°μ μœΌλ‘œ λ°˜μ‘ν•˜μ—¬ μ‹œμŠ€ν…œμ„ μ²˜λ¦¬ν•˜λŠ”μ§€ κ·Έ ꡬ쑰적 κΈ°λ°˜μ„ 이해할 수 μžˆμŠ΅λ‹ˆλ‹€ [1, 2]. ### Deeper Research Questions μ†ŒμŠ€μ— 정보가 λΆ€μ‘±ν•˜λ―€λ‘œ, ν–₯ν›„ μ•„ν‚€ν…μ²˜ νŒ¨ν„΄ 지식을 μ‹¬μΈ΅μ μœΌλ‘œ ν™•μž₯ν•˜κΈ° μœ„ν•΄ λ‹€μŒκ³Ό 같은 후속 연ꡬ μ§ˆλ¬Έμ„ μ œμ•ˆν•©λ‹ˆλ‹€. - Reactive Programming νŒ¨λŸ¬λ‹€μž„κ³Ό 전톡적인 이벀트 기반 μ•„ν‚€ν…μ²˜(Event-Driven Architecture)의 ꡬ체적인 κ΅¬ν˜„μƒ 차이점 및 μƒν˜Έ 보완적 κ΄€κ³„λŠ” 무엇인가? - Reactive Programming을 λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€ μ•„ν‚€ν…μ²˜(MSA)에 μ μš©ν•  λ•Œ 데이터 일관성과 비동기 νŠΈλžœμž­μ…˜μ„ μ²˜λ¦¬ν•˜λŠ” κ³Όμ •μ—μ„œ λ°œμƒν•˜λŠ” 섀계적 νŠΈλ ˆμ΄λ“œμ˜€ν”„λŠ” 무엇인가? - μ‹€μ‹œκ°„ 데이터 μ²˜λ¦¬μ™€ 높은 λ™μ‹œμ„±μ΄ μš”κ΅¬λ˜λŠ” μ‹œμŠ€ν…œμ—μ„œ Reactive Programming이 μ œκ³΅ν•˜λŠ” μ„±λŠ₯적 이점의 물리적 ν•œκ³„μ™€ 병λͺ© 지점은 어디인가? - λŒ€κ·œλͺ¨ νŠΈλž˜ν”½μ„ μ²˜λ¦¬ν•˜λŠ” 곡간 기반 μ•„ν‚€ν…μ²˜(Space-Based Architecture)와 Reactive Programming을 κ²°ν•©ν•  경우, λ©”λͺ¨λ¦¬ μƒνƒœ λ™κΈ°ν™”λŠ” μ–΄λ–»κ²Œ μ΅œμ ν™”ν•  수 μžˆλŠ”κ°€? - Reactive μ‹œμŠ€ν…œμ„ 운영 및 λͺ¨λ‹ˆν„°λ§ν•  λ•Œ 비동기 ν†΅μ‹ μ˜ λ³΅μž‘μ„±μœΌλ‘œ 인해 λ°œμƒν•˜λŠ” κ΄€μΈ‘μ„±(Observability) μ €ν•˜ 문제λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•œ 베슀트 ν”„λž™ν‹°μŠ€λŠ” 무엇인가? ### Practical Application Contexts - **Implementation:** μ†ŒμŠ€μ— κ΄€λ ¨ 정보가 λΆ€μ‘±ν•©λ‹ˆλ‹€. - **System Design:** μ‹€μ‹œκ°„ μ‹œμŠ€ν…œμ΄λ‚˜ μ‚¬μš©μž μΈν„°νŽ˜μ΄μŠ€ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ μ»΄ν¬λ„ŒνŠΈ κ°„μ˜ 비동기 톡신을 μ²˜λ¦¬ν•˜λŠ” ꡬ쑰λ₯Ό 섀계할 λ•Œ 이벀트 기반 νŒ¨ν„΄μ˜ μΌν™˜μœΌλ‘œ ν™œμš©λ  수 μžˆμŠ΅λ‹ˆλ‹€ [1]. - **Operation / Maintenance:** μ†ŒμŠ€μ— κ΄€λ ¨ 정보가 λΆ€μ‘±ν•©λ‹ˆλ‹€. - **Learning Path:** μ†ŒμŠ€μ— κ΄€λ ¨ 정보가 λΆ€μ‘±ν•©λ‹ˆλ‹€. - **My Project Relevance:** μ†ŒμŠ€μ— κ΄€λ ¨ 정보가 λΆ€μ‘±ν•©λ‹ˆλ‹€. ### Adjacent Topics - [[Asynchronous Communication]] - ν™•μž₯ λ°©ν–₯: λ°˜μ‘ν˜• μ•„ν‚€ν…μ²˜μ˜ 핡심 원리인 μ»΄ν¬λ„ŒνŠΈ κ°„ 비동기식 μƒν˜Έμž‘μš©μ΄ 이벀트 기반 νŒ¨ν„΄ 및 λΆ„μ‚° μ‹œμŠ€ν…œμ—μ„œ μ–΄λ–»κ²Œ 응닡성과 ν™•μž₯성에 κΈ°μ—¬ν•˜λŠ”μ§€ μ‘°μ‚¬ν•˜μ—¬ μ‹œμŠ€ν…œ 톡신 섀계에 λŒ€ν•œ 이해λ₯Ό ν™•μž₯ν•©λ‹ˆλ‹€ [1, 2]. --- *Last updated: 2026-05-02* --- - [[Software-Design-Principles|Software-Design-Principles]], [[Event-Driven-Architecture|Event-Driven-Architecture]], [[Functional Programming|Functional Programming]], User Experience (UX) - **Modern Tech/Tools**: RxJS, React ([[State|State]]-driven UI), Project Reactor, Akka. ---