λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

Web Development/JAVASCRIPT

μƒνƒœκ΄€λ¦¬ [1편] - Flux νŒ¨ν„΄(μ•„ν‚€ν…μ²˜)

πŸ’‘ Fluxλž€? μ™œ ν•„μš”ν• κΉŒ?

단방ν–₯ 데이터 흐름을 ν†΅ν•œ 예츑 κ°€λŠ₯ν•œ μƒνƒœ 관리 ꡬ쑰

🧭 Fluxλž€?

FluxλŠ” React와 ν•¨κ»˜ 자주 μ–ΈκΈ‰λ˜λŠ” ν΄λΌμ΄μ–ΈνŠΈ μ‚¬μ΄λ“œ μ•„ν‚€ν…μ²˜ νŒ¨ν„΄μž…λ‹ˆλ‹€.
단방ν–₯ 데이터 흐름을 기반으둜 μƒνƒœλ₯Ό 예츑 κ°€λŠ₯ν•˜κ²Œ 관리할 수 μžˆλ„λ‘ μ„€κ³„λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

FluxλŠ” ν”„λ ˆμž„μ›Œν¬κ°€ μ•„λ‹Œ κ°œλ…μ μΈ κ΅¬μ‘°μž…λ‹ˆλ‹€.


❓ FluxλŠ” μ™œ λ“±μž₯ν–ˆμ„κΉŒ?

κΈ°μ‘΄ MVC νŒ¨ν„΄μ˜ ν•œκ³„

  • λͺ¨λΈκ³Ό λ·° μ‚¬μ΄μ˜ μ–‘λ°©ν–₯ 데이터 흐름
  • μƒνƒœκ°€ μ—¬λŸ¬ 곳에 흩어져 있음
  • μ»΄ν¬λ„ŒνŠΈ κ°„ μ˜μ‘΄μ„± 증가
  • μœ μ§€λ³΄μˆ˜μ™€ 디버깅 어렀움

πŸ“Œ μ˜ˆμ‹œλ‘œ μ‰½κ²Œ 이해해보기

상황: μ‚¬μš©μžμ—κ²Œ μƒˆλ‘œμš΄ μ•Œλ¦Όμ΄ λ„μ°©ν–ˆμŠ΅λ‹ˆλ‹€.
헀더에 μ•Œλ¦Ό μ•„μ΄μ½˜μ΄ 있고, λͺ©λ‘ νŽ˜μ΄μ§€μ—μ„œλ„ μ•Œλ¦Όμ„ 확인할 수 μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€.

❌ κΈ°μ‘΄ 방식

  • μ•Œλ¦Όμ„ 읽으면 헀더와 λͺ©λ‘ μƒνƒœλ₯Ό 각각 μ—…λ°μ΄νŠΈ
  • μ—¬λŸ¬ μ»΄ν¬λ„ŒνŠΈμ—μ„œ μƒνƒœκ°€ 쀑볡 관리됨

βœ… Flux 방식

  1. Action을 λ°œμƒμ‹œν‚€κ³ 
  2. Dispatcherκ°€ 이λ₯Ό 전달
  3. Storeκ°€ μƒνƒœλ₯Ό λ³€κ²½
  4. View(μ»΄ν¬λ„ŒνŠΈ)λŠ” Storeλ₯Ό ꡬ독
// μ˜ˆμ‹œ: μ•Œλ¦Ό 읽기 μ•‘μ…˜
dispatch({ type: 'MARK_AS_READ', payload: { id: 123 } });
// Storeμ—μ„œ μ²˜λ¦¬ν•˜λŠ” reducer
function notificationsReducer(state, action) {
  switch (action.type) {
    case 'MARK_AS_READ':
      return state.map(n =>
        n.id === action.payload.id ? { ...n, read: true } : n
      );
    default:
      return state;
  }
}

πŸ”„ Flux의 데이터 흐름

[View] → (Action λ°œμƒ)
         ↓
[Dispatcher] → (Action 쀑계)
         ↓
[Store] → (μƒνƒœ λ³€κ²½ 및 View에 μ•Œλ¦Ό)
         ↓
[View]

λͺ¨λ“  μƒνƒœ 변경은 였직 Action → Storeλ₯Ό ν†΅ν•΄μ„œλ§Œ μΌμ–΄λ‚˜λ©°, μ»΄ν¬λ„ŒνŠΈ κ°„ 직접 ν˜ΈμΆœμ€ μ—†μŠ΅λ‹ˆλ‹€.


πŸ†š MVC vs Flux

ν•­λͺ© MVC (μ–‘λ°©ν–₯) Flux (단방ν–₯)
μƒνƒœ λ³€κ²½ μ»΄ν¬λ„ŒνŠΈ κ°„ 직접 호좜 Action → Store
μœ μ§€ 보수 볡작, 버그 많음 예츑 κ°€λŠ₯, 좔적 쉬움
ν…ŒμŠ€νŠΈ μš©μ΄μ„± UI 의쑴 λ†’μŒ μƒνƒœλ§Œ ν…ŒμŠ€νŠΈ κ°€λŠ₯

βœ… Flux의 μž₯점

  • μƒνƒœ λ³€κ²½ 흐름이 λͺ…ν™•ν•˜κ³  예츑 κ°€λŠ₯
  • Store만 ν…ŒμŠ€νŠΈν•˜λ©΄ λ˜λ―€λ‘œ μœ λ‹› ν…ŒμŠ€νŠΈ 용이
  • μ™ΈλΆ€ UIλ‚˜ μƒνƒœμ— 영ν–₯λ°›μ§€ μ•ŠμŒ
  • ReducerλŠ” 순수 ν•¨μˆ˜λ‘œ ꡬ성 κ°€λŠ₯

❌ Flux의 단점

  • κΈ°λ³Έ ꡬ쑰 κ΅¬ν˜„μ—λ„ λ§Žμ€ μ½”λ“œλŸ‰ ν•„μš”
  • ν•™μŠ΅ 곑선이 κ°€νŒŒλ¦„
  • λ‹¨μˆœν•œ ν”„λ‘œμ νŠΈμ—λŠ” 과도할 수 있음

✍️ 마무리

FluxλŠ” 특히 λŒ€κ·œλͺ¨ SPAμ—μ„œ κ°•λ ₯ν•œ μƒνƒœ 관리 νŒ¨ν„΄μ„ μ œκ³΅ν•©λ‹ˆλ‹€.
λͺ¨λ“  μƒνƒœ 변경이 Action을 톡해 흐λ₯΄κ³ , μ€‘μ•™μ˜ Storeμ—μ„œ μƒνƒœκ°€ κ΄€λ¦¬λ˜λ―€λ‘œ
λ³΅μž‘ν•œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œλ„ μœ μ§€λ³΄μˆ˜κ°€ μ‰¬μ›Œμ§‘λ‹ˆλ‹€.

πŸ’‘ 참고둜 Redux μ—­μ‹œ 이 Flux μ•„ν‚€ν…μ²˜λ₯Ό 기반으둜 λ§Œλ“€μ–΄μ‘ŒμŠ΅λ‹ˆλ‹€!