Redux
์ Flux๊ฐ ๋ฑ์ฅํ๊ฒ ๋์์๊น?
๊ธฐ์กด์ MVC ์ํคํ ์ฒ
- Model
- Viewxxs
- ๋ชจ๋ธ์ ๋ณํ๋ฅผ ์ฌ์ฉ์์๊ฒ ๋ ธ์ถํ๋ ์ญํ
- Controller
- ๋ชจ๋ธ์ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ๊ฑฐ๋ ์ ๋ฐ์ดํธ ํ๋ ์ญํ
๊ธฐ์กด์ MVC์ ํ๊ณ์ ์ ์ด๋ค๊ฒ ์์๊น?
- ํ์ด์ค๋ถ๊ณผ ๊ฐ์ ๋๊ท๋ชจ ์ ํ๋ฆฌ์ผ์ด์ ์์๋ MVC๊ฐ ๋๋ฌด ๋น ๋ฅด๊ฒ, ๋๋ฌด ๋ณต์กํด์ง๋ ์ฑ๊ฒฉ์ ๊ฐ์ง๊ณ ์์ต๋๋ค.
- ๊ตฌ์กฐ๊ฐ ๋๋ฌด ๋ณต์กํ๊ธฐ์ ์ ๊ธฐ๋ฅ์ ์ถ๊ฐํ๊ธฐ์ ํฌ๊ณ ์์ ๋ฌธ์ ๋ฐ์.
- ๋ํ์ ์ธ ์
- ํ์ด์ค๋ถ ์ ์ฝ์ ๊ฐ์ ํ์
- ์ฝ์ โ ๊ธ์ ๋ค๋ฃจ๋ Thread ๋ชจ๋ธ Update
- ๋์์ โ unRead Count ๋ชจ๋ธ Update
์ฆ ํ๋์ Action์ด ๋ค์ํ ๋ชจ๋ธ์ ๋ณํ๋ฅผ ์ฃผ๋ ์ํฉ์์ ๊ธฐ์กด์ MVC๋ ๋ฐ์ดํฐ ํ๋ฆ์ด ์์ธกํ๊ธฐ ์ด๋ ค์ด ๋ฌธ์ ๋ฅผ ๊ฐ์ ธ์ค๊ณ ์์ต๋๋ค.
Flux๋?
- ๊ธฐ์กด์ MVC์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ ์ ํ๋ฆฌ์ผ์ด์ ์ํคํ ์ฒ์ ๋๋ค.
Flux ๋ฐ์ดํฐ ํ๋ฆ
- ๋จ๋ฐฉํฅ ๋ฐ์ดํฐ ํ๋ฆ์ผ๋ก ๊ตฌ์ฑ๋์ด ์์ต๋๋ค.
์ ์๋ฐฉํฅ ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ์ด ์๋๊น?
- ํ ๋ชจ๋ธ์ ์ ๋ฐ์ดํธ ํ ๋ค ๋ค๋ฅธ ๋ชจ๋ธ์ ์ ๋ฐ์ดํธ ํด์ผํ๋ ์์ฐจ์ ์ธ ์ ๋ฐ์ดํธ๊ฐ ๋ฐ์ํ ์ ๋ฐ์ ์์ต๋๋ค.
- ์ ํ๋ฆฌ์ผ์ด์ ํฌ๊ธฐ๊ฐ ์ฆ๊ฐํ ์๋ก ์ฌ์ฉ์์ ์ธํฐ๋์ ๊ฒฐ๊ณผ๋ฅผ ์์ธกํ๊ธฐ ์ด๋ ค์ด ๋ฌธ์ .
Flux ๊ตฌ์ฑ์์
Dispatcher
- ๋ชจ๋ ๋ฐ์ดํฐ ํ๋ฆ์ ๊ด๋ฆฌํ๋ ํ๋ธ ์ญํ
- ์ก์ ์ด ๋ฐ์ํ๋ฉด Dispathcher๋ก ๋ฉ์์ง(์ก์ ๊ฐ์ฒด)๊ฐ ์ ๋ฌ โ ๋ฑ๋ก๋ ์ฝ๋ฐฑ ํจ์๋ฅผ ํตํด ๋ฉ์์ง๋ฅผ ์คํ ์ด ์ ๋ฌํฉ๋๋ค.
- ๋ค๋ฅธ ๊ตฌ์ฑ์์์ ๋ฌ๋ฆฌ Dispathcher๋ ์ ์ฒด ์ ํ๋ฆฌ์ผ์ด์ ์์ ํ ๊ฐ์ ์ธ์คํด์ค๋ง ์ฌ์ฉํฉ๋๋ค.
Action
- Dispathcher์ ํน์ Method๋ฅผ ์คํํ๋ฉด ์คํ ์ด์ ๋ณํ๋ฅผ ์ผ์ผํฌ ์ ์๋๋ฐ, Action(๋ฐ์ดํฐ ๋ฌถ์)์ ์ธ์๋ก ์ ๋ฌํ๋ค.
- ๋ณดํต ์ก์ ํ์ ๋๋ ์ก์ ์์ด๋๋ผ ๋ถ๋ฅด๋ ๊ณ ์ ํ ํค์ ๊ด๋ จ ๋ฐ์ดํฐ๋ฅผ ํฌํจํ๋ ๊ฐ์ฒด๋ก ๋ง๋ค์ด์ง๋๋ค.
Store
- ์ ํ๋ฆฌ์ผ์ด์ ์ํ๋ฅผ ์ ์ฅํฉ๋๋ค.
- ์ ํ๋ฆฌ์ผ์ด์ ์ ํน์ ๋๋ฉ์ธ์ ํด๋นํ๋ ์ํ๋ฅผ ๋ค๋ฃฌ๋ค๊ณ ๋ณด๋ ํธ์ด ์ข์ต๋๋ค.
- Example
- TimeStore : ์๊ฐ, ์ฌ์์ํ, ์์น
- ImageStore : ์ด๋ฏธ์ง ๊ด๋ จ ์ ๋ณด
- Dispatcher๋ก๋ถํฐ ๋ฉ์์ง๋ฅผ ์์ ํ๊ธฐ ์ํด์ ๋จผ์ ์ฝ๋ฐฑ ํจ์๋ฅผ Dispatcher์ ๋ฑ๋กํด์ผ ํฉ๋๋ค.
View
- Store์ ๋ณ๊ฒฝ ์ฌํญ์ ๊ฐ์งํ ์ ์๋ EventListener๋ฅผ ๋ฑ๋กํด์ผํฉ๋๋ค.
- Store์ ๋ณ๊ฒฝ ์ฌํญ์ด ๋ฐ์ํ๋ฉด ์ด๋ฅผ View ๋ฐ์ํ๋ ์ญํ ์ ๋๋ค.
์ Redux๊ฐ ๋ฑ์ฅํ๊ฒ ๋์์๊น?
Component์ State๊ฐ์ด ๋ณ๊ฒฝ๋๊ณ ๋ค๋ฅธ ๋ถ๋ชจ๋ฅผ ๊ฐ์ง Component์ ์ด๋ฅผ ๋ฐ์ํด์ผ ํ๋ค๋ฉด?
- ์์ Component๋ฅผ ํตํด ๋ณ๊ฒฝ์ฌํญ์ ์ ํ๋ฅผ ํด์ผ ํฉ๋๋ค.
- Component๊ฐ์ ๊ฒฐํฉ๋๊ฐ ๋งค์ฐ ๋์์ง๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๋ค.
- React์์ Redux๋ฅผ ์์ํ๊ธฐ ์ ๋ฐฐ์์ผ ํ 8๊ฐ์ง
์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด Redux๋ผ๋ ์ํ๊ด๋ฆฌ์๊ฐ ๋ฑ์ฅํ๊ฒ ๋ฉ๋๋ค.
Redux๋?
- Redux๋ ์๋ฐ์คํฌ๋ฆฝํธ ์ฑ์ ์ํ ์์ธก ๊ฐ๋ฅํ ์ํ ์ปจํ ์ด๋์ ๋๋ค.
Redux ๊ตฌ์ฑ์์
Dispatcher
- Redux๋ Dispatcher๋ฅผ ๋ช ์์ ์ผ๋ก ์์ฑํ์ง ์๊ณ ๋ Flux๋ฅผ ๊ตฌํํ ์ ์๋๋ก ์์ฑ๋์์ผ๋ฏ๋ก Dispatcher๋ฅผ ์๋ตํ ์ ์๋ค.
- ์ค์ ๋์คํจ์น ๋์์ ์คํ ์ด์ dispatch ๋ฉ์๋๋ฅผ ํธ์ถํ์ฌ ์คํํ๋ค.
Action
- Redux์์ ์ก์ ์ ์ก์ ํ์ (๋๋ ์ก์ ์์ด๋)์ ์์๋ก ์์ฑํ ํ ์ก์ ์์ฑ์ ํจ์๋ฅผ ํธ์ถํ๋ ๋ฐฉ์์ผ๋ก ์์ฑํ๋ค.
Reducer
- ๋ฆฌ๋์(Reducer)๋ Flux์๋ ์๋, Redux์์๋ง ์ฐพ์ ์ ์๋ ์ฉ์ด์ด๋ค.
- ์ก์ ์ ์ด๋ค ์ผ์ด ์ผ์ด๋ฌ๋์ง๋ ์๋ ค์ฃผ์ง๋ง ์ ํ๋ฆฌ์ผ์ด์ ์ ์ํ๋ฅผ ์ด๋ป๊ฒ ๋ฐ๊พธ์ด์ผ ํ ์ง๋ ์๋ ค์ฃผ์ง ์๋๋ฐ, Redux ํ๋ ์์ํฌ์์๋ ๋ฆฌ๋์๊ฐ ์ด ์ญํ ์ ๋ด๋นํ๋ค.
- Flux ์ ํ๋ฆฌ์ผ์ด์ ์์ ์คํ ์ด ๊ฐ์ฒด๋ฅผ ์ ๋ฐ์ดํธํ๋ ์ฝ๋ฐฑ ํจ์์ ํ๋ ์ญํ ์ ๋น์ทํ๋ค.
- ์ฃผ์ํ ์ .
- ๊ธฐ์กด์ state๋ ์์ ํ๋ฉด ์๋๋ค.
- ์ํ๋ฅผ ์์ ํ ๋๋ ๋ฐ๋์ Object.assign ๋ฑ์ ์ฌ์ฉํ์ฌ ์๋ก์ด ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ด์ ๋ฐํํด์ผ ํ๋ค.
- default ์ผ์ด์ค์์ ๊ธฐ์กด state๋ฅผ ๋ฐํํด์ผ ํ๋ค.