๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Front-end/Redux

React๋ฅผ ์“ฐ๋‹ค๋ณด๋‹ˆ Redux๊ฐ€ ๊ถ๊ธˆํ•ด์กŒ๋‹ค

by ciocio 2021. 8. 18.

๐Ÿ“Œ  Redux๋ฅผ ์ฐพ๊ฒŒ๋œ ์ด์œ ?

 

React๋กœ ๊ฐ„๋‹จํ•œ ์›น ํŽ˜์ด์ง€๋ฅผ ๋งŒ๋“ค๊ณ  ์žˆ์—ˆ๋‹ค.

๋Œ“๊ธ€์„ ์ž…๋ ฅํ–ˆ์„ ๋•Œ ๊ธฐ์กด ๋Œ“๊ธ€์— ๋‚ด ๋Œ“๊ธ€์ด ์ถ”๊ฐ€๋˜๋Š” ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๊ณ  ์‹ถ์—ˆ๋‹ค.

useState๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„์™€ ์ปดํฌ๋„ŒํŠธ์•ˆ์—์„œ ์กฐ์ž‘ํ•ด์ฃผ๋ฉด ๋‚ด๊ฐ€ ์›ํ•˜๋Š” ๊ทธ๋ฆผ์„ ์–ป์„ ์ˆ˜ ์žˆ์—ˆ๋‹ค.

๊ทธ๋Ÿฐ๋ฐ ๋ฌธ์ œ๋Š” ํ˜•์ œ ์ปดํฌ๋„ŒํŠธ์˜€๋‹ค.

๋Œ“๊ธ€์ฐฝ ์™ธ์—๋„ ๋‚ด ๊ฐœ์ธ์ •๋ณด๊ฐ€ ๋‹ด๊ธด ์ฐฝ์— ์™”์„ ๋•Œ ๋‚ด๊ฐ€ ์“ด ๋Œ“๊ธ€๋“ค์ด ์ดค๋ผ๋ฝ ๋ณด์ด๊ฒŒ๋” ๋งŒ๋“ค๊ณ  ์‹ถ์—ˆ๋‹ค.

๊ทธ๋Ÿด๋ ค๋ฉด ๋Œ“๊ธ€์ฐฝ์—์„œ ์—…๋ฐ์ดํŠธ ๋œ ๊ทธ ์ •๋ณด๊ฐ€ ๊ฐœ์ธ์ •๋ณด ์ฐฝ์—๋„ ํ•„์š”ํ•  ๊ฒƒ ๊ฐ™์•˜๋‹ค.

์ฆ‰, ๋‹ค๋ฅธ ์ปดํฌ๋„ŒํŠธ ์•ˆ์— ์žˆ๋Š” ์ •๋ณด๋ฅผ ์ด ์ปดํฌ๋„ŒํŠธ๊ฐ€์ ธ์™€์•ผ ํ•˜๋Š”๋ฐ...

ํ•„์š”ํ•œ ์ฝ”๋“œ๋ฅผ ๊ทธ๋Œ€๋กœ ๋ณต๋ถ™ํ•˜๋Š” ๊ฒƒ ๋ง๊ณ ๋Š” ๋ฐฉ๋ฒ•์ด ์ƒ๊ฐ์ด ์•ˆ๋‚ฌ๋‹ค. State์™€ Props๋ฅผ ๋ชฐ๋ž์„ ์‹œ์ ˆ ใ…‹ใ…‹ใ…‹ใ…‹ใ…‹

์ด ๋ฐฉ๋ฒ•์ด ๋„ˆ๋ฌด ์‹ซ์–ด์„œ ๊ตฌ๊ธ€๋งํ•ด๋ณด๋‹ค๊ฐ€ global state '์ „์—ญ ์ƒํƒœ'์— ๋Œ€ํ•œ ๊ฐœ๋…์„ ์•Œ๊ฒŒ๋˜์—ˆ๋‹ค.

 

 

๐Ÿ“Œ  Flux๋Š” ๋ญ˜๊นŒ?

 

Flux๋Š” ํŽ˜์ด์Šค๋ถ์—์„œ Client-Side-Web-Applicaiton์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ๊ฐœ๋ฐœํ•œ App Architecture๋‹ค.

๋‹จ๋ฐฉํ–ฅ ๋ฐ์ดํ„ฐ ํ๋ฆ„์„ ํ™œ์šฉํ•ด ๋ทฐ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” React๋ฅผ ๋ณด์™„ํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.

(Vue.js์™€ Angular.js๋Š” ํ”„๋ ˆ์ž„์›Œํฌ์ธ ๋ฐ˜๋ฉด React๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๊ธฐ๋•Œ๋ฌธ์— ๊ตฌ์กฐ์ ์ธ ๋ฉด์—์„œ ์•ฝํ–ˆ๋˜ ๋ถ€๋ถ„์„ ๋ณด์™„ ๐Ÿ˜ƒ๐Ÿ˜ƒ)

์ด์ „์˜ ํ”„๋ ˆ์ž„์›Œํฌ์™€ ๋‹ฌ๋ฆฌ "ํŒจํ„ด"์˜ ๋ชจ์Šต์„ ํ•˜๊ณ  ์žˆ์–ด ์ฝ”๋“œ์— ๋ฐ”๋กœ ์ ์šฉํ•ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ํ•œ๋‹ค.

 

 

โœ…  MVC์˜ ๋ฌธ์ œ์ 

 

 

Flux๋ฅผ ์„ค๋ช…ํ•  ๋•Œ MVC ๋ชจ๋ธ๊ณผ ๋งŽ์ด ๋น„๊ตํ•œ๋‹ค.

์ •๋ณด์ฒ˜๋ฆฌ๊ธฐ์‚ฌ๋ฅผ ์ค€๋น„ํ•˜๋ฉฐ MVC ๋ชจ๋ธ์„ ์ ‘ํ–ˆ๋˜ ๊ธฐ์–ต์ด ๋‚˜๋Š”๋ฐ, ๋‹น์‹œ์—๋Š” '์™€ ์ด๋ฐฉ๋ฒ• ์ข‹๋‹ค' ๋ผ๊ณ  ์ƒ๊ฐํ–ˆ์—ˆ๋‹ค.

๊ทœ๋ชจ๊ฐ€ ์ž‘์€ App์„ ๋งŒ๋“ค๋•Œ๋Š” ์œ ์šฉํ•˜์ง€๋งŒ ๊ทธ ํฌ๊ธฐ๊ฐ€ ์ปค์กŒ์„ ๋•Œ๋Š” ๊ฐ๋‹นํ•˜๊ธฐ ์–ด๋ ค์šด ๋ฐฉ๋ฒ•์ด๋ž€ ๊ฑธ ์˜ค๋Š˜ ๊นจ๋‹ฌ์•˜๋‹ค.

MVC๋Š” ์–‘๋ฐฉํ–ฅ ๋ฐ”์ธ๋”ฉ ์‹œ์Šคํ…œ์ด๊ธฐ ๋•Œ๋ฌธ์— App์˜ ํฌ๊ธฐ๊ฐ€ ์ปค์งˆ์ˆ˜๋ก ์ฝ”๋“œ์˜ ์ธ๊ณผ ๊ด€๊ณ„๋ฅผ ํŒŒ์•…ํ•˜๊ธฐ ์–ด๋ ต๋‹ค.

 

 

โœ…   Flux์˜ ๋“ฑ์žฅ

 

 

Flux๋Š” MVC์™€ ๋‹ค๋ฅด๊ฒŒ ๋‹จ๋ฐฉํ–ฅ์œผ๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ ํ๋ฅธ๋‹ค.

React view์—์„œ ์‚ฌ์šฉ์ž๊ฐ€ ์ƒํ˜ธ์ž‘์šฉํ•  ๋•Œ ( id ์ž…๋ ฅ, ๋Œ“๊ธ€ ์ž…๋ ฅ, ๊ฒŒ์‹œ๋ฌผ ์˜ฌ๋ฆฌ๊ธฐ, ์ข‹์•„์š” ํด๋ฆญ etc )

ํ•ด๋‹น view๋Š” ์ค‘์•™์˜ dispatcher๋ฅผ ํ†ตํ•ด action์„ ์ „ํŒŒํ•œ๋‹ค.

App์˜ Data์™€ Business logic์„ ๋‹ด๊ณ  ์žˆ๋Š” store์€ action์ด ์ „ํŒŒ๋˜๋ฉด ์ด action์˜ ์˜ํ–ฅ์ด ๋ฏธ์น˜๋Š” ๋ชจ๋“  view๋ฅผ ๊ฐฑ์‹ ํ•œ๋‹ค.

์ด ๋ฐฉ์‹์€ ํŠนํžˆ, React์™€ ์ž˜๋งž๋Š” ๊ฒŒ view๊ฐ€ ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ ๊ฐฑ์‹ ๋˜์–ด์•ผํ•˜๋Š” ์ง€ ์ปดํฌ๋„ŒํŠธ๋งˆ๋‹ค ์ผ์ผ์ด

์ž‘์„ฑํ•˜์ง€ ์•Š๊ณ ์„œ๋„ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๊ธฐ๋•Œ๋ฌธ์— ์„ธ์ƒ์„ธ์ƒ ํŽธ๋ฆฌํ•˜๋‹ค.

๊ธ€์„ ์“ฐ๋ฉด์„œ๋„ wow ๋„ˆ๋ฌด ํŽธํ• ๊ฒƒ๊ฐ™๋‹ค๋Š” ์ƒ๊ฐ์„ ํ•œ๋‹ค !!!

 

 

โ—พ  Flux์˜ ๊ตฌ์„ฑ

 

 

Dispatcher / Stores / Views (React ์ปดํฌ๋„ŒํŠธ๋ผ ๋งํ•ด๋„ ๋ฌด๋ฐฉ)

 

โœ”  action์€ dispatcher์—๊ฒŒ action creator ๋ฉ”์†Œ๋“œ๋ฅผ ์ œ๊ณตํ•œ๋‹ค. ( ๋Œ€๋ถ€๋ถ„์˜ action์€ ์‚ฌ์šฉ์ž ์ƒํ˜ธ์ž‘์šฉ์—์„œ ๋ฐœ์ƒํ•˜๊ธด ํ•จ )

 

โœ”  ๋ชจ๋“  action์€ store๊ฐ€ dispatcher์— ๋“ฑ๋กํ•ด๋‘” callback์„ ํ†ตํ•ด ๋ชจ๋“  store์— ์ „์†ก๋œ๋‹ค.

 

โœ”  action์— ๋Œ€ํ•œ ์‘๋‹ต์œผ๋กœ store๊ฐ€ ์Šค์Šค๋กœ ๊ฐฑ์‹ ์„ ํ•œ ๋‹ค์Œ์—๋Š”, ์ž์‹ ์ด ๋ณ€๊ฒฝ๋˜์—ˆ๋‹ค๊ณ  ๋ชจ๋‘์—๊ฒŒ ์•Œ๋ฆฐ๋‹ค.

 

controller-view๋ผ๊ณ  ๋ถˆ๋ฆฌ๋Š” ํŠน๋ณ„ํ•œ view๊ฐ€ ๋ณ€๊ฒฝ ์ด๋ฒคํŠธ๋ฅผ ๋“ฃ๊ณ ,

์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ๋ฅผ store์—์„œ ๊ฐ€์ ธ์˜จ ํ›„,

๋ชจ๋“  ํŠธ๋ฆฌ์— ์žˆ๋Š” ์ž์‹ view์—๊ฒŒ ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ณตํ•œ๋‹ค.

 

-->  App ์ƒํƒœ๋Š” store์— ์˜ํ•ด ๊ด€๋ฆฌ๋˜๊ณ  App์˜ ๋‹ค๋ฅธ ๋ถ€๋ถ„๊ณผ๋Š” ์™„์ „ํžˆ ๋ถ„๋ฆฌ๋œ ์ƒํƒœ๋กœ ๋‚จ๋Š”๋‹ค.

๋ฐ˜์‘ํ˜•

'Front-end > Redux' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

Redux 3๊ฐ€์ง€ ์›์น™ ์ •๋ฆฌ  (0) 2021.11.04
Redux Action๊ณผ Reducer์™€ Store์˜ ๊ด€๊ณ„์„ฑ  (0) 2021.09.28

๋Œ“๊ธ€