ํ๋ก์ ํธ๋ฅผ ์์ํ๋ฉด, ์๋ง์ ์ ํ์ ๊ธฐ๋ก์ ๋์ด๊ฒ ๋๋ค. ๋ฐ๋ก.. ๊ธฐ์ ์คํ๋ค
์ฌ์ค ์ผ์ ์ ํฐ ๊ณ ๋ฏผ์์ด ๋ง์ด ์ฐ์ด๊ธฐ ๋๋ฌธ์ ์ ํํ ๊ฒ๋ค์ด ์์์ง๋ง,
์ด๋ฒ ํ๋ก์ ํธ๋ ๋์๊ฒ ๋งค์ฐ ํฌ๊ณ ์์คํ๊ธฐ์ ์ ํ์ง๋ค์ ๋น๊ตํด๋ณด๊ฒ ๋ค!
1. Package Manager - npm vs yarn
npm (node package Manager)
Node.js ๊ธฐ๋ณธ ํจํค์ง ๊ด๋ฆฌ์
yarn
npm๊ณผ ํฌ๊ฒ ์ฐจ์ด๋ ์์ง๋ง , ๋ฒ์ ์ฐจ์ด๋ก ์ธํ ๋ฒ๊ทธ๋ฅผ ๋ฐฉ์งํ๊ณ ํจํค์ง๊ฐ ์ฝ๊ฐ ๋ ๊ฐ๋ฒผ์
- ๊ฐ๋ณ๊ณ ๋น ๋ฅด๋ค
- ์๋์ ์์ ์ฑ์ด ๋ฏธ์ธํ๊ฒ ์ข์ง๋ง performance ์ฐจ์ด๋ ํฌ์ง ์๋ค.
- ๋ณ๋ ฌ์ ํจํค์ง ์ค์น, ๋ฒ์ ์ฐจ์ด๋ก ์ธํ ๋ฒ๊ทธ ๋ฐฉ์ง ๊ฐ๋ฅ
โ๏ธ ๋ ์ฌ์ด์ ํฐ ์๋ฏธ๊ฐ ์์ง๋ง ์ฅ์ ์ด ๋ ํ yarn์ ์ ์ธ ์ด์ ๊ฐ ์๊ธฐ์ yarn์ ํ
2. Frame Work - CNA vs CRA
webpack ์ค์ ์์ด SSR์ ์ ๊ณตํ๋ Next.js๋ฅผ ์ฌ์ฉํ app์ ๋น ๋ฅด๊ฒ ๋ง๋ค์ด์ฃผ๋ ํ๋ ์์ํฌ
CRA
webpack ์ค์ ์์ด React app์ ๋น ๋ฅด๊ฒ ๋ง๋ค์ด์ฃผ๋ ํ๋ ์์ํฌ
โ๏ธ ๋๊ฐ์ง ๋ค webpack์ด๋ ๋ชจ๋ ์ค์ ์ ๋ฐ๋ก ํ ํ์์์ด ๋น ๋ฅด๊ณ ๊ฐํธํ๊ฒ app ์์ฑ์ ๋ง๋ค์ด์ฃผ๋ ํ๋ ์์ํฌ์ธ๋ฐ,
์ฌ์ค SEO๊ฐ ์ข์ผ๋ ค๋ฉด CNA๊ฐ ์ข์ง๋ง , AWS์ EC2๊ด๋ฆฌ ๋ฑ ๋ด๋ถ ์ฌ์ ์ผ๋ก ์ธํด CRA๋ฅผ ์ฌ์ฉํ๊ฒ ๋์๋ค.
-> Next.js์ ๋ํ ์๊ฐ๋ ์ฌ๊ธฐ์ ์์ธํ ์ ์ด๋์๋ค.
3. Design - Material UI vs Antd Design
- React ๊ฐ๋ฐ ์ ์ฌ์ฉํ ์ ์๋ UI framework
- ๋ธ๋ผ์ฐ์ , ์๋ฒ, ๋ ๋๋ง ํ๊ฒฝ ์ง์
- ์ฌ์ฉ์ ์ ์๊ฐ ์ฌ์
- props์๋ํ type์ง์ ์ด ๋์ด ์์
โ๏ธ ๋ ๋ค์ํ๋์์ธ์ ๋ณด์ ํ MaterialUI์ ๊ณ ๋ฏผํ์ง๋ง, ๊ทธ์ ์์ํ๋ ์ฒด๊ณ์ ์ธ ๋ฌธ์ํ๊ฐ ๋์ด์๊ณ type์๋ด๊ฐ ์ ๋์ด์์ด ์ ํ
4. Style Library - SCSS vs styled-component vs emotion
SCSS
- CRA์ ๋ด์ฅ๋์ด ์์ผ๋ฉฐ html๊ณผ css ๊ฐ ๋ถ๋ฆฌ๋จ
styled-component
- ๋ํ์ ์ธ CSS-In-JS๋ก JS์์์ CSS๋ฅผ ์ฒ๋ฆฌํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
emotion
- CSS-In-JS
- ๊ฐ๋ฒผ์ด ํ๊ฒฝ, ๋ค์ํ style ์์ฑ๋ฐฉ์ ์ง์ (styled-components , SCSS , inline )
โ๏ธ styled-component๋ณด๋ค ๊ฐ๋ฒผ์ฐ๋ฉด์ ๋ค์ํ ๋ฐฉ์์ ์ง์ํ๋ ํ์ฅ์ฑ์ ๊ณ ๋ คํ์ฌ emoiton ์ ํ
5. ์ํ๊ด๋ฆฌ - Redux vs Recoil
Redux
- ๋ค์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ง์๊ณผ ์๋ฃ
- dev tool์ ํธ๋ฆฌํจ
Recoil
- ๊ฐ๋ฒผ์ด setting ํ๊ฒฝ
- ๋น๋๊ธฐ ๋ฐ์ดํฐ์ฒ๋ฆฌ์ ๊ณ์ฐ๋ ๊ฐ ์ฒ๋ฆฌ๊ฐ ๋ด๋ถ ๋ชจ๋๋ก ๊ฐ๋ฅ
- ๋ฐ์ดํฐ ์๋ธ์ ์ ๋์์ผ๋ก ๋ณ๊ฒฝ ๊ฐ์ง, ์ ๋ฐ์ดํธ ๊ฐ๋ฅ
โ๏ธ hook ๊ณผ ๋น์ทํด ์ฌ์ฉํ๊ธฐ ํธ๋ฆฌํ๊ณ Component ๋ฐ์ดํฐ ์กฐ๊ฐ๋ง ์ฌ์ฉ ๊ฐ๋ฅํ๊ณ ๋น๋๊ธฐ๋ฐ์ดํฐ ํ๋ฆ ์ ์ดํ๋ ์๋ฃจ์ ์ด ์กด์ฌํ๊ธฐ ๋๋ฌธ์ ์ ํ
6. Test Library - Enzyme vs react-testing-library
์ ๊น! JEST๋?
: JavaScript Testing Framework ๋ก ํ ์คํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์คํ์ํค๋ ํ ์คํธ ๋ฌ๋
JEST ํ ์คํธ๋ฌ๋ ๊ธฐ๋ฐ์ ์ฌ์ฉํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ ์ ํด์ผ ํ๋ค.
mobile-web์ test ์ฃผ ๋ชฉ์ ์ ์ฌ์ฉ์ ํ๋ ๊ธฐ๋ฐ์ test ์งํ
์ฌ์ฉ์ ์๋๋ฆฌ์ค์ ๊ธฐ๋ฐํ test code ์์ฑ ํ ํ์์ ๋ฐ๋ผ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ทจ์ฌ์ ํํ ์์
ex) ์ํ ๋ฑ๋ก (testing-library) → state ํ์ธ(hooks-library) → DOM ๋ณ๊ฒฝ ํ์ธ(testing-library) ๋๋
๋์ ์์ฃผ ํ ์คํธ
- Airbnb์์ ๋ง๋ testing library
- ๊ฐ์ DOM์ ๊ธฐ์ค์ผ๋ก test ๊ฐ๋ฅ
- props , state ๋ฅผ ์ฌ์ฉํ์ฌ ํ ์คํธ๋ฅผ ์งํํ๊ธฐ ๋๋ฌธ์ props , state ๊ฒ์ฆ์ ์ฉ์ดํ ๋ฐ๋ฉด ํ ์คํธ๋ ์ทจ์ฝํจ.
ํ๋ ๊ธฐ๋ฐ์ test๋ฅผ ํ๊ธฐ์ ๋ถํ์ํ ๋จ์ test ์์ฃผ๋ฉฐ, Class ํ component ๊ธฐ๋ฐ์ test code๋ฅผ ์ ๊ณตํ๊ณ , ๋ด๋ถ์ ์ธ ๊ตฌ์ฑ ์์์ ์ค์ ์ ๋๊ธฐ ๋๋ฌธ์ ์ฃผ ๋ชฉ์ ๊ณผ ๋ง์ง ์์.
ํ์ ์ฃผ๋ ํ ์คํธ
- CRA ์ฌ์ฉ ์ ๊ธฐ๋ณธ ์ ๊ณต
- React ์์ ๊ถ์ฅํ๋ test library
- ์ค์ DOM ๊ธฐ์ค์ผ๋ก test (jsdom ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฌ์ฉ)
- React component ๋จ์ํ ์คํธ ๋ฐ ํตํฉํ ์คํธ ๊ฐ๋ฅ
โ๏ธ ์ฌ์ฉ์ ๊ฒฝํ์ ๋ฐ๋ฅธ React ์ดํ๋ฆฌ์ผ์ด์ ์ ๋์ํ๋ ๊ด์ ์ test ์งํ์ด ๊ฐ๋ฅํ์ฌ ์ฃผ ๋ชฉ์ ์ ์ ์ ํ๋ค๊ณ ํ๋จํ์ฌ ์ ํ
6-2) ๊ทธ๋ ๋ค๋ฉด.. Rcoil / hooks/ ์ ์ญ์ํ ๊ด๋ฆฌ๋ ์ด๋ป๊ฒ ํ ๊น?
- ์ฌ๋ฌ component์์ ์ฌ์ฉํ๋ state ๊ด๋ฆฌ ์ ์ฌ์ฉ
- hooks์ ํ๋ผ๋ฏธํฐ์ ๋ฐํ ๊ฐ ํ์ธ ๊ฐ๋ฅ
- ์ฌ๋ฌ custom hooks ๊ฐ ์ฌ๋ฌ component์ ์ฐ๊ฒฐ๋ ๊ฒฝ์ฐ ์ฌ์ฉ
- ํ์์ ๋ฐ๋ผ Wrapping ํ์
- <RecoilRoot >
- <Suspense>
recoil์ atom ๊ณผ selector๋ฅผ ํ์์ ๋ฐ๋ผ custom ํ์ฌ test ํ ์ ์์. ์ฌ์ฉ์ interaction ์ ๋ฐ๋ฅธ ์ํ test์ ์ฌ์ฉํ๊ธฐ ์ ์
react-recoil-hooks-testing-library
- weekly downloads 1,584 ๐ฎ
- ๊ทธ๋๋ TypeScript ๊ธฐ๋ฐ์ธ ์ ์ ๋คํ
โ๏ธ ํ์ฌ ์๋ํํฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ ํ์์ฑ์ด ๋๊ปด์ง์ง ์์. ๊ตฌํ ์ค ํ์ํจ์ ๋๋ผ๋ฉด ์ฌ์ฉํ ์์
์ด๋ ๊ฒ ํ๋ก์ ํธ์ ์ฌ์ฉํ ๊ธฐ์ ์คํ๋ค์ ์ ์ ํ๋ค.
๋ฌผ๋ก ์ด ์ ํ๋ค์ ํ์์ ๋ฐ๋ผ ๋ฐ๋ ๊ฒ์ด๋ค. ๊ทธ๋๋ ์ด์ ๋ฅผ ์๊ณ ์ฐ๋ ๊ฒ๊ณผ ๋ชจ๋ฅด๋ ๊ฒ์ ์ฐจ์ด๊ฐ ์๋ค๋ ๊ฒ์ ์๊ธฐ์.. ๐
๋๊ธ