Flux Pattern

YejiΒ·2023λ…„ 10μ›” 25일
0

πŸ”– Before start

λ©΄μ ‘μ—μ„œ Redux λ””μžμΈ νŒ¨ν„΄μ— λŒ€ν•œ 질문이 λ‚˜μ™”λ‹€. Reduxλ₯Ό μ‚¬μš©ν•΄ λ³Έ κ²½ν—˜μ΄ 있고, μ–΄λ–€ μ‹μœΌλ‘œ λ™μž‘ν•˜λŠ”μ§€ μ•Œκ³  μžˆμ§€λ§Œ μ •ν™•ν•˜κ²Œ μ„€λͺ…ν•˜μ§€ λͺ»ν•΄ μ΄μƒν•œ 말만 λŠ˜μ–΄ 놓고 λ‚˜μ™”λ‹€.
면접은 항상 λ–¨λ¦¬μ§€λ§Œ λΆ€μ‘±ν•œ 뢀뢄을 ν™•μ‹€νžˆ κΉ¨λ‹«κ²Œν•œλ‹€. 곡뢀할거리가 생겨 μž¬λ°ŒκΈ°λ„ ν•˜λ‹€.
λ¦¬λ•μŠ€ λ””μžμΈ νŒ¨ν„΄μΈ Flux νŒ¨ν„΄κ³Ό Flux νŒ¨ν„΄μ˜ λ“±μž₯ 배경에 λŒ€ν•΄ μ•Œμ•„λ³΄μž.


1. MVC Pattern

Flux Pattern을 μ΄ν•΄ν•˜κΈ° μœ„ν•΄μ„œ μš°μ„  MVC Pattern을 μ•Œμ•„μ•Ό ν•œλ‹€.

MVC Pattern은 Model ,View, Controller둜 μ΄λ£¨μ–΄μ Έμžˆλ‹€.

ꡬ성역할
Model데이터λ₯Ό κ΄€λ¦¬ν•œλ‹€
Viewμ‚¬μš©μžμ—κ²Œ λ³΄μ—¬μ§€λŠ” UIλ₯Ό κ΄€λ¦¬ν•œλ‹€
ControllerModelκ³Ό View μ‚¬μ΄μ—μ„œ ν•„μš”ν•œ μž‘μ—…μ„ μˆ˜ν–‰ν•œλ‹€

μ‚¬μš©μžκ°€ Viewμ—μ„œ Action을 λ°œμƒμ‹œν‚€λ©΄ ControllerλŠ” 이λ₯Ό 감지해 ν•„μš”ν•œ μž‘μ—…μ„ μˆ˜ν–‰ν•œλ‹€.

1️⃣ 데이터 변경이 μ—†λŠ” 경우 View만 μ—…λ°μ΄νŠΈ ν•œλ‹€.
2️⃣ 데이터 변경이 μžˆλŠ” 경우 Model을 μ—…λ°μ΄νŠΈ ν•˜κ³  Viewμ—κ²Œ μ•Œλ € 화면을 μ—…λ°μ΄νŠΈ ν•œλ‹€.

🚨 MVC Pattern은 사싀상 λ°±μ—”λ“œμ— μ ν•©ν•œ λ””μžμΈ νŒ¨ν„΄μ΄λ‹€.

1. ν΄λΌμ΄μ–ΈνŠΈμ˜ μš”μ²­μ„ λ°›λŠ”λ‹€.
2. μš”μ²­μ— λŒ€ν•œ μž‘μ—…μ„ μ²˜λ¦¬ν•œλ‹€.
3. 데이터λ₯Ό κ°€κ³΅ν•˜κ±°λ‚˜ μˆ˜μ§‘ν•œλ‹€.
4. ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ 쀄 μ›ΉνŽ˜μ΄μ§€, 즉 Viewλ₯Ό μƒμ„±ν•˜κ³  μ‘λ‹΅ν•œλ‹€.

SPA 같은 경우 MVC Pattern으둜 λ™μž‘ν•œλ‹€κ³  생각할 수 μžˆλ‹€. μ‚¬μš©μžκ°€ μž…λ ₯ν•œ URL에 따라 ν•΄λ‹Ή URL을 뢄석해 μ•Œλ§žμ€ νŽ˜μ΄μ§€λ₯Ό λ Œλ”λ§ν•˜κΈ° λ•Œλ¬Έμ΄λ‹€. 그런데 MVC Pattern을 ν”„λ‘ νŠΈ μ•„ν‚€ν…μ³λ‘œ μ μš©ν•˜κΈ°μ—” λΆ„λͺ…ν•œ ν•œκ³„μ μ΄ μ‘΄μž¬ν•œλ‹€.

2. ν”„λ‘ νŠΈμ—”λ“œμ—μ„œμ˜ MVC Pattern의 ν•œκ³„

ν”„λ‘ νŠΈμ—”λ“œμ—μ„œλŠ” MVC Pattern을 μ μš©ν•˜κΈ°λž€ 쉽지 μ•Šμ•„μ‘ŒλŠ”λ°, 이전과 달리 Viewκ°€ 맀우 λ³΅μž‘ν•΄μ‘ŒμœΌλ©°, 그에 따라 μ‚¬μš©μžμ™€μ˜ μƒν˜Έμž‘μš©μ΄ λΉˆλ²ˆν•˜κ²Œ λ°œμƒν•˜κΈ° λ•Œλ¬Έμ΄λ‹€.

사싀 ν”„λ‘ νŠΈμ—”λ“œλŠ” κ·Έ μžμ²΄κ°€ View라고 ν•  수 μžˆλ‹€. λ‹€μ–‘ν•œ 이벀트λ₯Ό μ²˜λ¦¬ν•΄μ•Όν•˜λŠ” κ³Όμ •μ—μ„œ Viewκ°€ 곧 Controller와 같은 역할을 ν•  μˆ˜λ°–μ— μ—†λŠ” 상황이 생겨났고, 이 λ•Œλ¬Έμ— Modelκ³Ό View 사이 μ˜μ‘΄μ„±μ΄ 맀우 μ»€μ‘Œλ‹€.

1. μ‚¬μš©μž μž…λ ₯ κ°’ 관리
2. 이벀트λ₯Ό 감지해 ν™”λ©΄ μ—…λ°μ΄νŠΈ
3. setTimeout을 μ‚¬μš©ν•œ μŠ€μΌ€μ€„ 관리
4. μ„œλ²„μ™€ 톡신

etc...

MVC Pattern은 ν”„λ‘ νŠΈμ—”λ“œμ—μ„œ View와 Model의 관계λ₯Ό 맀우 λ³΅μž‘ν•˜κ²Œ λ§Œλ“ λ‹€.

1️⃣ View의 λ³€κ²½μœΌλ‘œ Model을 λ°”κΏ”μ•Ό ν•˜λŠ” 경우

  • μ‚¬μš©μž μž…λ ₯ 값이 λ³€κ²½ν–ˆμ„ 경우

2️⃣ Model의 λ³€κ²½μœΌλ‘œ Viewλ₯Ό λ°”κΏ”μ•Ό ν•˜λŠ” 경우

  • μ„œλ²„λ‘œλΆ€ν„° 받은 데이터 λ³€κ²½
  • 주기적으둜 μ–΄λ–€ 데이터가 μƒμ„±λ˜κ±°λ‚˜ λ³€κ²½λ˜μ—ˆμ„ λ•Œ

μ‚¬μš©μž μž…λ ₯이 μžˆμ„ λ•Œ λ·°κ°€ μ—¬λŸ¬ λͺ¨λΈμ„ λ³€κ²½ν•˜κ³ , λ³€κ²½λœ λͺ¨λΈμ€ 또 λ‹€λ₯Έ λͺ¨λΈμ„ λ³€κ²½ν•΄μ•Ό ν•˜λŠ” κ²½μš°κ°€ μžˆλ‹€. 심지어 λ³€κ²½λœ λͺ¨λΈμ΄ λ‹€μ‹œ μ—¬λŸ¬ 뷰에 λ°˜μ˜λ˜μ–΄μ•Ό ν•˜λŠ” κ²½μš°λ„ μžˆλ‹€. μ΄λŸ¬ν•œ ν˜„μƒμ€ 데이터 흐름을 μΆ”μ ν•˜κΈ° μ–΄λ ΅κ²Œ λ§Œλ“€κ³  μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ μ–΄λ–»κ²Œ λ™μž‘ν•˜λŠ”μ§€ μ˜ˆμΈ‘ν•˜κΈ° μ–΄λ ΅λ‹€λŠ” 치λͺ…적인 단점을 λ°œμƒμ‹œν‚¨λ‹€.

ν”„λ‘ νŠΈμ—”λ“œλŠ” μ΄λŸ¬ν•œ MVC Pattern의 ν•œκ³„λ₯Ό κ·Ήλ³΅ν•˜κ³ μž MVVM Pattern, Flux Pattern λ“±κ³Ό 같은 λ‹€μ–‘ν•œ κΈ°μˆ μ„ λ„μž…ν•œλ‹€. κ·Έ 쀑 νŽ˜μ΄μŠ€λΆμ—μ„œ λ°œν‘œν•œ Flux Pattern에 λŒ€ν•΄ μ•Œμ•„λ³΄μž.

3. Flux Pattern

νŽ˜μ΄μŠ€λΆμ—μ„œλŠ” 예츑 κ°€λŠ₯성을 높이기 μœ„ν•΄ 데이터가 단방ν–₯으둜 흐λ₯΄λŠ” Flux 아킀텍쳐λ₯Ό λ°œν‘œν–ˆλ‹€.

Action

  • μ‚¬μš©μž μž…λ ₯μ΄λ‚˜ μ„œλ²„ 데이터 λ³€κ²½ 등이 λ°œμƒν–ˆμ„ λ•Œ μƒμ„±λ˜λŠ” 객체닀.
  • Action typeκ³Ό μƒˆλ‘œμš΄ 데이터 payloadλ₯Ό Dispatcher에 μ „λ‹¬ν•œλ‹€.

Dispatcher

  • λ°μ΄ν„°μ˜ 흐름을 κ΄€λ¦¬ν•œλ‹€. Action의 type에 λ§žλŠ” μž‘μ—…μ„ μˆ˜ν–‰ν•œλ‹€.
  • μž‘μ—…μ€ Store의 데이터λ₯Ό μ‘°μž‘ν•˜λŠ” 것을 λ§ν•˜λ©°, Store에 μ •μ˜λœ 콜백 ν•¨μˆ˜λ₯Ό μ‹€ν–‰ν•œλ‹€.
  • Dispatcher ν†΅ν•΄μ„œλ§Œ Store 데이터λ₯Ό μ‘°μž‘ν•  수 μžˆλ‹€.

Store (Model)

  • 데이터 μ €μž₯μ†Œλ‘œ, 데이터와 데이터λ₯Ό μ‘°μž‘ν•  수 μžˆλŠ” ν•¨μˆ˜λ₯Ό 가지고 μžˆλ‹€.
  • Dispatcher에 데이터λ₯Ό μ‘°μž‘ν•  수 μžˆλŠ” ν•¨μˆ˜λ₯Ό λ“±λ‘ν•œλ‹€.
  • 데이터가 λ³€κ²½λ˜λ©΄ View에 μ•Œλ¦°λ‹€.

View

  • μ‚¬μš©μžμ—κ²Œ λ³΄μ—¬μ§€λŠ” μ»΄ν¬λ„ŒνŠΈλ‹€.
  • μ‚¬μš©μž μž…λ ₯이 λ°œμƒν•˜λ©΄ Action을 μƒμ„±ν•œλ‹€.
  • Storeκ°€ 데이터 변경을 μ•Œλ¦¬λ©΄ 데이터λ₯Ό 가져와 화면을 μž¬λ Œλ”λ§ ν•œλ‹€.

Redux, Recoil κ³Ό 같은 λ¦¬μ•‘νŠΈ μƒνƒœ 관리 λΌμ΄λΈŒλŸ¬λ¦¬λŠ” μ΄λŸ¬ν•œ Flux Pattern을 기반으둜 λ§Œλ“€μ–΄μ‘Œλ‹€. Store의 데이터가 λ°”λ€Œλ©΄ κ·Έ λ³€κ²½ 사항을 View에 λ°˜μ˜ν•˜λ„λ‘ ν•΄ 데이터 흐름을 μΆ”μ ν•˜κΈ° 훨씬 μš©μ΄ν•΄μ‘Œκ³  μ•ˆμ •μ μœΌλ‘œ 데이터λ₯Ό 관리할 수 μžˆλ‹€.


μ°Έκ³ 

Mozilla MVC
ν”„λ‘ νŠΈμ—”λ“œμ—μ„œ MVC보닀 더 많이 μ“°μ΄λŠ” νŒ¨ν„΄μ€?
A cartoon guide to Flux

profile
μ±„μ›Œλ‚˜κ°€λŠ” κ³Όμ •

0개의 λŒ“κΈ€

κ΄€λ ¨ μ±„μš© 정보