๋ญ์ก๋๋ฐ ์์ก๋ ์นผ ์ฐ์ง๋ง์
์์ฝ ๐ก
- Context ์ Redux ๋ ๊ฐ์ ์ผ์ ํ๋
๋์ ๋ค๋ฅธ ๋๊ตฌ์ด๋ฉฐ, ๋ค๋ฅธ ๋ชฉ์ ์ ๊ฐ์ง๊ณ ์๋ค. - Context ๋ ์ํ๊ด๋ฆฌ ๋๊ตฌ์ธ๊ฐ ?
์๋๋ค. Context API ๋ ๋จ์ง ์ข ์์ฑ ์ฃผ์ ์ ํ ํํ์ผ๋ฟ ์๋ฌด๊ฒ๋ ๊ด๋ฆฌํ์ง ์๋๋ค. ์ํ๊ด๋ฆฌ๋ ์ผ๋ฐ์ ์ผ๋กuseState
์useReducer
๋ฅผ ํตํด ์ผ์ด๋๋ค. - useReducer ๋ Redux ์ ๋์ฒดํ์ธ๊ฐ ?
๊ทธ๋ ์ง ์๋ค. ์ ์ฌํ ๋ถ๋ถ๋ค์ด ์์ง๋ง ๊ธฐ๋ฅ์๋ ํฐ ์ฐจ์ด๊ฐ ์กด์ฌํ๋ค. - ์ธ์ Context ๋ฅผ ์ฌ์ฉํด์ผํ๋
props drilling ์ ํผํ๊ณ ์ ํ ๋ - ์ธ์ Context ์ useReducer ๋ฅผ ์ฌ์ฉํด์ผ ํ๋
ํน์ ์ปดํฌ๋ํธ์์ ์ด๋์ ๋ ๋ณต์กํ ์ํ ๊ด๋ฆฌ๊ฐ ํ์ํ๊ฒฝ์ฐ - Redux ๋ ์ธ์ ์ฌ์ฉํด์ผํ๋
- ์ฌ๋ฌ ์์น์ ๋ง์ ์์ ์ํ ๊ฐ์ด ์กด์ฌ ํ ๋
- ์ ๋ฐ์ดํธ ๋ก์ง์ด ๋ณต์ก ํ ๋
- ๊ฑฐ๋ํ ์ฝ๋ ๋ฒ ์ด์ค๋ฅผ ์ฌ๋ฌ ์ฌ๋์ด ์์ ํ ๋
- ์ํ ๋ณ๊ฒฝ ์๊ฐํ๊ฐ ํ์ ํ ๋
- ์ฌ์ด๋์ดํํธ, ๋ฉ๋ชจ์ด์ ์ด์ , ๋ฐ์ดํฐ ์ง๋ ฌํ๋ฑ ๊ด๋ฆฌ๋ฅผ ์ํด ๋ ๊ฐ๋ ฅํ ๊ธฐ๋ฅ์ด ํ์ ํ ๋
React Context ๋ ๋ฌด์์ธ๊ฐ ?
์ผ๋ฐ์ ์ธ React ์์ Prop ์ ๋ฌ์ ํ๋ฆ์ ํํฅ์์ด๋ค. (๋ถ๋ชจ์์ ์์์ผ๋ก)
์ ๋ฌ๋๋ prop ์ด ๋ง์์ง๊ณ ์ปดํฌ๋ํธ ๊น์ด๊ฐ ๊น์ด์ง๋ฉด ๊ด๋ฆฌ๊ฐ ๋ฒ๊ฑฐ๋ก์ ์ง ์ ์๋ค. Context Tree
๋ ์ปจํ
์คํธ ์์ ํฌํจ๋ ๋ชจ๋ ๋ ๋ฒจ์์ ๋ช
์์ ์ผ๋ก prop ์ ์ ๋ฌํ์ง ์๊ณ , ์ด๋์๋ ์ํ๊ฐ์ ์ ๊ทผ ํ ์ ์๋ ๋ฐฉ๋ฒ์ ์ ๊ณตํ๋ค.
๋ชฉ์ ๋ฐ ์ฌ๋ก
Context ๋ ์ค์ ๋ก ์๋ฌด๊ฒ๋ ๊ด๋ฆฌํ์ง ์๋๋ค. ๋จ์ ๊ฐ์ ์ ๋ฌํ๋ ํ์ดํ์ ๊ฐ๋ค. ์ฌ์ฉํ๋ ์ฃผ์ ๋ชฉ์ ์ prop-drilling
์ ํผํ๋ ๊ฒ์ด๋ค.
prop-passing ๋ก์ง์ ์์ฑํ ํ์๊ฐ ์๊ธฐ ๋๋ฌธ์ ์ฝ๋๊ฐ ๋จ์ํด์ง๋ค.
๊ฐ๋ ์ ์ผ๋ก๋ ์ข ์์ฑ ์ฃผ์ ์ ํ ํํ์ด๋ค. ์์ ๊ตฌ์ฑ ์์์ ํน์ ํ ์ํ๊ฐ์ด ํ์ํ๋ค๋ ๊ฒ์ ์๊ณ ์์ง๋ง ๊ฐ ์์ฒด๋ฅผ ์์ฑํ๊ฑฐ๋ ์ค์ ํ๋ ค ํ์ง ์๋๋ค. ๋์ ์์ ์์๊ฐ ๋ฐํ์์ ํด๋น ๊ฐ์ ์ ๋ฌํ๋ค๊ณ ๊ฐ์ ํ๋ค.
Redux ๋ ๋ฌด์์ธ๊ฐ ?
์ ํ๋ฆฌ์ผ์ด์ ์ ์ฒด์ ๋ํ ์ํ ์ค์ ์ ์ฅ์ ์ญํ ์ ํ๋ฉฐ ์ก์ ์ด๋ผ๋ ์ด๋ฒคํธ๋ฅผ ์ฌ์ฉํ์ฌ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ํ๋ฅผ ์์ธก ๊ฐ๋ฅํ ๋ฐฉ์์ผ๋ก ์ ๋ฐ์ดํธ ํ๊ธฐ ์ํ ํจํด ๋๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๋ค.
Redux ์์ ์ ๊ณตํ๋ ํจํด๊ณผ ๋๊ตฌ๋ค์ ์ฌ์ฉํ๋ฉด ์ํ๊ฐ ์ธ์ , ์ด๋์, ์ด๋ป๊ฒ, ์ ์ ๋ฐ์ดํธ ๋์๋์ง ์ฝ๊ฒ ์ดํด ํ ์ ์๋ค
- ์ํ ๊ด๋ฆฌ
- Redux ์ ๋ชฉ์ ์ ์๊ฐ์ด ์ง๋จ์ ๋ฐ๋ผ ์ํ ๊ฐ๋ค์ด ์ด๋ป๊ฒ ๋ณํ๋์ง ์ฝ๊ฒ ์ดํด ํ ์ ์๋๋ก ๋๋ ๊ฒ์ด๋ค.
reducer ํจ์๋ฅผ ์ด์ฉํ์ฌ ์ํ ๋ณ๊ฒฝ์ ์์ธก ๊ฐ๋ฅํ๊ฒ ๋ง๋ค๊ณ , ์ฌ์ด๋์ดํํธ ๋ฐ ์ ์ฅ์ ํ์ฅ ๊ฐ๋ ์ผ๋ก ๋ฏธ๋ค์จ์ด๋ฅผ ์ฌ์ฉํ๋ค. ๋ํ Redux Devtools ๋ฅผ ์ด์ฉํ์ฌ ์ฑ์ ์์ ๊ธฐ๋ก ๋ฐ ์ํ ํ์ธ ํ ์ ์๋ค.
Redux ์ React
Redux ์์ฒด๋ ui ์ ๊ตฌ์ ๋ฐ์ง ์๋๋ค. React, Vue, vanilla JS ๋ฑ๊ณผ ํจ๊ป ์ฌ์ฉ ๊ฐ๋ฅํ๋ค.
React ์์ Redux ๋ฅผ ์ฌ์ฉํ ๋ ์ฌ์ฉ๋๋ React-Redux ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ Redux ์์ ์ํ ๊ฐ์ ์ฝ๊ณ action ์ React ์ปดํฌ๋ํธ์๊ฒ ์ ๋ฌํ์ฌ Redux ์ ์ฅ์์ ์ํธ ์์ฉ ํ ์ ์๋๋ก ๋์์ฃผ๋ UI ๋ฐ์ธ๋ฉ ๋ ์ด์ด์ด๋ค.
React-Redux ๋ฅผ ์ฌ์ฉํ๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ชจ๋ React ์์๋ค์ด Redux ์ ์ฅ์์ ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ฐ ์ด๋ React-Redux ๋ด๋ถ์์ Context ๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ด๋ค. ์ฌ๊ธฐ์ ์ฃผ์ํ ์ ์ React-Redux ๋ ํ์ฌ์ ์ํ๊ฐ์ด ์๋ Context ๋ฅผ ํตํด Redux ์ ์ฅ์ ์ธ์คํด์ค๋ง ์ ๋ฌํ๋ค๋์ ์ด๋ค.
Redux ์ ์ฅ์๋ React-Redux ์์๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐํ์์ Context Tree ์ ์ฝ์ ๋๋ค.
(React-) Redux ์ ๋ชฉ์ ๋ฐ ์ฌ๋ก
- ui ๋ ์ด์ด์ ๋ถ๋ฆฌ๋ ์ํ ๊ด๋ฆฌ ๋ก์ง ์์ฑ์ด ํ์ํ ๋
- ์๋ก ๋ค๋ฅธ ui ๊ณ์ธต๊ฐ์ ์ํ ๊ณต์ ๊ฐ ํ์ํ ๋
- Redux ๋ฏธ๋ค์จ์ด ๊ธฐ๋ฅ์ ๋น๋ ค ์ก์ ์ด ์ ๋ฌ ๋ ๋ ์ถ๊ฐ์ ์ธ ๋ก์ง์ด ํ์ํ ๋
- Redux ์ํ์ ์ ์ง
- dev tool ์ ์ด์ฉํ ๋ฒ๊ทธ ๋๋ฒ๊น
Context๊ฐ โ์ํ๊ด๋ฆฌโ๊ฐ ์๋ ์ด์
์ํ๊ด๋ฆฌ๋ ์๊ฐ์ด ์ง๋จ์ ๋ฐ๋ผ ์ํ๊ฐ ๋ณ๊ฒฝ๋๋ ๋ฐฉ์์ ์๋ฏธํ๋ค.
์๋์ ๊ฐ์ ๊ฒฝ์ฐ๋ฅผ ์ํ๊ด๋ฆฌ๋ผ ํ๋ค.
- ์ด๊ธฐ ๊ฐ์ ์ ์ฅํ๋ค.
- ํ์ฌ ๊ฐ์ ์ฝ์ ์ ์๋ค.
- ๊ฐ ์ ๋ฐ์ดํธ๊ฐ ๊ฐ๋ฅํ๋ค.
React useState
์ useReducer
๊ฐ ์ํ ๊ด๋ฆฌ์ ์ข์ ์์ด๋ค.
- hook ์ ํธ์ถํ์ฌ ์ด๊ธฐ ๊ฐ ์ ์ฅ
- hook ์ ํธ์ถํ์ฌ ํ์ฌ ๊ฐ์ ์ฝ๋๋ค
- ์ ๊ณต๋ setState, dispatch ํจ์๋ฅผ ํธ์ถํ์ฌ ๊ฐ์ ์ ๋ฐ์ดํธํ๋ค.
- ๊ตฌ์ฑ ์์๊ฐ re-render ๋์๊ธฐ ๋๋ฌธ์ ๊ฐ์ด ์ ๋ฐ์ดํธ ๋์์ ํ์ธ ํ ์ ์๋ค.
- ๋ง์ฐฌ๊ฐ์ง๋ก Redux, Mobx ๋ ์์ ์กฐ๊ฑด๋ค์ ์ถฉ์กฑํ๊ธฐ ๋๋ฌธ์ ์ํ๊ด๋ฆฌ๋ผ ํ ์ ์๋ค.
- React-Query, SWR, Apollo ๋ฐ Urql ๊ณผ ๊ฐ์ ์๋ฒ ์บ์ฑ ๋๊ตฌ๋ค์ ๊ฐ์ ธ์จ ๋ฐ์ดํฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ด๊ธฐ ๊ฐ์ ์ค์ ํ๊ณ hook ๋ค์ ํตํด ํ์ฌ ๊ฐ์ ๋ฐํํ๋ฉฐ โ์๋ฒ ๋ณํ' ๋ฅผ ํ์ธํ์ฌ ๊ตฌ์ฑ์์๋ฅผ ๋ค์ ๋ ๋๋งํ๊ธฐ ๋๋ฌธ์ โ์ํ๊ด๋ฆฌ' ๋ผ๊ณ ์ ์ ํ ์ ์๋ค.
React Context ์ ๊ฒฝ์ฐ ์์ ์กฐ๊ฑด์ ์ถฉ์กฑํ์ง ์๊ธฐ ๋๋ฌธ์ ์ํ๊ด๋ฆฌ ๋๊ตฌ๋ผ๊ณ ํ ์ ์๋ค. Context ๋ ์ ๋ฌ๋๋ ๊ฐ์ ๊ฒฐ์ ํ๋ ์ญํ ์ ํ๊ณ ์ผ๋ฐ์ ์ผ๋ก ์ค์ ์ํ๊ด๋ฆฌ๋ useState/useReducer hook ๊ณผ ํจ๊ป ๋ฐ์ํ๋ค.
> ์ ๋ฆฌํ๋ฉด ๋ค์๊ณผ ๊ฐ๋ค. Context ๋ ์ํ(์ด๋ฏธ ์กด์ฌํ๋, ์ด๋๊ฐ์ ์๋)๊ฐ Context Tree ๋ด๋ถ์ ํฌํจ๋ ๋ค๋ฅธ ์ปดํฌ๋ํธ๋ค๊ณผ ๊ณต์ ๋๋ ๋ฐฉ์์ด๋ค.
Context ์ useReducer
useReducer ๋ Redux + React-Redux ์ ๋น์ทํ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๊ณ ์๋ค.
- ๊ฐ์ ์ ์ฅ
- reducer ํจ์
- action ์ ๋ฌ
- ๊ฐ์ ์ ๋ฌํ๊ณ ์ปดํฌ๋ํธ์์ ์ฝ๋ ๋ฐฉ๋ฒ
๊ทธ๋ฌ๋ ๊ธฐ๋ฅ๊ณผ ๋์์๋ ๋ง์ ์ฐจ์ด์ ์ด ์กด์ฌํ๋ค.
- Context + useReder ๋ Context ๋ฅผ ํตํด ํ์ฌ ์ํ ๊ฐ์ ์ ๋ฌํ๋๋ฐ ์์กดํ๋ค. React-Redux ๋ Context ๋ฅผ ํตํด ํ์ฌ Redux ์คํ ์ด ์ธ์คํด์ค๋ฅผ ์ ๋ฌํ๋ค.
- useReducer ์ ๊ฒฝ์ฐ ์๋ก์ด ์ํ ๊ฐ์ ์์ฑ ํ ๋ ํด๋น Context ๋ด๋ถ์ ํฌํจ๋ ์ปดํฌ๋ํธ๋ค์ด ์ํ๊ฐ์ ์ผ๋ถ์๋ง ๊ด์ฌ์ด ์๋๋ผ๋ ๊ฐ์ ๋ก re-render ๋๊ธฐ ๋๋ฌธ์ ์ฑ๋ฅ ๋ฌธ์ ๊ฐ ๋ฐ์ ํ ์ ์๋ค. React-Redux ๋ฅผ ์ฌ์ฉํ๋ฉด ์ ์ฅ์ ์ํ์ ํน์ ๋ถ๋ถ๋ง ์ฌ์ฉํ๊ณ ํด๋น ๊ฐ์ด ๋ณ๊ฒฝ ๋ ๋๋ง re-render ํ ์ ์๋ค.
- Context + useReducer ๋ React ์ ๊ธฐ๋ฅ์ด๊ธฐ ๋๋ฌธ์ React ์ธ๋ถ์์๋ ์ฌ์ฉ์ด ๋ถ๊ฐํ๋ค. Redux ๋ UI ๋ ๋ฆฝ์ ์ด๊ธฐ ๋๋ฌธ์ React ์ ๋ณ๋๋ก ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค.
- React DevTools ๋ฅผ ์ฌ์ฉํ๋ฉด ํ์ฌ์ ์ํ ๊ฐ์ ๋ณผ ์ ์์ง๋ง ์ ๋ฌ๋ action, ๊ณผ payload, ์ฒ๋ฆฌ ๋ ํ์ ์ํ๋ฑ ์๊ฐ์ ๋ฐ๋ฅธ ๋ณํ๋ฅผ ๋ณผ ์ ์๋ค. Redux Devtools ์ ์ด์ฉํ๋ฉด ์๊ฐ์ ๋ฐ๋ฅธ ์ํ ์ฐจ์ด๋ฅผ ๋ณผ ์ ์๋ค.
- useReducer ๋ ๋ฏธ๋ค์จ์ด๊ฐ ์๋ค.
> Context API + useReducer ๋ ๋ฎ์ ๊ท๋ชจ์ ๋น๋์ ์ ๋ฐ์ดํธ์ ๊ฐ์ ์ ์ ์ธ ์ํ์ ์ ๋ฌ์๋ ๊ด์ฐฎ์ง๋ง, Flux ์ ์ ์ฌํ ์ํ ์ ํ์ ๋์ฒด๋ฌผ๋ก๋ ๋ถ์กฑํ๋ค.
๋ถํ์ํ re-render ๋ฅผ ์ค์ด๊ณ ๋ฌธ์ ์ ๋ฒ์๋ฅผ ์ง์ ํ๊ธฐ ์ํด ๊ฐ๋ณ ์ปจํ ์คํธ๋ฅผ ์ค์ ํ๊ณ React.memo, useMemo ๋ฑ์ ์ด์ฉํ์ฌ ์ฝ๋๋ฅผ ์์ฑํ๊ธธ ๊ถ์ฅํ์ง๋ง, React-Redux ๋ฅผ ์ฌ์ฐฝ์กฐํ๋ ํ์์ ๊ฐ๋ค.
๊ถ์ฅ์ฌํญ
ํด๊ฒฐํ๋ ค๋ ๋ฌธ์ ์ ๊ฐ์ฅ ์ ํฉํ ๋๊ตฌ๋ฅผ ์ ํํด๋ผ
- ๋จ์ prop-drilling ์ ํผํ๋ ๊ฒ์ด ๋ชฉ์ ์ด๋ผ๋ฉด Context ๋ฅผ ์ฌ์ฉํด๋ผ
- ์ ๋นํ ๋ณต์กํ ์ปดํฌ๋ํธ๊ฐ ์๊ฑฐ๋ ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๊ณ ์ถ์ง ์๋ค๋ฉด Context + useReducer ๋ฅผ ์ฌ์ฉํด๋ผ
- ํน์ ๊ตฌ์ฑ ์์๋ง re-render ์ํค๊ฑฐ๋, ์ฌ์ด๋์ดํํธ๋ฅผ ์ค์ด๊ธฐ ์ํด ๋ ๊ฐ๋ ฅํ ๊ธฐ๋ฅ์ด ํ์ํ๋ค๋ฉด Redux + React-Redux ๋ฅผ ์ฌ์ฉํด๋ผ