h e 1 1 o !
๐พ pre ์คํ์ค๋ฒํ๋ก์ฐ ํด๋ก / ์ ์ญ ์ํ๊ด๋ฆฌ๋ฅผ ์ ํ๋์ง ์๊ฒ ์ด์(์ํ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ, Recoil ๋์ ) ๋ณธ๋ฌธ
๐พ pre ์คํ์ค๋ฒํ๋ก์ฐ ํด๋ก / ์ ์ญ ์ํ๊ด๋ฆฌ๋ฅผ ์ ํ๋์ง ์๊ฒ ์ด์(์ํ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ, Recoil ๋์ )
hee.hee 2022. 8. 28. 00:32
๐ Piggy ํ๋ก์ ํธ์ '์ํ๊ด๋ฆฌ'
piggy ํ๋ก์ ํธ๋ฅผ ํ๋ฉฐ ์ํ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํ์์ฑ์ ์ ๊ฐํ๋ค.
์ฌ์ค piggy๋ ๊ทธ์ผ๋ง๋ก ๋ญ๋ผ๋ ํด๋ณด๋ ค๊ณ ์์ํ ํ๋ก์ ํธ๋ผ์, ์ต์ํ์ ์ปดํฌ๋ํธ(๋ฑ CRUD๋ง)๋ก ๊ตฌํํ๋ ค ํ๋ค.
๊ทธ๋์ props, state๋ง ์จ๋ ์ถฉ๋ถํ ์ค ์์๋ค.
ํ์ง๋ง... ํํ๋ก์ ํธ๊ฐ ๋๊ณ , ๋๋ฆ ์ ์ ์ด ์๊ธฐ๊ณ , ์ ์ ํ๋ก์ฐ๋ฅผ ์๊ฐํ๋ค๋ณด๋ ์๊ฐ๋ณด๋ค ์ปดํฌ๋ํธ๊ฐ ์์ฃผ ๋ง์ด ๋์ด๋ฌ๋ค.
๊ฒ๋ค๊ฐ ๋์ค์ ๋ก๊ทธ์ธ ๊ธฐ๋ฅ๋ ์ถ๊ฐํ๊ณ , ์ด๋ ๊ฒ ํ์ด์ง์ ๊ธฐ๋ฅ์ด ๋๋ค๋ณด๋ ๋ฐ์ดํฐ ์์ฒญ๋ ๋์ด๋ฌ๋ค.
์ด ๊ณผ์ ์์ ์ฐ๋ฆฐ props, state ์ง์ฅ์ ๊ฒฝํํ๋ค.
๐ก ์ํ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋์
์ฒ์ Pre ํ๋ก์ ํธ๋ฅผ ์์ํ ๋๋ ์ํ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ธ ์๊ฐ์ ์์๋ค.
ํ์ง๋ง ๋ก๊ทธ์ธ ๊ตฌํ๋ถํฐ ์ง๊ฐํ๋ค. ์ํ๋ฉด ํฐ์ผ ๋๊ฒ ๊ตฌ๋.
๊ทธ๋์ ์ํ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฐ๊ธฐ๋ก ํ๊ณ , Redux๋, Recoil์ด๋๋ฅผ ๋๊ณ ๊ณ ๋ฏผํ๋ค.
๐ Redux vs Recoil
Redux
React์ฒ๋ผ ๋จ๋ฐฉํฅ ๋ฐ์ดํฐ ํ๋ฆ ํจํด์ ๋ฐ๋ฅธ๋ค.
์ํ๊ฐ ์ธ์ ๋ ์์ธก ๊ฐ๋ฅํ๊ณ ๋ณํ๋ฅผ ์ถ์ ํ๊ธฐ ์ฌ์์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ํ ๋ณํ๋ฅผ ๊ด๋ฆฌํ๋ ๋ฐ์ ์ฉ์ดํ๋ค.
Redux์ ํต์ฌ ๊ฐ๋
- Store: ์ ํ๋ฆฌ์ผ์ด์
์ ์ํ๋ฅผ ๋จ์ผ ๊ฐ์ฒด๋ก ์ ์ฅํ๋ ์ ์ฅ์
์ํ๋ฅผ ๊ด๋ฆฌํ๊ณ ์ํ๊ฐ ๋ณ๊ฒฝ๋๋ฉด ์ด๋ฒคํธ๋ฅผ ๋ฐํํ์ฌ ๊ด๋ จ ์ปดํฌ๋ํธ๋ค์ด ์๋ก์ด ์ํ๋ฅผ ๋ฐ์ ์ ๋ฐ์ดํธํ ์ ์๋๋ก ํ๋ค. - Action: ์ ํ๋ฆฌ์ผ์ด์
์์ ๋ฐ์ํ๋ ์ด๋ ํ ์ด๋ฒคํธ๋ฅผ ๋ํ๋ด๋ ๊ฐ์ฒด
Action์ ์ผ๋ฐ์ ์ผ๋ก JavaScript ๊ฐ์ฒด์ด๋ฉฐ, ๋ฐ๋์ "type"์ด๋ผ๋ ํ๋๋ฅผ ํฌํจํด์ผ ํ๋ค. Action์ ์ํ๋ฅผ ๋ณ๊ฒฝํ๋ ์์ฒญ์ผ๋ก ์ฌ์ฉ๋๋ค. - Reducer: Action์ ๋ฐ๋ผ ์ํ๋ฅผ ๋ณ๊ฒฝํ๋ ํจ์
์ด์ ์ํ์ Action์ ๋ฐ์ ์๋ก์ด ์ํ๋ฅผ ๋ฐํํ๋ค. ์ด๋ Reducer๋ ๋ถ๋ณ์ฑ์ ์ ์งํ์ฌ ๊ธฐ์กด ์ํ๋ฅผ ์ง์ ์์ ํ์ง ์๋๋ค. - Dispatch: ์ก์ ์ ๋ฐ์์ํค๋ ๋ฉ์๋๋ก, ์ํ๋ฅผ ๋ณ๊ฒฝํ๊ธฐ ์ํด ์ก์ ์ Store์ ๋ณด๋ด๋ ์ญํ
- Subscribe: ์ํ ๋ณํ๋ฅผ ๊ฐ์งํ๊ณ , ์ํ๊ฐ ๋ณ๊ฒฝ๋ ๋๋ง๋ค ๋ฑ๋ก๋ ์ฝ๋ฐฑ ํจ์๋ฅผ ํธ์ถ
์ด๋ฅผ ํตํด UI ์ปดํฌ๋ํธ๊ฐ ์ํ ๋ณํ๋ฅผ ์ธ์งํ๊ณ ์๋ก์ด ์ํ๋ฅผ ๋ฐ์ํ ์ ์๋ค.
๋ฆฌ๋์ค์ ์๋ ๋ฐฉ์์ '์์ธก ๊ฐ๋ฅ'ํ๋ค.
๋จ์ผ ์ํ ํธ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ฏ๋ก ์ ํ๋ฆฌ์ผ์ด์ ์ ์ํ ๋ณํ๋ฅผ ์ถ์ ํ๊ธฐ ์ฉ์ดํ๋ฉฐ, ๋๋ฒ๊น ๊ณผ ํ ์คํธ์๋ ํธ๋ฆฌํ๋ค.
๋ฐ๋ผ์ ๋ณต์กํ ์ํ ๊ด๋ฆฌ๋ฅผ ํ์๋ก ํ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ํฉํจ.
Recoil
๋ฆฌ์ฝ์ผ(Recoil)์ Meta(๊ตฌ Facebook)์์ ๊ฐ๋ฐํ ์ํ ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก, React ์ ํ๋ฆฌ์ผ์ด์ ์ ์ํ๋ฅผ ๊ด๋ฆฌํ๋๋ฐ ์ฌ์ฉ๋๋ค. ๋ฆฌ๋์ค์ ๋น์ทํ ์ญํ ์ ์ํํ์ง๋ง, ๋ฆฌ๋์ค๋ณด๋ค ๋ ๊ฐํธํ๊ณ ์ง๊ด์ ์ธ API๋ฅผ ์ ๊ณตํ๋ค.
- ์ํ(Atom): ์ํ๋ "Atom"์ด๋ผ๊ณ ๋ถ๋ฆฌ๋ ๋จ์๋ก ๊ด๋ฆฌ๋จ
Atom์ ์ฝ๊ธฐ ๋ฐ ์ฐ๊ธฐ๊ฐ ๊ฐ๋ฅํ ์ํ๋ฅผ ๋ํ๋ด๋ ๊ฒ์ผ๋ก, React ์ปดํฌ๋ํธ์์ ์ฌ์ฉ๋๋ ๋ฐ์ดํฐ์ ๋๋ค. Atom์ ์ผ๋ฐ์ ์ผ๋ก JavaScript ๋ณ์์ ์ ์ฌํ๋ฉฐ, atom ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ์์ฑํ๋ค. - ์ ํ์(Selector): ์ ํ์๋ ํ๋ ์ด์์ Atom์์ ํ์๋ ๊ฐ์ ๋ฐํํ๋ ํจ์
์ด๋ฅผ ํตํด ์ฌ๋ฌ ์ํ๋ฅผ ์กฐํฉํ๊ฑฐ๋ ๋ณํํ์ฌ ์๋ก์ด ๊ฐ์ผ๋ก ๋ง๋ค ์ ์๋ค. - RecoilRoot: Recoil๋ก ๊ด๋ฆฌ๋๋ ์ํ๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด ์ปดํฌ๋ํธ์ ๊ณ์ธต ๊ตฌ์กฐ ์ต์์์์ ์ฌ์ฉ
์ด๋ฅผ ํตํด ๋ชจ๋ ์์ ์ปดํฌ๋ํธ์์ ์ํ์ ์ ๊ทผํ ์ ์๋ค. - useRecoilState: Atom์ ๊ฐ์ ์ฝ๊ณ ์ฐ๋ ๋ฐ ์ฌ์ฉ
- useRecoilValue: Atom์ ๊ฐ์ ์ฝ๋ ๋ฐ ์ฌ์ฉ
- ์ํ ๊ฐฑ์ : Recoil์ React์ ๊ฐ์ ๋(Virtual DOM)๊ณผ ์กฐํฉํ์ฌ ์ํ ๋ณ๊ฒฝ์ ํจ์จ์ ์ผ๋ก ์ฒ๋ฆฌํจ
์ํ๊ฐ ๊ฐฑ์ ๋๋ฉด ํด๋น ์ํ๋ฅผ ์ฌ์ฉํ๋ ์ปดํฌ๋ํธ๋ค์ด ์๋์ผ๋ก ์ ๋ฐ์ดํธ๋๋ค.
๋ฆฌ์ฝ์ผ์ ๊ฐ๋จํ๊ณ ์ง๊ด์ ์ธ ์ํ ๊ด๋ฆฌ๋ฅผ ์ ๊ณตํ๋ฏ๋ก, Redux์ฒ๋ผ ๋ณต์กํ ์ค์ ์์ด๋ ์ฝ๊ฒ ์ํ ๊ด๋ฆฌ๋ฅผ ํ ์ ์๋ค.
๋ฆฌ๋์ค๋ณด๋ค ๊ฐ๋จํ API์ ์ง๊ด์ ์ธ ๋์์ธ์ผ๋ก ๋น ๋ฅธ ๊ฐ๋ฐ๊ณผ ์ ์ง๋ณด์๋ฅผ ์ง์ํ๋ค.
๐ง๐ป Recoil์ ์ฌ์ฉํ๊ธฐ๋ก ํ๋ค
๋์ ํ์์ ์ด์ ์ Redux๋ฅผ ์ฌ์ฉํด๋ณธ ์ ์ด ์๋ค.
'๋จ๋ฐฉํฅ ํ๋ฆ' ์ปจ์ ์ด์ด์ ๋ฆฌ์กํธ์์์ ๋ฐ์ดํฐ ํ๋ฆ์ ๋ํด ๋ ์์ธํ ์ ์ ์์๋ค.
ํ์ง๋ง ๋ณด์ผ๋ฌํ๋ ์ดํธ๋ฅผ ์ค์ ํ๋ ๋ฐ์ ์๊ฐ์ด ๋ง์ด ๋ค์๋ ๊ธฐ์ต์ด ์๋ค.
๋ฐ๋ฉด, ์กฐ์ฌ ๊ฒฐ๊ณผ Recoil์ Redux์ ๋นํด ํจ์ฌ ์ง๊ด์ ์ด๊ณ ์ค์ ๋ ๊ฐํธํ๋ค๊ณ ํ๋ค.
Redux๋ ์ฌ์ฉํด ๋ณด์๊ณ , ์ฅ์ ๊ณผ ๋จ์ ์ ๋ํด ํ์ ํ์ผ๋ ์ด๋ฒ์๋ Recoil์ ์ฌ์ฉํ๊ธฐ๋ก ํ๋ค.
๐ก Recoil์ ์ ๋ง ๊ฐํธํด
Recoil์ ์ฌ์ฉํ๊ธฐ ์ํด ๊ฐ๋จํ๊ฒ ๊ณต๋ถํ๊ณ , ๊ณต๋ถํ๋ ๊ณผ์ ์์ ์์ฑํ ๋ฌธ์๋ฅผ ํ์๊ณผ ๊ณต์ ํ๋ค.
์ฃผ์ ํจ์๋ง ์ ๋ฆฌํด๋ ๋ฌธ์์๋๋ฐ, ๊ทธ๊ฒ๋ง ์์ด๋ ์ฌ์ฉํ๋ ๋ฐ ์ด๋ ค์์ด ์์ ์ ๋๋ก ๊ฐํธํ๋ค.
๊ณต๋ถํ๋ ๋ฐ 20๋ถ ์ ๋ ๊ฑธ๋ ธ๊ณ ํ์๊ณผ ํ๋ฉด ๊ณต์ ํ๋ฉฐ ํจ๊ป ์ฐ์ตํ๊ณ ๋ฐ๋ก ์ฌ์ฉํ๋ค.
์ฌ์ฉํ ๋ค ๋๋ ์ ์, '์ ์ญ ์ํ๋ฅผ React Hook useState๋ก ๊ด๋ฆฌํ๋ ๊ฒ ๊ฐ์' ๋๋์ด๋ค.
React Hook๋ง ์จ๋ดค๋ค๋ฉด ์๋ฌด ๋ฌด๋ฆฌ ์์ด ๋ฐ๋ก ์ฌ์ฉํ ์ ์๋ค.
ํจ์๋ ์ฌ๋ฌ๊ฐ์ง๋ผ์ ํ์ ์ปดํฌ๋ํธ์์ ์ ์ญ์ผ๋ก ์ํ๋ฅผ set, get ํ์ํ ๋๋ก ์ฌ์ฉ ํ ์ ์๋ค.
์ํ ์ด๊ธฐํ, ์ญ์ ๋ ๊ฐ๋ฅํ๋ค.
๐ฌ ๋๋์ : ์ ์ญ์ํ ๊ด๋ฆฌ๋ฅผ ์ ํ๋์ง ์๊ฒ ์ด์
์ฌ์ค props ์ง์ฅ์ ๋ง๋ดค๋ Piggy ํ๋ก์ ํธ๋ ์๋ฒฝํ๊ฒ ์ค๊ณ ํ๋ค๋ฉด ์ง์ฅ๊น์ง ์๋๊ณ ์ผ๋์ฒ์ ๋ฐ๋ด๊ทธ๊ธฐ.. ์ ๋์๊ณ ,
์ง๊ธ๊น์ง ๋ง๋ ๊ฒ๋ค์ด ๋๋ถ๋ถ useState, props ์ ์์ ํด๊ฒฐ๋๋ ํ๋ก์ ํธ๋ค์ด์๋ค.
๊ทธ๋์ ์ํ๊ด๋ฆฌ์ ํ์์ฑ์ ๊ทธ๋ ๊ฒ ํฌ๊ฒ ๋๋ผ์ง ๋ชปํ๊ณ , ๋ฆฌ๋์ค๋ฅผ ๋ฐฐ์ธ ๋๋ ์ด ๋ณต์กํ ๊ฒ ์ ํ์ํ๊ฐ ์๊ฐํ์๋ค.
ํ์ง๋ง, ๋ฆฌ์ฝ์ผ์ ์ฐ๊ณ ๋ณด๋ ์ ์ญ์์ ์ํ๋ฅผ ๊ด๋ฆฌํ๋ค๋ ๊ฒ ์ผ๋ง๋ ๊ฐํธํ๊ณ , ํจ์จ์ ์ด๊ณ , ์ ๋ขฐ๊ฐ ๋๋์ง ์๊ฒ๋๋ค!!!
๋ฆฌ์ฝ์ผ ๋๋ฌด ์ข์~
'p r o j e c t' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๐พ pre ์คํ์ค๋ฒํ๋ก์ฐ ํด๋ก / ๊ฒ์ ๊ธฐ๋ฅ (0) | 2022.09.04 |
---|---|
๐ Piggy / ํ๋ก์ ํธ๋ก ์ป์ ๊ฒ๋ค (0) | 2022.08.28 |
๐พ pre ์คํ์ค๋ฒํ๋ก์ฐ ํด๋ก / JWT, ์ด๋์ ์ ์ฅํ ๊น?(feat. Axios interceptor) (0) | 2022.08.28 |
๊นํ ์ด์, ๋ง์ผ์คํค, ๊นํ๋ก์ฐ (0) | 2022.08.22 |
๐ ํ๋ณต์ ๊ธํต Happy Piggy / ์งํ ๊ณผ์ (0) | 2022.08.19 |