SSAFY(์ผ์ฑ ์ฒญ๋ ์์นด๋ฐ๋ฏธ) React ํน๊ฐ ํ์ต ์ผ์
| ์ผ์ | ํ์ต ์ฃผ์ |
|---|---|
| 2022. 8. 8 (์) | React ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์๊ฐ |
| ์น ๋ธ๋ผ์ฐ์ ํ๊ฒฝ์์ React ์์ํ๊ธฐ | |
| 2022. 8. 9 (ํ) | React ๊ฐ๋ฐ ํ๊ฒฝ ๋งค๋ด์ผ ๊ตฌ์ฑ |
| ํด์ฒด์ธ์ผ๋ก React ํ๋ก์ ํธ ์ค์บํด๋ฉ | |
| 2022. 8. 10 (์) | React ํ (Hooks) API / Props ํ์ ๊ฒ์ฌ |
| React ์ปจํ ์คํธ(Context) API / ํ ๋ง, ์ธ์ฆ ๊ด๋ฆฌ | |
| 2022. 8. 17 (์) | ํด๋ผ์ด์ธํธ ์ฌ์ด๋ ๋ผ์ฐํ ๊ตฌ์ฑ |
| ๊ฒ์์์ง ์ต์ ํ (SEO) / ๋ณดํธ๋ ๋ผ์ฐํธ (์ธ์ฆ) | |
| 2022. 8. 19 (๊ธ) | Redux ์ํคํ ์ฒ |
| React ์ฑ์ Redux ํตํฉ | |
| 2022. 8. 26 (๊ธ) | RTK ์๊ฐ ๋ฐ ์ฌ์ฉ๋ฒ |
| RTK Query ํ์ฉ | |
| 2022. 8. 30 (ํ) | ํ ์ด ํ๋ก์ ํธ |
| ํ๋ก์ ํธ ๋ฐฐํฌ (CI / CD) |
๋ค์์ ํน์ axios ๋ฐฉ๋ฒ๋ ๋ค๋ค์ฃผ์๋์?
useCallback์ ์ญํ ์ด ํจ์์ ๋ฉ๋ชจ์ด์ ์ด์ ์ด๋ผ๋ฉด useCallback์ ์ปดํฌ๋ํธ๊ฐ ๋ฆฌ๋ ๋๋ง๋ ๋ ํจ์๋ฅผ ์ฌ"์ ์"ํ๋ cost๋ฅผ ์ค์ฌ์ฃผ๋ ๊ฒ์ธ๊ฐ์?
๋ต๋ณ 2-1
๋ค. ๋ง์ํ์ ๋๋ก ํจ์๊ฐ ์ฌ ์ ์ ๋๋ ๋น์ฉ์ ์ค์ฌ์ฃผ๋ฏ๋ก ๋ฉ๋ชจ๋ฆฌ ๋์๋ฅผ ๋ฐฉ์งํ ์ ์๊ณ , ๋์๊ฐ ๋ถํ์ํ๊ฒ ๋ค์ ๋ ๋๋ง ๋๋ ์ปดํฌ๋ํธ๋ก ์ธํด ์ฑ๋ฅ์ด ์ ํ๋๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์ต๋๋ค.
dependency๊ฐ ๋ฐ๋์๋์ง ํ๋จํ๋ ์๊ฐ๋ ํ์ํ ๊ฒ ๊ฐ์๋ฐ ์ด ์๊ฐ์ด ํจ์๋ฅผ ์ ์ํ๋ ์๊ฐ๋ณด๋ค ์งง์์ useCallback์ ์ฌ์ฉํ๋ ๊ฒ์ผ๊น์?
๋ต๋ณ 2-2
๋ค. ๋ง์ํ์ ๋๋ก ํจ์๊ฐ ์ฌ ์ ์ ๋๋ ๋น์ฉ์ ์ค์ฌ์ฃผ๋ฏ๋ก ๋ฉ๋ชจ๋ฆฌ ๋์๋ฅผ ๋ฐฉ์งํ ์ ์๊ณ , ๋์๊ฐ ๋ถํ์ํ๊ฒ ๋ค์ ๋ ๋๋ง ๋๋ ์ปดํฌ๋ํธ๋ก ์ธํด ์ฑ๋ฅ์ด ์ ํ๋๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์ต๋๋ค.
๋ฆฌ์ํธ ์ฝ๋๋ฅผ ์ฐพ์๋ณด๋ค๋ณด๋ฉด ํญ์ useCallback, useMemo์ ์ฌ์ฉํ๋ ๊ฒ์ ์๋๋๋ฐ ๊ฐ์ฌ๋์ ์ด๋ค ๊ธฐ์ค์ผ๋ก ์ฌ์ฉ ์ ๋ฌด๋ฅผ ๊ฒฐ์ ํ์๋์ง ๊ถ๊ธํฉ๋๋ค.
๋ต๋ณ 2-3
ํ์ ์ปดํฌ๋ํธ(์: <Button>)์ 'ํจ์' ํ์
์ prop์ผ๋ก ์ ๋ฌํด์ผ ํ ๋ useCallback ํ
์ ์ฌ์ฉํ๋๋ฐ ๋ฐํด, ํ์ค HTML ์์(์: <button>)๋ฅผ ์ฌ์ฉํ ๋๋ useCallback ํ
์ ์ฌ์ฉํ์ง ์๋ ๊ฒ์ด ๊ถ์ฅ๋ฉ๋๋ค. 2-2๋ฒ ์ง๋ฌธ์ ๋ํ ๋ต๋ณ์์ ๋ง์๋๋ฆฐ ๊ฒ์ด ์ฐ๋ ค๋๋ ์ํฉ์ธ๋ฐ HTML ํ์ค ์์๋ ๊ทธ๋ฌํ ๋ฌธ์ ๊ฐ ์์ผ๋ฏ๋ก useCallback ํ
์์ด ์ฌ์ฉํ๋ ๊ฒ์ด ๋ ๋ซ์ต๋๋ค. (์์ฝ: ์ปดํฌ๋ํธ์ ํจ์ ํ์
์ ์ ๋ฌํ ๊ฒฝ์ฐ ํ
์ฌ์ฉ / HTML ํ์ค ์์์๋ ์ฌ์ฉ ์ ํจ)
ํด๋์คํ ์ปดํฌ๋ํธ์์๋ this๊ฐ ๋ง์ด ๋ณด์ด๋ ๊ฑฐ ๊ฐ์๋ฐ ํจ์ํ ์ปดํฌ๋ํธ๋ก ํ๋ฆ์ด ๋ฐ๋๋ฉด์ ์๋์ ์ผ๋ก ์ค์ํด์ง JS ๋ฌธ๋ฒ์ด ์๋์?
๋ต๋ณ 3
JS ๋ฌธ๋ฒ๋ ๋ฌธ๋ฒ์ด์ง๋ง, ๋ฉ๋ชจ์ด์ ์ด์ ํจํด ํ์ฉ์ด ์ฃผ์ด๋ฏ๋ก ํด๋น ํจํด์ ๋ํด ์ดํดํ๋ฉด ์ข์ ๊ฒ ๊ฐ์ต๋๋ค. ์คํ๋ ค ๋ฌธ๋ฒ์ ํจ์๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ํด๋์ค ๋ณด๋ค ๊ฐ๊ฒฐํ๊ณ ์ฝ์ต๋๋ค. ^^ ๊ทธ๋ผ์๋ ๋ช๊ฐ์ง ์๊ฐ๋๋ ๊ฒ์ ๋์ดํ๋ฉด '๊ตฌ์กฐ ๋ถํด ํ ๋น', '๋๋จธ์ง ๋งค๊ฐ๋ณ์', 'ํ์ดํ ํจ์ ์', '๋ฐฐ์ด ๋ฉ์๋(mutation ํ์ง ์๋)' ๋ฑ ์ ๋๋ค.
ํด๋ฆฌํ์ ๋ณดํต ๋ฐ๋ฒจ์ ํตํด์ ์ค์ ํด ๋ธ๋ผ์ฐ์ ํธํ์ฑ์ ๊ณ ๋ คํ๋๊ฑธ๋ก ์๊ณ ์๋๋ฐ npm์์ react-app-polyfill์ ์ฌ์ฉํ๋๊ฒ ์ ๊ธฐํ์ต๋๋ค. ๋ณดํต์ ๊ฒฝ์ฐ, ์ด๋ค ๋ฐฉ๋ฒ์ด ์ข๋ ๋ณดํธ์ ์ธ์ง CRA์์๋ง์ ํน์ฑ์ธ์ง ๊ถ๊ธํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์นํฉ๊ณผ ๋ฐ๋ฒจ์ฌ์ฉ๋ฒ์ ํ์ ์ง๋ฌด ์ญ๋์ ๋ฃ๋ ๊ฒฝ์ฐ๊ฐ ์๋๋ฐ ํ์ ์์ ๋ณผ๋ ์ด๋์ ๋์ ์ดํด๋์ ์ง์์ ๊ฐ์ง ์ ์ ํน์ ๊ฐ๋ฐ์๋ฅผ ์ํ๋๊ฒ์ธ์ง ๊ถ๊ธํฉ๋๋ค.
๋ต๋ณ 4
๋ณดํธ์ ์ธ ๋ฐฉ๋ฒ์ ๊ธฐ์ค์ ์ด๋ค ๋๊ตฌ๋ฅผ ์ฌ์ฉํ๋๊ฐ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง ๊ฒ์
๋๋ค. react-app-polyfill์ Create React App ๋๊ตฌ์ ์ต์ ํ ๋ ํด๋ฆฌํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์
๋๋ค. ๋ฐ๋ฉด core-js, regenerator-runtime ๋ฑ์ ์ฌ์ฉํ ํด๋ฆฌํ(@babel/polyfill์ ๋ ์ด์ ์ฌ์ฉ์ด ๊ถ์ฅ๋์ง ์์)์ CRA ๋๊ตฌ์๋ง ๊ตญํ๋์ง ์์ผ๋ฏ๋ก ๋ฒ์ฉ์ ์ผ๋ก ์ฌ์ฉ ๊ฐ๋ฅํฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ Babel, Webpack ๋ฑ ๋๊ตฌ์ ํ์์ฑ์ ์ดํดํ๊ณ , ๊ธฐ๋ณธ์ ์ธ ์ฌ์ฉ๋ฒ์ ์๊ณ ์๋ค๋ฉด ์ข์ต๋๋ค. ๋๊ตฌ ๋ณ ์ฌ์ฉ ๋ชฉ์ ๊ณผ ๋๊ตฌ์์ ์ ๊ณตํ๋ ์ฝ์ ๋ฑ์ ๋ํด ๋ฐ๋ก ์๊ณ , ๋ฌธ์ ๊ฐ ๋ฐ์ํ ๊ฒฝ์ฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์ ์ ๋์ ๊ฒ์, ๋ฐ์ ๋ฅ๋ ฅ์ด ์๊ตฌ๋ ๊ฒ์ ๋๋ค.
CRA๋ฅผ ํตํด ํ๋ก์ ํธ๋ฅผ ์งํํ๊ณ ์๋๋ฐ ํ์ ์คํฌ๋ฆฝํธ๋ฅผ ์ ์ฉํด ํ๊ณ ์์ต๋๋ค. ํ์ ์คํฌ๋ฆฝํธ์ ์ฝ๋๋ฅผ ๋ง์ถ๋๊ฑด์ง,, ์ฝ๋๋ฅผ ํ์ ์คํฌ๋ฆฝํธ๋ก ์ ์ง๊ณ ์๋๊ฑด์ง ์์ง ๋ชปํด ๋ต๋ตํ๋ฐ ์ฝ๋๋ฅผ ์์ฑํ ๋ ํ์ ์ ์ ์ด๋๊ณ ์์ฑํ๋์ง, ๋ ํ์ ์ ์์ ์ด ์ผ์ด๋๋ ์ํฉ์์๋ ์ด๋ป๊ฒ ๋์ฒํด์ผ ํ๋์ง ๊ถ๊ธํฉ๋๋ค
๋ต๋ณ 5
์ง๋ฌธ์ "๋น์ ์ ์ด๋ป๊ฒ ํ๋๊ฐ?"๋ฅผ ๋ฌผ์ด๋ณธ ๊ฒ์ด๋ฏ๋ก ์์ํ๊ฒ ์ ์ ์ฅ์์ ๋ต๋ณ๋๋ ค ๋ด ๋๋ค. ์์ ์์ ๋ง์๋๋ ธ ๋ฏ์ด ์ ๋ Designer์ด๊ณ , Design์ "์ค๊ณ"๋ฅผ ์๋ฏธํฉ๋๋ค. ๊ทธ๋ฌ๋ฏ๋ก ์ ๋ ๋์์ธ์ ํ ๋ ๋จผ์ ์ค๊ณ๋ฅผ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด ๋ฐํ ์๋ฃ๋ฅผ ๋์์ธ ํด์ผ ํ๋ ๊ฒฝ์ฐ, ๋ค์ ์ ์ฐจ์ ๋ฐ๋ผ ๊ตฌํํฉ๋๋ค.
- ๋ฐํ ์ฃผ์ ์ดํด/์ ๋ฆฌ
- ๋ฐํ ๋ฐฉ์ ์กฐ์ฌ/๋ถ์/์ ํ
- ๋ฌํํ ๋ฐํ ์ฌ๋ผ์ด๋ ์์ฑ(์คํ ๋ฆฌํ ๋ง, ์์ด์ดํ๋ ์)
- ๋ฐํ ์๋ฃ ๋ฌด๋๋ณด๋ ์์ฑ
- ๋ฐํ ์๋ฃ์ ์ฌ์ฉ ๋ ํฌํ ,ํด๋ฆฝ์ํธ ๊ฒ์/๊ตฌ๋งค ๋๋ ์ง์ ์ ์
- ๋ฐํ ์ฌ๋ผ์ด๋ ๊ตฌ์ฑ(์๊ฐ ๋์์ธ, ํ์ํ ๊ฒฝ์ฐ ์ ๋๋ฉ์ด์ ๋ํ ์ ์)
- ๋ฐํ ์๋ฃ ๊ฒํ /๋ธ๋ฆฌํ ์ค๋น
- ๋ฐํ ์งํ
Develop ๋ํ "๊ตฌํ์ ์ํ ์ค๊ณ"๊ฐ ํ์ํ์ฃ . ๊ทธ๋ฌ๋ฏ๋ก ๊ตฌํํด์ผ ํ ์ ํ๋ฆฌ์ผ์ด์ UI๋ฅผ ๋ถ์ํ ํ, ๊ตฌํ์ ์์ ์ด๋ค props๋ฅผ ๋๋ state๋ฅผ ๊ด๋ฆฌํด์ผ ํ ์ง ๊ณ ๋ฏผํฉ๋๋ค. TypeScript๋ฅผ ์ฌ์ฉํ๋ค๋ฉด ์ ํธ๋ฆฌํฐ ํจ์ ๋๋ ํด๋์ค, ์ปดํฌ๋ํธ ์ค๊ณ ๊ณผ์ ์์ ์ด๋ค ํ์ ์ด ํ์ํ ์ง ์ค๊ณํ๊ณ ๋ค์ด๊ฐ๋๋ค.
์ค๊ณ๋ฅผ ๊ผผ๊ผผํ๊ฒ ์ํ ๊ฒฝ์ฐ, ์์ธก๋๋ก ๊ตฌํํ ์ ์์ด ์์ ์ด ๋ฐ์ํ๋ ๊ฒฝ์ฐ๊ฐ ์ค์ด๋ญ๋๋ค. ๋๋ถ๋ถ์ ์นํฐ ์๊ฐ๊ฐ ์ํ ์๊ฐ๋ณด๋ค ์ฝํฐ ์์ฑ์ ๋ณด๋ค ๋ง์ ์๊ฐ์ ํ ์ ํ๋ ๊ฒ ๋ํ ๊ฐ์ ์ด์ ์ ๋๋ค. ์ฝํฐ๋ฅผ ๋์ถฉ ๊ทธ๋ฆฌ๋ฉด ์ํ๋ฅผ ๊ทธ๋ฆฌ๋ค๊ฐ ์ค๊ฐ์ ์๊ณ ๋ค์ ๊ทธ๋ ค์ผ ํ๊ธฐ ๋๋ฌธ์ ๋๋ค. (์์ ... ์์ ... ์์ ...)
๊ฒฐ๋ก ์ ํ์ ์์ ์ด ๋ฐ์ํ์ง ์๋๋ก ๊ผผ๊ผผํ๊ฒ UI๋ฅผ ๋ถ์ํ๊ณ , ์ค๊ณํ๋ ๊ฒ์ ๊ถ์ฅํฉ๋๋ค. ํ์ง๋ง ๊ทธ๋ผ์๋ ๋ถ๊ตฌํ๊ณ ์์ ์ด ๋ฐ์ํ ์ ์์ต๋๋ค. ๊ทธ๋ฐ ๊ฒฝ์ฐ ์ฐ์ ์ฃผ์ด์ง ์ํฉ์ ๋ง์ถฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๊ฒฝํ์ ๊ฐ๋ ๊ฒ์ด ์ข์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ฝ๋ ๋ฆฌ๋ทฐ๋ฅผ ํตํด ์์ธก๊ณผ ๋ฌ๋ฆฌ ์์ ์ํฉ์ด ์ ๋ฐ์ํ ๊ฒ์ธ์ง ๋ถ์ํ๊ณ , ๋ค์ ์ค๊ณ ๊ณผ์ ์์๋ ๊ฐ์ ๊ฒฝํ์ ํ์ง ์์ ์ ์๋๋ก ๋๋นํ ํ์๊ฐ ์์ต๋๋ค.
ํน์ ์ค๋ ๋ฐฐ์ด redux์ create ํจ์ ๋ง๊ณ ๋ค๋ฅธ create ํจ์(createSlice, createAsyncThunk ๋ฑ..)์ ๋ฐ๋ก ์ ๋ค๋ฃฐ ์์ ์ธ๊ฐ์?? ํน์ ์ ๋ค๋ฃฌ๋ค๋ฉด ์ค๋ ๋ฐฐ์ด createStore์ creataSlice ์ ์ฐจ์ด์ ์ด ๊ถ๊ธํฉ๋๋ค!
๋ต๋ณ 6
๋ง์์ฃผ์ ํจ์๋ RTK์ ํจ์ ๋ค์ ๋๋ค. ๋ค์ ์๊ฐ์ ๊ทธ ํจ์๋ค์ ๋ค๋ฃฐ ์์ ์ ๋๋ค. ์ฐ์ ๊ฐ๋จํ๊ฒ ์ด์ผ๊ธฐ ๋๋ ค๋ณผ๊ป์. createStore ํจ์๋ Redux์ Store๋ฅผ ์์ฑํ๋ ํจ์์ ๋๋ค. ๊ทธ๋ฆฌ๊ณ createSlice ํจ์๋ Redux๋ฅผ ๋ณด๋ค ์ฝ๊ฒ ์ฌ์ฉํ ์ ์๋๋ก initialState, reducer, action type/creators๋ฅผ ํ ๋ฒ์ ๊ด๋ฆฌํ ์ ์๋๋ก ๋์์ฃผ๋ ํจ์์ ๋๋ค. ^^