Redux๋?
๐ Redux๋ javascript ์ํ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๋ค.
์ํ ๊ด๋ฆฌ์ ํ์์ฑ
๐ ์ํ๋?
- React์์ state๋ component ์์์ ๊ด๋ฆฌ๋๋ ๊ฒ์ด๋ค.
๐ Component ๊ฐ์ ์ ๋ณด ๊ณต์
- ์์ ์ปดํฌ๋ํธ๋ค ๊ฐ์ ๋ค์ด๋ ํธ ๋ฐ์ดํฐ ์ ๋ฌ์ ๋ถ๊ฐ๋ฅํ๋ค.
- ์์ ์ปดํฌ๋ํธ๋ค ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์ ๋๋ ์ํ๋ฅผ ๊ด๋ฆฌํ๋ ๋ถ๋ชจ ์ปดํฌ๋ํธ๋ฅผ ํตํด์ ์ฃผ๊ณ ๋ฐ๋๋ค.
- ์์์ด ๋ง์์ง๋ค๋ฉด ์ํ ๊ด๋ฆฌ๊ฐ ๋งค์ฐ ๋ณต์กํด์ง๋ค.
- ์ํ๋ฅผ ๊ด๋ฆฌํ๋ ์์ ์ปดํฌ๋ํธ์์ ๊ณ์ ๋ด๋ ค ๋ฐ์์ผํ๋ค. (Props drilling ์ด์)
๐ ์ํ ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ฉด
- ์ ์ญ ์ํ ์ ์ฅ์ ์ ๊ณต
- Props drilling ์ด์ ํด๊ฒฐ
๐ ์ํ ๊ด๋ฆฌ ํด ์ข
๋ฅ
Redux์ ์ธ๊ฐ์ง ์์น
1) Single source of truth
ํ๋์ ์ ํ๋ฆฌ์ผ์ด์
์์๋ ํ๋์ ์คํ ์ด๋ง ์ฌ์ฉํ์๋ ์์น์ด๋ค. ์ด๋ ๊ฒ ํ๋ฉด ์ ํ๋ฆฌ์ผ์ด์
์ ๋๋ฒ๊น
์ด ์ฌ์์ง๊ณ ์๋ฒ์์ ์ง๋ ฌํ๊ฐ ๋ ์ ์๊ณ ์ฝ๊ฒ ํด๋ผ์ด์ธํธ์์ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์๋ค์ฌ์ฌ ์ ์๊ฒ ๋๋ค.
2) State is read-only
์ํ๋ฅผ ๋ณํ์ํค๋ ๋ฐฉ๋ฒ์ ์ค์ง ์ก์
์ ์ผ์ผํค๋ ๊ฒ์ด๋ค. ์ด๊ฒ์ ์ํ๋ฅผ ๋ณํ์ํค๋ ์๋๋ฅผ ์ ํํ๊ฒ ํํํ ์ ์๊ณ , ์ํ ๋ณ๊ฒฝ์ ๋ํ ์ถ์ ์ด ์ฉ์ดํด์ง๊ฒ ๋๋ค.
3) Changes are made with pure functions
๋ณํ๋ฅผ ์ผ์ผํค๋ ๋ฆฌ๋์ ํจ์๋ ์์ํ ํจ์์ฌ์ผ ํ๋ค. ์์ ํจ์๋ ๋ค์ ์กฐ๊ฑด์ ๋ง์กฑํ๋ค.
- ๋ฆฌ๋์ ํจ์๋ ์ด์ ์ํ์ ์ก์
๊ฐ์ฒด๋ฅผ ํ๋ผ๋ฏธํฐ๋ก ๋ฐ๋๋ค.
- ํ๋ผ๋ฏธํฐ ์ธ์ ๊ฐ์๋ ์์กดํ๋ฉด ์๋๋ค.
- ์ด์ ์ํ๋ ์ ๋๋ก ๊ฑด๋๋ฆฌ์ง ์๊ณ , ๋ณํ๋ฅผ ์ค ์๋ก์ด ๊ฐ์ฒด ์ํ๋ฅผ ๋ง๋ค์ด์ ๋ฐํํ๋ค.
- ๋๊ฐ์ ํ๋ผ๋ฏธํฐ๋ก ํธ์ถ๋ ๋ฆฌ๋์ ํจ์๋ ์ธ์ ๋ ๋๊ฐ์ ๊ฒฐ๊ณผ ๊ฐ์ ๋ฐํํด์ผ ํ๋ค.
Redux ๊ธฐ๋ณธ ์ฉ์ด
1) ์ก์
(Action)
์ํ์ ๋ณํ๊ฐ ํ์ํ๋ค๋ฉด ์ก์
์ ์ผ์ผ์ผ์ผํ๋ค. ์ก์
์ ๊ฐ์ฒด๋ก ํํ๋๋ฉฐ typeํ๋๋ฅผ ๋ฐ๋์ ๊ฐ์ง๊ณ ์์ด์ผ ํ๋ค.
{
type: 'ADD_TODO',
data: {
id: 1,
text: '๋ฆฌ๋์ค ๋ฐฐ์ฐ๊ธฐ'
}
}
2) ์ก์
์์ฑํจ์(Action Creator)
์ก์
์์ฑํจ์๋ ์ก์
๊ฐ์ฒด๋ฅผ ๋ง๋ค์ด์ฃผ๋ ํจ์์ด๋ค. ํ์ดํ ํจ์๋ก๋ ํํ์ด ๊ฐ๋ฅํ๋ค.
function addTodo(data) {
return {
type: 'ADD_TODO',
data,
}
}
3) ๋ฆฌ๋์(Reducer)
๋ฆฌ๋์๋ ํ์ฌ ์ํ์ ์ก์
๊ฐ์ฒด๋ฅผ ๋ฐ์, ํ์ํ๋ค๋ฉด ์๋ก์ด ์ํ๋ฅผ ๋ฆฌํดํ๋ ํจ์์ด๋ค. ์ก์
์ ํ์ ๊ธฐ๋ฐ์ผ๋ก ์ด๋ฒคํธ๋ฅผ ์ฒ๋ฆฌํ๋ ์ด๋ฒคํธ ๋ฆฌ์ค๋๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค.
const initialState = {
counter: 1,
}
function reducer(state = initialState, action) {
switch (action.type) {
case INCREMENT:
return {
counter: state.counter + 1,
}
default:
return state
}
}
4) ์คํ ์ด(Store)
์คํ ์ด๋ ์ํ๊ฐ ๋ค์ด์๋ค. ํ๋์ ํ๋ก์ ํธ๋ ํ๋์ ์คํ ์ด๋ง ๊ฐ์ง ์ ์๋ค.
5) ๋์คํจ์น(Dispatch)
์คํ ์ด์ ๋ด์ฅ ํจ์ ์ค ํ๋์ธ ๋์คํจ์น๋ ์ก์
๊ฐ์ฒด๋ฅผ ๋๊ฒจ์ค์ ์ํ๋ฅผ ์
๋ฐ์ดํธ ํ๋ ์ ์ผํ ๋ฐฉ๋ฒ์ด๋ค. ์ด๋ฒคํธ ํธ๋ฆฌ๊ฑฐ๋ผ๊ณ ์๊ฐํ ์ ์๋ค.
6) ๊ตฌ๋
(Subscribe)
์คํ ์ด์ ๋ด์ฅ ํจ์ ์ค ํ๋์ธ ๊ตฌ๋
์ ๋ฆฌ์ค๋ ํจ์๋ฅผ ํ๋ผ๋ฏธํฐ๋ก ๋ฃ์ด ํธ์ถํ๋ฉด ์ํ๊ฐ ์
๋ฐ์ดํธ๋ ๋๋ง๋ค ํธ์ถ๋๋ค. ์ผ์ข
์ ์ด๋ฒคํธ ๋ฆฌ์ค๋๋ผ๊ณ ๋ณผ ์ ์๋ค.
const listener = () => {
console.log('์ํ๊ฐ ์
๋ฐ์ดํธ๋จ')
}
const unsubscribe = store.subsribe(listener)
unsubscribe()
7) ์
๋ ํฐ(Selector)
์ผ๋ฐ์ ์ธ vanilla.js์ ๋ฆฌ๋์ค์์๋ ์คํ ์ด์ ๋ด์ฅํจ์์ธ getState๋ฅผ ์ฌ์ฉํ์ง๋ง react-redux์์๋ ์ํ ๊ฐ์ ๊ฐ์ ธ์ฌ ๋ ์ฌ์ฉ๋๋ค.
redux ์ํ ๋ณํ์ ํ๋ฆ
- ์ด๊ธฐ ์ํ
- ๋จผ์ root reducer ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ๋ง๋ค์ด์ง ๋ฆฌ๋์ค ์คํ ์ด๊ฐ ์๋ค.
- ์คํ ์ด๋ root reducer๋ฅผ ํ ๋ฒ ํธ์ถํ๊ณ ๋ฆฌํด ๊ฐ์ ์ด๊ธฐ ์ํ๋ก ์ ์ฅํ๋ค.
- UI๊ฐ ์ฒ์ ๋ ๋๋ง๋ ๋, UI ์ปดํฌ๋ํธ๋ ๋ฆฌ๋์ค ์คํ ์ด์ ์ํ์ ์ ๊ทผํ์ฌ ๊ทธ๊ฒ์ ๋ ๋๋ง์ ํ์ฉํ๋ค. ๋ํ ๊ทธ๊ฒ๋ค์ ํ์ ์ํ์ ๋ณํ๊ฐ ์
๋ฐ์ดํธ ๋๋ ๊ฒ์ ๊ตฌ๋
ํ๋ค.
- ์
๋ฐ์ดํธ(์์)
1) ์ ์ ๊ฐ ๋ฒํผ์ ํด๋ฆญํ๋ค.
2) ์ฑ์ ์ ์ ์ ํ๋์ ๋ง๋ ๋์คํจ์น๋ฅผ ์คํํด ์ก์
์ ์ผ์ผํจ๋ค.
3) ์คํ ์ด๋ ์ด์ ์ํ์ ํ์ฌ ์ก์
์ผ๋ก ๋ฆฌ๋์ ํจ์๋ฅผ ์คํํ๊ณ , ๊ทธ ๋ฆฌํด ๊ฐ์ ์๋ก์ด ์ํ๋ก ์ ์ฅํ๋ค.
4) ์คํ ์ด๋ ์คํ ์ด๋ฅผ ๊ตฌ๋
ํ๊ณ ์๋ UI๋ค์๊ฒ ์
๋ฐ์ดํธ ๋์๋ค๊ณ ์๋ ค์ค๋ค.
5) ์คํ ์ด์ ๋ฐ์ดํฐ๊ฐ ํ์ํ ๊ฐ๊ฐ์ UI๋ค์ ํ์ํ ์ํ๊ฐ ์
๋ฐ์ดํธ ๋์๋์ง ํ์ธํ๋ค.
6) ๋ฐ์ดํฐ๊ฐ ๋ณ๊ฒฝ๋ ๊ฐ ๊ตฌ์ฑ์์๋ ์ ๋ฐ์ดํฐ๋ก ๊ฐ์ ๋ก ๋ค์ ๋ ๋๋งํ๋ฏ๋ก ํ๋ฉด์ ํ์๋๋ ๋ด์ฉ์ ์
๋ฐ์ดํธ ํ ์ ์๋ค.
Redux๋ ์ธ์ ์ฐ๋๊ฒ ์ข์๊น?
๐ ๋ฆฌ๋์ค ๊ณต์๋ฌธ์ ์ฐธ๊ณ
- ์ฑ์ ์ฌ๋ฌ ์์น์์ ํ์ํ ๋ง์ ์์ ์ํ๋ค์ด ์กด์ฌํ ๋ (์ ์ญ ์ํ๊ฐ ํ์ํ๋ค๊ณ ๋๊ปด์ง ๋)
- ์ํ๋ค์ด ์์ฃผ ์
๋ฐ์ดํธ ๋ ๋
- ์ํ๋ฅผ ์
๋ฐ์ดํธ ํ๋ ๋ก์ง์ด ๋ณต์กํ ๋
- ์ฑ์ด ์ค๊ฐ ๋๋ ํฐ ์ฌ์ด์ฆ์ ์ฝ๋๋ฅผ ๊ฐ๊ณ ์๊ณ ๋ง์ ์ฌ๋๋ค์ ์ํด ์ฝ๋๊ฐ ๊ด๋ฆฌ๋ ๋
- ์ํ๊ฐ ์
๋ฐ์ดํธ ๋๋ ์์ ์ ๊ด์ฐฐํ ํ์๊ฐ ์์ ๋
Redux์ ์ฅ๋จ์
์ฅ์
- ๋จ๋ฐฉํฅ ๋ชจ๋ธ๋ง(ํ๊ฐ์ง ๋ฐฉํฅ์ผ๋ก๋ง ๋ฐ๋๋ค). action์ dispatch ํ ๋๋ง๋ค ๊ธฐ๋ก(history)์ด ๋จ์ ์๋ฌ๋ฅผ ์ฐพ๊ธฐ ์ฝ๋ค. ํ์๋จธ์ ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์์.
- ์ํ์ ์ค์ํ : Store๋ผ๋ ์ด๋ฆ์ ์ ์ญ ์๋ฐ์คํฌ๋ฆฝํธ ๋ณ์๋ฅผ ํตํด ์ํ๋ฅผ ํ ๊ณณ์์ ๊ด๋ฆฌํ๊ธฐ ๋๋ฌธ์ ์ ์ญ ์ํ๋ฅผ ๊ด๋ฆฌํ ๋ ๊ต์ฅ์ด ํจ๊ณผ์ ์ด๋ค.
- Redux๋ ์ํ๋ฅผ ์ฝ๊ธฐ ์ ์ฉ์ผ๋ก ์ทจ๊ธํ๋ค. ์ํ๊ฐ ์ฝ๊ธฐ ์ ์ฉ์ด๋ฏ๋ก, ์ด์ ์ํ๋ก ๋์๊ฐ๊ธฐ ์ํด์๋ ๊ทธ์ ์ด์ ์ํ๋ฅผ ํ์ฌ ์ํ์ ๋ฎ์ด์ฐ๊ธฐ๋ง ํ๋ฉด ๋๋ค.
๋จ์
- ์์ฃผ ์์ ๊ธฐ๋ฅ์ด์ฌ๋ ๋ฆฌ๋์ค๋ก ๊ตฌํํ๋ ์๊ฐ ๋ช ๊ฐ์ ํ์ผ(์ก์
๋ฑ)๋ค์ ํ์๋ก ๋ง๋ค์ด์ผํ์ฌ ์ฝ๋๋์ด ๋์ด๋๋ค.
- ํ์๋จธ์ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ ค๋ฉด ๋ถ๋ณ์ฑ ๊ฐ๋
์ ์ง์ผ์ผ ์ฌ์ฉํ ์ ์์ผ๋ฏ๋ก ๋งค๋ฒ state๋ผ๋ ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ด์ค์ผ ํ๋ค.
- Redux๋ ์ํ๋ฅผ ์ฝ๊ธฐ ์ ์ฉ์ผ๋ก ์ทจ๊ธํ ๋ฟ, ์ค์ ์ฝ๊ธฐ ์ ์ฉ์ผ๋ก ๋ง๋ค์ด์ฃผ์ง๋ ์๋๋ค. ๋๋ฌธ์ ์ํ๋ฅผ ์ค์๋ก ์ง์ ๋ณ๊ฒฝํ์ง ์๋๋ก ํญ์ ์ฃผ์ํด์ผ ํ๋ค.
Reference
์ฐธ๊ณ : ๋ฆฌ๋์ค์ ์ฅ์ , ๋จ์