thumbnail
πŸšƒ FLUX 아킀텍쳐
Architecture
2022.01.09

μ™œ Flux μ•„ν‚€ν…μ³λž€ κ°œλ…μ΄ λ‚˜μ™”μ„κΉŒ?

Facebookμ—μ„œ κ°œλ°œν•œ μ•„ν‚€ν…μ³μ΄μž, 단방ν–₯ 데이터 흐름을 κ°€μ§€λŠ” 아킀텍쳐


Flux 아킀텍쳐λ₯Ό μ•ŒκΈ° 전에, MVC 아킀텍쳐에 λŒ€ν•΄μ„œ

image

μš°μ„  MVC μ•„ν‚€ν…μ³λŠ” μ–‘λ°©ν–₯으둜 데이터가 μ˜€κ°„λ‹€.

아킀텍쳐 ꡬ쑰λ₯Ό λ§ν•˜μžλ©΄,

  1. Controller : Model의 데이터λ₯Ό μ‘°νšŒν•˜κ±°λ‚˜ μ—…λ°μ΄νŠΈν•˜λŠ” μ—­ν• 
  2. Model : 데이터λ₯Ό Viewλ₯Ό 톡해 λ°˜μ˜ν•˜λŠ” μ—­ν•  (BackμœΌλ‘œλΆ€ν„° 받은 데이터 or Back으둜 보낼 데이터)
  3. View : μ‚¬μš©μžλ‘œλΆ€ν„° 데이터λ₯Ό μž…λ ₯λ°›κ³  보여주기도 ν•˜λŠ” μ—­ν• 

이 ꡬ쑰가 κ°€μ§€λŠ” λ¬Έμ œμ μ„ κΉ¨λ‹«κΈ° μ‹œμž‘ν•œ 페이슀뢁.. πŸ€¦β€β™‚οΈ

image

β€œκΈ°λŠ₯을 μΆ”κ°€ν•˜λ©΄ ν• μˆ˜λ‘ MVC νŒ¨ν„΄μ˜ λ³΅μž‘μ„±μ΄ κΈ°ν•˜κΈ‰μˆ˜μ μœΌλ‘œ μ¦κ°€ν•œλ‹€!”

즉, κ±°λŒ€ν•œ μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ„ λŒ€μƒμœΌλ‘œ ν•œ ν”„λ‘œμ νŠΈμ— λŒ€ν•΄μ„œλŠ” λ„ˆλ¬΄ λ³΅μž‘ν•΄μ§„λ‹€κ³  λ§ν•œλ‹€.

μ‚¬μš©μžμ™€μ˜ μƒν˜Έμž‘μš©μ΄ β€˜Viewβ€™μ—μ„œ μΌμ–΄λ‚˜λ©΄μ„œ

μ‚¬μš©μžμ˜ μž…λ ₯에 따라 Model을 μ—…λ°μ΄νŠΈ ν•΄μ£Όμ–΄μ•Ό ν•˜λŠ” κ²½μš°κ°€ 생기고

μ˜μ‘΄μ„±μ˜ 이유둜 ν•œ Model 뿐만 μ•„λ‹ˆλΌ λ‹€λ₯Έ ModelκΉŒμ§€ μ—…λ°μ΄νŠΈ ν•΄μ•Ό ν•˜λŠ” 상황도 생긴닀.


image like pingpong game..πŸ“ ν•˜λ‚˜μ˜ 곡을 μ£Όκ³  λ°›λŠ” 것은 어렡지 μ•Šμ§€λ§Œ λ§Žμ€ 곡을 μ£Όκ³  λ°›λŠ”λ‹€λŠ” 것은..?


κ·Έλž˜μ„œ Flux 아킀텍쳐가 뭔데? πŸ€·πŸ»β€β™€οΈ

πŸš‡ 단방ν–₯ 데이터 흐름을 κ°€μ§€λŠ” ꡬ쑰

λ°μ΄ν„°λŠ” 단방ν–₯으둜만 흐λ₯΄κ³  μƒˆλ‘œμš΄ 데이터λ₯Ό λ„£μœΌλ©΄ μ²˜μŒλΆ€ν„° λ‹€μ‹œ μ‹œμž‘λ˜λŠ” 방식이닀.

image λ°μ΄ν„°μ˜ 흐름은 Dispatcher β†’ Store β†’ View β†’ Action β†’ Dispatcher β†’ …

아킀텍쳐 ꡬ쑰λ₯Ό 보자면,

  1. Action : κΈ°μ‘΄ μƒνƒœλ₯Ό λ³€κ²½ν•˜κΈ° μœ„ν•œ μ–΄λ–€ 행동, 이 ν–‰λ™μœΌλ‘œλΆ€ν„° λ„˜κ²¨λ°›μ€ 값듀을 가진 ν•˜λ‚˜μ˜ 객체 (데이터 묢음)

    // Redux
    export const setTable = item => ({
      type: SET_TABLE, // μ•‘μ…˜ 이름(μ–΄λ–€ μ•‘μ…˜μΈμ§€λ₯Ό κ°€λ₯΄ν‚΄)
      payload: item, // λ„˜κ²¨λ°›μ€ κ°’
    })
  2. Dispatcher : λͺ¨λ“  λ°μ΄ν„°μ˜ 흐름을 κ΄€λ¦¬ν•˜λŠ” μΌμ’…μ˜ ν—ˆλΈŒ μ—­ν• λ‘œ, μ•‘μ…˜ λ°œμƒ μ‹œ λ””μŠ€νŒ¨μ³λ‘œ λ©”μ„Έμ§€λ‚˜ μ•‘μ…˜ 객체가 μ „λ‹¬λ˜λ©΄ 콜백 ν•¨μˆ˜λ₯Ό 톡해 μŠ€ν† μ–΄λ‘œ μ „λ‹¬ν•œλ‹€. μŠ€ν† μ–΄μ— μ ‘κ·Όν•˜κΈ° μœ„ν•œ μΌμ’…μ˜ 단계

  3. Store : λͺ¨λ“  μ•‘μ…˜μ„ λ°›μ•„μ„œ μ ν•©ν•œ μ•‘μ…˜μ΄ μ–΄λ–€ 건지 필터링해주고, μƒνƒœ 값을 λ³€κ²½ν•˜κ³  μ—°κ²°λœ 컨트둀러 λ·°μ—κ²Œ μƒνƒœ λ³€ν™”λ₯Ό μ•Œλ¦¬λŠ” 역할이닀. μƒνƒœ 변경을 μœ„ν•œ μš”μ²­μ„ μŠ€ν† μ–΄μ— 직접 ν•  μˆ˜λŠ” μ—†λ‹€! (μ ‘κ·Όν•˜κΈ° νž˜λ“  λ‹Ήμ‹ ..Store..)

  4. View Controller & View : μƒνƒœλ₯Ό κ°€μ Έμ™€μ„œ 보여주고 μ‚¬μš©μžλ‘œλΆ€ν„° μž…λ ₯ 받을 화면을 λ³΄μ—¬μ£ΌλŠ” 역할이닀. View ControllerλŠ” μŠ€ν† μ–΄μ™€ 뷰의 쀑간 맀개체 역할이고, ViewλŠ” 컨트둀러 λ·°μ—κ²Œ λ³€ν™”λœ μƒνƒœλ₯Ό λ°›μ•„ κ·Έ μƒνƒœμ— 따라 λ‹€μ‹œ λ Œλ”λ§ν•œλ‹€.

image


μ—¬κΈ°μ„œ νƒ„μƒν•œ 라이브러리, Redux 🐣

페이슀뢁이 Flux 아킀텍쳐λ₯Ό λ°œν‘œν•œ 후에 Flux에 λŒ€ν•œ κ΅¬ν˜„μ²΄λ„ 같이 κ³΅κ°œν–ˆλŠ”λ°, μ—¬κΈ°μ—λŠ” λ””μŠ€νŒ¨μ³λ§Œ κ΅¬ν˜„λ˜μ–΄ μžˆμ–΄ μ™„μ „ν•œ Flux ν”„λ ˆμž„μ›Œν¬λΌκ³  λΆ€λ₯΄κΈ°μ—” 무리가 μžˆμ—ˆλ‹€. (14년도 Fluxκ°€ λ°œν‘œλ˜κ³ , 15년도 10월에 λ°œν‘œν•œ λ²„μ „μ—μ„œμ•Ό μŠ€ν† μ–΄λ₯Ό μ§€μ›ν–ˆκΈ° λ•Œλ¬Έμ— 사싀상 μ™„μ „ν•œ 곡식 Flux κ΅¬ν˜„μ²΄κ°€ μ—†λ˜ μ…ˆ)

이 μ‹œκΈ°μ— λ§Žμ€ Flux κ΅¬ν˜„μ²΄λ“€μ΄ λ‚˜νƒ€λ‚¬λŠ”λ°, μ§€κΈˆκΉŒμ§€ 널리 μ‚¬μš©λ˜λŠ” 것 쀑 ν•˜λ‚˜κ°€ Redux λΌμ΄λΈŒλŸ¬λ¦¬μ΄λ‹€!

기쑴의 Flux 아킀텍쳐에 β€˜Reducer’ κ°œλ…μ„ μΆ”κ°€ν•΄, μƒνƒœ λ³€κ²½μ˜ κ°œλ…μ„ 쑰금 λ°”κΏ” λ“±μž₯ν–ˆλ‹€.

image

λ¦¬λ•μŠ€μ˜ κ΅¬μ‘°λŠ” 이렇닀.

  1. Action : μ‚¬μš©μžκ°€ μš”μ²­ν•œ μ•‘μ…˜ (κΈ°μ‘΄ μƒνƒœλ₯Ό λ³€κ²½ν•˜κΈ° μœ„ν•œ 행동과 데이터)이며, λ·°μ—μ„œ useDispatchλ₯Ό μ‚¬μš©ν•˜μ—¬ μ•‘μ…˜μ„ λ°œμƒμ‹œν‚¨λ‹€.

  2. Reducer : Flux μ•„ν‚€ν…μ³μ˜ Dispatcher λŒ€μ‹  μƒνƒœ λ³€ν™” λ‘œμ§μ„ λ‹΄λ‹Ήν•˜λŠ” μ—­ν• λ‘œ, 전체 λ¦¬λ“€μ„œλ₯Ό κ΄€λ¦¬ν•˜λŠ” Root Reducerκ°€ 있고 ν•˜μœ„ Sub Reducerκ°€ μžˆλ‹€. μ—¬κΈ°μ„œ Redux의 ν‚€ν¬μΈνŠΈλŠ” πŸ’‘ 이전 μƒνƒœ 자체λ₯Ό λ³€κ²½ν•˜μ§€ μ•Šκ³  μƒνƒœλ₯Ό λ³΅μ‚¬ν•œ λ‹€μŒ μƒνƒœλ₯Ό λ³€κ²½ν•œλ‹€λŠ” 것

  3. Store : Flux μ•„ν‚€ν…μ³μ˜ μŠ€ν† μ–΄λŠ” λ‹€μˆ˜μ˜ μŠ€ν† μ–΄κ°€ μ‘΄μž¬ν•˜λŠ”λ° λΉ„ν•΄ λ¦¬λ•μŠ€μ—μ„œλŠ” 단 ν•˜λ‚˜μ˜ μŠ€ν† μ–΄λ₯Ό 가지며, μƒνƒœ 트리라고 λΆˆλ¦¬λŠ” μƒνƒœ 값을 μœ μ§€ν•œλ‹€.

  4. View : μŠ€ν† μ–΄μ™€ λ·°λ₯Ό 연결해놓은 Provider Componentλ₯Ό 톡해 μŠ€ν† μ–΄κ°€ 뷰에 μƒνƒœλ₯Ό κ³΅κΈ‰ν•œλ‹€.

    sellha_front/src/index.js


✨ 정리

  • μš”μ¦˜ λ¦¬μ•‘νŠΈλŠ” Flux 아킀텍쳐가 μ λ Ήν–ˆκΈ° λ•Œλ¬Έμ—(πŸ‘½) κΌ­ μ‚΄νŽ΄λ΄μ•Ό ν•˜λŠ” κ°œλ…μ΄μ—ˆλ‹€..
  • ν”„λ‘œμ νŠΈμ˜ 크기에 λ”°λΌμ„œ μƒνƒœ 값이 λ§Žμ§€ μ•Šλ‹€λ©΄ κΌ­ Reduxλ₯Ό μ‚¬μš©ν•˜μ§€ μ•Šκ³  λ¦¬μ•‘νŠΈμ˜ Context API와 useReducer와 같은 κΈ°λŠ₯을 μ‚¬μš©ν•  μˆ˜λ„ μžˆμ§€λ§Œ, ν”„λ‘œμ νŠΈ 크기가 점점 컀지고 λ³΅μž‘ν•¨μ΄ λŠ˜μ–΄λ‚˜λ©΄ Reduxλ₯Ό μ‚¬μš©ν•˜λŠ” 편이 ν”„λ‘œμ νŠΈ μƒνƒœλ“€μ„ κ΄€λ¦¬ν•˜λŠ”λ° μžˆμ–΄μ„œ 더 쒋을 것 κ°™λ‹€ 😎
  • ν”„λ‘œμ νŠΈλ₯Ό μ§„ν–‰ν•˜λ©΄μ„œ λ¦¬λ•μŠ€λ₯Ό μ½”λ“œλ‘œ μ ‘ν•˜κ³  κ΅¬ν˜„λ§Œ 해봀지, μ–΄λ–»κ²Œ λ§Œλ“€μ–΄μ‘ŒλŠ”μ§€, 이게 FLUX μ•„ν‚€ν…μ³μ—μ„œ νŒŒμƒλœ λΌμ΄λΈŒλŸ¬λ¦¬μΈμ§€ μ•Œμ§€λ„ λͺ»ν•œ 채 μ“°κ³  μžˆμ—ˆλ‹€. μ΄μ œμ„œμ•Ό 쑰금 μ•Œκ²Œ λ˜μ—ˆμœΌλ‹ˆ, μ•žμœΌλ‘œ λ¦¬λ•μŠ€μ˜ κ°œλ…μ„ 더 ν™•μ‹€ν•˜κ²Œ μ„€λͺ…ν•  수 μžˆλŠ” κ·Έ λ‚ κΉŒμ§€ 곡뢀λ₯Ό μ—΄μ‹¬νžˆ ν•΄μ•Όκ² λ‹€.

μ°Έκ³  λ‚΄μš©

FLUX μ•„ν‚€ν…μ³λž€?

Flux와 Redux에 λŒ€ν•œ 이해

Thank You for Visiting My Blog, Have a Good Day 😊
Β©2021 Developer minkyung choi, Powered By Gatsby.