Flux ํŒจํ„ด

๊ฐ•์€๋น„ยท2022๋…„ 1์›” 26์ผ
0

React

๋ชฉ๋ก ๋ณด๊ธฐ
29/36
post-thumbnail
post-custom-banner

๐Ÿ“Œ Flux ์ถœํ˜„ ๋ฐฐ๊ฒฝ

๊ธฐ์กด MVC ๋ชจ๋ธ์˜ ํ•œ๊ณ„

Model์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ •์˜ํ•˜๊ณ , Controller๋ฅผ ์ด์šฉํ•ด Model ๋ฐ์ดํ„ฐ๋ฅผ ์ƒ์„ฑ / ์กฐํšŒ / ์ˆ˜์ • / ์‚ญ์ œ (CRUD)ํ•˜๊ณ , ๋ณ€๊ฒฝ๋œ ๋ฐ์ดํ„ฐ๋Š” View๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ณด์—ฌ์ง„๋‹ค.

facebook์—์„œ ์ด์•ผ๊ธฐํ•˜๋Š” MVC ๋ชจ๋ธ์˜ ํฐ ๋‹จ์ ์€ ์–‘๋ฐฉํ–ฅ ๋ฐ์ดํ„ฐ ํ๋ฆ„์ด๋‹ค. Model ๋ฐ์ดํ„ฐ๊ฐ€ ์—…๋ฐ์ดํŠธ ๋˜๋ฉด View๋„ ๋”ฐ๋ผ์„œ ์—…๋ฐ์ดํŠธ๋˜๊ณ , ์—…๋ฐ์ดํŠธ๋œ View์— ๋”ฐ๋ผ ๋‹ค์‹œ ๋‹ค๋ฅธ Model์ด ์—…๋ฐ์ดํŠธ๋˜๊ณ , ์ด์— ๋”ฐ๋ผ ๋˜ ๋‹ค๋ฅธ View๊ฐ€ ์—…๋ฐ์ดํŠธ๋œ๋‹ค.

Model๊ณผ View ์‚ฌ์ด์—์„œ ์–‘๋ฐฉํ–ฅ ๋ฐ์ดํ„ฐ ํ๋ฆ„์ด ๋ฐœ์ƒํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ทœ๋ชจ๊ฐ€ ์ปค์งˆ์ˆ˜๋ก ๋ฐ์ดํ„ฐ์˜ ํ๋ฆ„์ด ๋ณต์žกํ•ด์ง€๊ณ  ๋ฐ์ดํ„ฐ์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์‹ ์†ํ•˜๊ฒŒ ์ „ํŒŒํ•˜๊ธฐ๊ฐ€ ์–ด๋ ต๋‹ค.


๐Ÿ“Œ Flux ํŒจํ„ด

facebook์—์„œ ๊ธฐ์กด MVC ํŒจํ„ด์˜ ๋ฌธ์ œ์ ์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด flux๋ผ๋Š” ํŒจํ„ด์„ ๋งŒ๋“ค์—ˆ๋‹ค. Flux์˜ ๊ฐ€์žฅ ํฐ ํŠน์ง•์€ ๋‹จ๋ฐฉํ–ฅ ๋ฐ์ดํ„ฐ ํ๋ฆ„์ด๋‹ค.

โœจ Action / Action Creator

  • ์•ก์…˜์€ ์ƒํƒœ ๋ฐ์ดํ„ฐ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋Š”๋ฐ ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ๋‹ด์€ ๊ฐ์ฒด์ด๋‹ค.
    • type๊ณผ payload๋ฅผ ํฌํ•จํ•œ๋‹ค.
    • type์€ ์•ก์…˜ ์ด๋ฆ„์ด๊ณ , payload๋Š” ์ƒํƒœ ์—…๋ฐ์ดํŠธํ•˜๋Š”๋ฐ ํ•„์š”ํ•œ ์ถ”๊ฐ€ ๋ฐ์ดํ„ฐ๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.
  • ์•ก์…˜ ์ƒ์„ฑ์ž๊ฐ€ ์•ก์…˜์„ ์ƒ์„ฑํ•˜์—ฌ dispatcher์—๊ฒŒ ๋„˜๊ฒจ์ค€๋‹ค.

โœจ Dispatcher

  • Dispatcher๋Š” ์ „๋‹ฌ๋œ ์•ก์…˜์„ ๋ณด๊ณ , ๋“ฑ๋ก๋œ ์ฝœ๋ฐฑํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ๋ชจ๋“  store์— ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•œ๋‹ค.

โœจ Store

  • store๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋‚ด์˜ ๋ชจ๋“  ์ƒํƒœ์™€ ์ƒํƒœ ์—…๋ฐ์ดํŠธ ๋กœ์ง์„ ๊ฐ–๊ณ  ์žˆ๋‹ค.
  • ๋ชจ๋“  ์ƒํƒœ ๋ณ€๊ฒฝ์€ store์—์„œ ๊ฒฐ์ •๋œ๋‹ค.
  • ์–ด๋–ค ํƒ€์ž…์˜ ์•ก์…˜์ด ์ „๋‹ฌ๋˜์—ˆ๋ƒ์— ๋”ฐ๋ผ ๋ฉ”์„œ๋“œ๋ฅผ ๋‹ค๋ฅด๊ฒŒ ์ ์šฉํ•ด ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•œ๋‹ค.

โœจ View

  • ์Šคํ† ์–ด์—์„œ ๋ณ€๊ฒฝ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์™€ ๋ชจ๋“  ์ž์‹ ๋ทฐ์—๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ๋ถ„๋ฐฐํ•ฉ๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ๋ฅผ ๋„˜๊ฒจ๋ฐ›์€ ๋ทฐ๋Š” ํ™”๋ฉด์„ ์ƒˆ๋กœ ๋ Œ๋”๋งํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ“Œ Flux != Redux

์˜ค๋Š˜๋‚  ์ƒํƒœ ๊ด€๋ฆฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ Redux๊ฐ€ ์‚ฌ์šฉ๋œ๋‹ค. Redux๋Š” flux ํŒจํ„ด์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋งŒ๋“ค์–ด์กŒ์ง€๋งŒ ๊ทธ๋Œ€๋กœ ๊ตฌํ˜„ํ•˜์ง€ ์•Š์•˜๋‹ค.

๋ฆฌ๋“€์„œ ํ•จ์ˆ˜

์ฒซ๋ฒˆ์งธ๋กœ, Redux์—๋Š” Dispatcher ๊ฐœ๋…์ด ์—†๋‹ค. Reducer๊ฐ€ flux ํŒจํ„ด์—์„œ ๋งํ•˜๋Š” Dispatcher + Store์˜ ๊ธฐ๋Šฅ์„ ๋‹ด๋‹นํ•œ๋‹ค. Reducer๋Š” ์•ก์…˜ ๊ฐ์ฒด๋ฅผ ๋ฐ›์•„ ์•ก์…˜ ํƒ€์ž…์— ๋”ฐ๋ผ ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•œ๋‹ค. ํ•จ์ˆ˜ ๋‚ด๋ถ€์—์„œ๋Š” ๊ธฐ์กด ์ƒํƒœ์˜ ๋ถˆ๋ณ€์„ฑ์„ ์ง€ํ‚ค๋ฉฐ ์ƒˆ๋กœ์šด ์ƒํƒœ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ๊ฐ Reducer๋Š” ์„œ๋กœ ์˜์กดํ•  ์ˆ˜ ์—†๋‹ค.

๋‹จ์ผ ์Šคํ† ์–ด

flux ํŒจํ„ด์—์„œ๋Š” ์—ฌ๋Ÿฌ ์Šคํ† ์–ด๊ฐ€ ๊ฐ์ž์˜ ์ƒํƒœ๋งŒ ๊ฐ„์งํ•œ ์ฑ„ ๊ณต์กดํ–ˆ๋˜ ๊ฒƒ๊ณผ ๋‹ฌ๋ฆฌ, Redux์—์„œ๋Š” ๋‹จ ํ•˜๋‚˜์˜ ์Šคํ† ์–ด๋งŒ ์กด์žฌํ•ด์•ผ ํ•œ๋‹ค. flux์—์„œ๋Š” ๊ฐ ๋ทฐ๊ฐ€ ์ž์‹ ์ด ํ•„์š”ํ•œ ์Šคํ† ์–ด์—๋งŒ ๊ฐ๊ฐ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, Redux๋Š” ๋‹จ์ผ ์Šคํ† ์–ด๋ฅผ ํ†ตํ•ด ๊ฐ ๋ฆฌ๋“€์„œ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.

์ƒํƒœ์˜ ๋ถˆ๋ณ€์„ฑ์„ ์ง€ํ‚ค๋ฉฐ side-effect ์—†์ด ์ƒํƒœ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๊ฒƒ์€ ์žฅ์ ์ด์ง€๋งŒ, ์ค‘์•™์ง‘์ค‘ํ˜• ์Šคํ† ์–ด๋กœ ์ธํ•ด ๋ทฐ๊ฐ€ ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผํ•˜๋Š” ๋ฐฉ์‹์ด ๋ฒˆ๊ฑฐ๋กœ์šด ๊ฒƒ์ด ๋‹จ์ ์ด๋‹ค.

post-custom-banner

0๊ฐœ์˜ ๋Œ“๊ธ€