๊ฐ์
๋ฏธ์ | ๊ธฐ๊ฐ | Repository | PR & Review | github pages | storybook |
---|---|---|---|---|---|
์ฅ๋ฐ๊ตฌ๋ 1๋จ๊ณ | 23-05-09 - 23-05-14 | Repo | PR & Review | ๐๏ธ ์ฅ๋ฐ๊ตฌ๋ | ๐ ์คํ ๋ฆฌ๋ถ |
๋ฏธ์ ํ๊ณ
๋ ๋ฒจ 2์ ์ธ ๋ฒ์งธ ๋ฏธ์ ์ ์ฅ๋ฐ๊ตฌ๋ ํ์ด์ง๋ฅผ ๋ง๋๋ ๊ฒ์ด๋ค. ์ด๋ฒ ๋ฏธ์ ์ ๋ฐํ์ผ๋ก ๋ฐฑ์๋์ ํ์ ๋ฏธ์ ๋ ์งํ์ ํ๋ค. ์ฆ, ์๋ฒ์ ์๋ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ ์ํ ๋ชฉ๋ก์ ๋ณด์ฌ์ฃผ๊ณ ์ฅ๋ฐ๊ตฌ๋์ ์ํ์ ๋ด๊ณ , ์ญ์ ํ๋ ๊ณผ์ ๋ ๊ตฌํํด์ผ ํ๋ค. ์ด๋ฅผ ์ํ ๋ณธ๊ฒฉ์ ์ธ ๊ธฐ๋ฅ ๊ตฌํ์ 2๋จ๊ณ์์ ์งํ์ ํ๊ฒ ๋๋ค. 1๋จ๊ณ์์๋ ์ฅ๋ฐ๊ตฌ๋ ๋งํฌ์ ์ ์์ฑํ๊ณ ์ํ๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ํ ๋น๋์ ๊ณผ์ ์ด๋ผ๊ณ ์๊ฐํ๋ฉฐ ๋ฏธ์ ์ ์ํ๋ค.
์ฅ๋ฐ๊ตฌ๋ 1๋จ๊ณ ๋ฏธ์ ์ ํ์ ์๊ตฌ ์ฌํญ์ ๋ค์๊ณผ ๊ฐ๋ค.
1. ์ํ ๋ชฉ๋ก ํ์ด์ง
- ์ํ ๋ชฉ๋ก ํ์ด์ง์ ํ์ํ UI ๋งํฌ์
- header์ ์ซ์ ํ์๋ฅผ ํตํด ์ฅ๋ฐ๊ตฌ๋์ ๋ด๊ธด ์ํ ์ข ๋ฅ์ ๊ฐฏ์ ํ์
2. ์ ์ญ ์ํ ๊ด๋ฆฌ
- recoil์ ์ฌ์ฉํ์ฌ ์ ์ญ ์ํ ๊ด๋ฆฌ
3. mock ๋ฐ์ดํฐ ํ์ฉ
- Mock ๋ฐ์ดํฐ๋ฅผ ํ์ฉํ์ฌ ์ํ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ค. ํ์ ๋ฏธ์ ์ ๊ณ ๋ คํ์ฌ ์ฅ๋ฐ๊ตฌ๋ API ์์ ๋ช ์ธ ์ฐธ๊ณ
4. ํ ์คํธ ๋๊ตฌ ์ ์
- ์ ํฉํ ํ ์คํธ ๋๊ตฌ๋ฅผ ์ ํํ์ฌ ์ฌ์ฉํ๊ณ , ์ค์ํ ํ ์คํธ ์ผ์ด์ค๋ฅผ ์ ์ํ์ฌ ํ ์คํธ ์งํ
์ด์ ๋ฏธ์ ์์๋ contextAPI๋ฅผ ํ์ฉํ์ฌ ์ ์ญ ์ํ๋ฅผ ๊ด๋ฆฌํ๋ฐ๋ฉด ์ด๋ฒ์๋ recoil์ ์ฌ์ฉํ์ฌ ์ ์ญ ์ํ๋ฅผ ๊ด๋ฆฌํด์ผ ํ๋ค. recoil์ด ์ค์ํ ๊ฒ์ด ์๋๋ค. ๋ฌด์์ ์ ์ญ ์ํ๋ก ๊ด๋ฆฌํด์ผ ํ๋์ง๋ฅผ ๊ณ ๋ฏผํ๋ ๊ณผ์ ์ด ์ค์ํ๋ค. ์ฝ๊ฒ ๊ฒฐ๋ก ์ด ๋ ์ ์๋ ๊ณ ๋ฏผ์ด์ง๋ง ๊ธฐ์ค์ ์ก์๊ฐ๋ ๊ณผ์ ์ ์ด๋ฒ ๋ฏธ์ ์์ ๊ฒฝํํ๊ณ ์ถ์๋ค.
๐ฌ ํ์ดํ๋ก๊ทธ๋๋ฐ ์งํ ๊ณผ์
์ฅ๋ฐ๊ตฌ๋ 1๋จ๊ณ ๋ฏธ์ ์ ์์์ ํจ๊ป ์งํํ์๋ค. ์ง๊ธ๊น์ง eslint, tsconfig, path-alias์ ๊ฐ์ ์ค์ ์ ๋ง์ ์ด๋ ค์์ด ์์๋๋ฐ, ์ด๋ฒ ๋ฏธ์ ์์๋ ๋ฌผ ํ๋ฅด๋ฏ์ด ์ค์ ์ด ์๋ฃ๋์ด ๋น ๋ฅด๊ฒ ๋ฏธ์ ์๊ตฌ์ฌํญ์ ์ถฉ์กฑํ๊ธฐ ์ํ ์ฝ๋ ์์ฑ์ ์์ํ ์ ์์๋ค. ๋๋ฌธ์ ๋ฏธ์ ์งํ์ ์ํ ์ด์ผ๊ธฐ๋ฅผ ๋ณด๋ค ๋ง์ด ๋๋ ์ ์์๋ค.
๋๋ ๊ทธ๋ ๋ ์์๋ ๊ทธ๋ ๊ณ ๋๋ค recoil๋ฅผ ์ฌ์ฉํด ๋ณธ ์ ์ด ์์ ๋ฟ ๋๋ฌ ์ ์ญ ์ํ ๊ด๋ฆฌ์ ๋ํ ๊ฒฝํ์ด ๋ง์ด ๋ถ์กฑํ์ฌ ๋ฌด์์ ์ ์ญ ์ํ๋ก ๊ด๋ฆฌ๋ฅผ ํด์ผ ํ ์ง ๊ณ ๋ฏผ์ ํจ๊ป ํ์๋ค. ํจ๊ป ๊ณ ๋ฏผํ ๋์ ์ฅ๋ฐ๊ตฌ๋์ ๋ด๊ธด ์ํ์ ์ ์ญ ์ํ๋ก ๋ง๋ค์๋ค. ๊ทธ ์ด์ ๋ ์ฅ๋ฐ๊ตฌ๋์ ๋ด๊ธด ์ํ์ ์ํ๋ ์๋ก ๋๋ฌด ๋จผ ๋ ๊ฐ์ ์ปดํฌ๋ํธ์์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ด๋ค. ๋ฟ๋ง ์๋๋ผ, 2๋จ๊ณ ๋ฏธ์ ์์ ์ฅ๋ฐ๊ตฌ๋ ํ์ด์ง๋ฅผ ๋ง๋ค์ด์ผ ํ ๋์๋ ํด๋น ์ํ๊ฐ ํ์ํ๊ธฐ ๋๋ฌธ์ด๋ค. ๋ํ recoil์ selector์ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ฉด ์ฅ๋ฐ๊ตฌ๋์ ๋ด๊ธด ์ํ์ ๊ฐ์๋ฅผ ์ฝ๊ฒ ์ ์ ์์ด ์ ์ญ์ผ๋ก ์ํ๋ฅผ ๊ด๋ฆฌํ๊ธฐ๋ก ํ์๋ค.
์ด๋ฒ ๋ฏธ์ ๋ ์คํ ๋ฆฌ๋ถ์ ํ์ฉํ์ฌ TDD๋ฅผ ์ ์ฉํ์ฌ ์งํํ๊ณ ์ถ์๋ค. ์ด๋ฅผ ์์์๊ฒ ๋งํ๊ณ , ๋คํํ๋ ์์๋ ์ด๋ฅผ ๋์ํ์ฌ ๊ฐ์ฅ ์ค์ํ ์ปดํฌ๋ํธ๊ฐ ๋ฌด์์ธ์ง ์ฐ์ ์ ์ผ๋ก ๊ณ ๋ฏผํ๊ณ ์ด๋ฅผ ์คํ ๋ฆฌ๋ถ์ผ๋ก ๋ง๋ค๋ฉด์ ๋ฏธ์ ์ ์งํํ์๋ค. ์์ง ์ํฐ ๊ฐ์ด ์์ง๋ง ์กฐ๊ธ์ฉ TDD, storybook์ ์ ์์ด ๋์ด ๊ฐ๋ ๊ฒ ๊ฐ์ ์ข์๊ณ ์์๋ TDD์ ์ข์ ๊ฒฝํ์ ํ๋ค๊ณ ๋งํด์ฃผ์ด์ ๋ฟ๋ฏํ์๋ค. ์์ผ๋ก๋ ๊พธ์คํ ์ฐ์ต์ ํด๋ด์ผ๊ฒ ๋ค.
1๋จ๊ณ ๋ฏธ์ ์์๋ ๋น๋๊ธฐ ํต์ ์ด ์์์ง๋ง, 2๋จ๊ณ ๊ทธ๋ฆฌ๊ณ ์์ผ๋ก ์ฅ๋ฐ๊ตฌ๋ ํ์ ๋ฏธ์ ์ ์ํด Mock ๋ฐ์ดํฐ๋ฅผ ๋น๋๊ธฐ๋ก ๋ฐ์์ ๋ก๋ฉ ํ๋ฉด์ ๋ง๋ค์๋ค. Suspense๋ฅผ ํ์ฉํ์ฌ ๋ก๋ฉ ํ๋ฉด์ ๋ง๋ค๊ณ ์ถ์์ง๋ง, Suspense ์ ์ฉ์ ๋ฒ๋ฒ์ด ์คํจ๋ฅผ ํ์ฌ ์์ฌ์ด ๋ง์์ด ๋ค์๋ค. ํ์ง๋ง ์ํ๋ ์ค์ผ๋ ํค UI๋ ์ ๋์๋์ด ๋คํ์ด๋ผ๊ณ ์๊ฐํ๋ค.
ํ์ดํ๋ก๊ทธ๋๋ฐ์ ์งํํ๋ฉด์ ์์์์ ์๊ฒฌ ์ฐจ์ด๊ฐ ๊ฑฐ์ ์์๊ธฐ ๋๋ฌธ์ ์ค๋ฌด์คํ๊ฒ ๋ฏธ์ ์ ์งํํ์๋ค. ๋ฌผ๋ก ์๋ก ์ฒ์ ์ฌ์ฉํ๋ ๊ธฐ์ ์ด ๋ง์๊ธฐ ๋๋ฌธ์ ๋ฒ๋ฒ ๊ฑฐ๋ฆผ์ ์์์ง๋ง, ๊ทธ๋๋ง๋ค ๊ณต์๋ฌธ์, ๊ธฐ์ ๋ธ๋ก๊ทธ๋ฅผ ๋ณด๋ฉฐ ํจ๊ป ํด๊ฒฐํ๋ ๊ณผ์ ์ ํตํด ์ํ๋ ๋ฐฉํฅ์ผ๋ก ๋ฏธ์ ์ ๋ง๋ฌด๋ฆฌํ๊ณ ์ ๋ ธ๋ ฅํ๋ค. ์์ง ํ๋กค๋ก๊ทธ ๊ธ์ฐ๊ธฐ์ ๋ํ ์ด์ผ๊ธฐ๋ฅผ ํ์ง ์์๋ค. ๋ค์ ์ฃผ์ ์ด์ผ๊ธฐ๋ฅผ ๋๋๋ฉฐ ์ฅ๋ฐ๊ตฌ๋ ๋ฏธ์ ์ ๋ํ ํ๊ณ ๋ฅผ ์งํํ๋ ค๊ณ ํ๋ค.๐
๐จ๐ป PR Review
์ด๋ฒ ๋ฏธ์ ์ ๋ฆฌ๋ทฐ์ด๋ ๊ทธํ ๋ก ๋ฐ๋ผ๋ ํฌ๋ก ์ด์๋ค! ๋ค๋ฅธ ๋ฆฌ๋ทฐ์ด๋ ์ข์์ง๋ง ์ฐํ ์ฝ ์ฝ์น๋ก ๊ทผ๋ฌด ์ค์ธ ํฌ๋ก ์๊ฒ ๋ฆฌ๋ทฐ๋ฅผ ๋ฐ๊ณ ์ถ์๋ค. ๋ค์์ ์ด๋ฒ 1๋จ๊ณ ์ฅ๋ฐ๊ตฌ๋ ๋ฏธ์ ์์ ๋ฐ์ ์ฝ๋ ๋ฆฌ๋ทฐ์ ๋ํ ๋ด์ฉ์ด๋ค.
Array.from()์ผ๋ก ๋ฐฐ์ด ๋ง๋ค๊ธฐ
๋ฐ๋ณต๋๋ ์ปดํฌ๋ํธ๋ฅผ ๋๋๋ง์ ํ ๊ฒฝ์ฐ, ๋ณดํต ๋ฐฐ์ด์ map ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ค. ๋ฐฐ์ด์ด ์๋ค๋ฉด map ๋ฉ์๋๋ฅผ ๋ฐ๋ก ์ฌ์ฉํ ์ ์์ง๋ง ๋ฐฐ์ด์ ์์๋ก ๋ง๋ค์ด์ผ ํ๋ค. ๋ฐฐ์ด์ ๋ง๋๋ ๋ฉ์๋๋ ์ฌ์ฉํด์ผ ํ๋ค. ์ด๋ฒ ๋ฏธ์ ์์๋ ๋ค์๊ณผ ๊ฐ์ด ๊ธธ์ด๊ฐ 12์ธ ๋ฐฐ์ด์ ๋ง๋ค์ด 12๊ฐ์ ProductItem ์ปดํฌ๋ํธ๋ฅผ ๋๋๋ง ํ์๋ค.
new Array(12).fill(undefined).map((_, index) => <ProductItem key={index} />)
์ด์ ๊ฐ์ ๋ฐฉ๋ฒ์ undefined์ผ๋ก ์ฑ์์ง ๋ฐฐ์ด์ ๋ง๋ค๊ณ map์ผ๋ก ๋ ๋ค๋ฅธ ๋ฐฐ์ด์ ๋ง๋๋ ๋ฐฉ๋ฒ์ด๋ค. ์ฆ, ๋ฐฐ์ด์ 2๋ฒ ๋ง๋ค๊ณ ์๋ค. ํฌ๋ก ์ ์ด ๋ฐฉ๋ฒ๋ณด๋ค Array.from() ๋ฐฉ๋ฒ์ ๋ํด ์๊ฐํด์ฃผ์๊ณ ๋ฆฌํฉํฐ๋ง์ ํ์ฌ ์ ์ฉํ ์ฝ๋๋ ๋ค์๊ณผ ๊ฐ๋ค.
Array.from({ length: 12 }, (_, index) => <ProductItem key={index} />)
Array.from() ์ ์ ์ฌ ๋ฐฐ์ด ๊ฐ์ฒด, ๋ฐ๋ณต ๊ฐ๋ฅํ ๊ฐ์ฒด๋ฅผ ์ฒซ ๋ฒ์งธ ์ธ์๋ก ๋ฐ๊ณ ์ด๋ฅผ ๋งคํ ํจ์๋ฅผ ํตํด ์๋ก์ด ๋ฐฐ์ด๋ก ๋ง๋ ๋ค. ์ฆ ์์์ ์ ์ฌ ๋ฐฐ์ด ๊ฐ์ฒด์ธ { length: 12 }๋ฅผ ๋ฐฐ์ด๋ก ๋ง๋ค๊ณ ์๋ ๊ฒ์ด๋ค.
์ด๋๊ฐ ์ด์ํ ์ปดํฌ๋ํธ ๋ค์ด๋ฐ
์ฅ๋ฐ๊ตฌ๋ ๋ฏธ์ ์ ์งํํ๋ฉด์ UserSummaryShoppingCart๋ผ๋ ์ปดํฌ๋ํธ๋ฅผ ๋ง๋ค์๋ค. ํด๋น ์ปดํฌ๋ํธ๋ ํค๋์ ์กด์ฌํ๋ฉฐ ์ ์ ์ ์ด๋ฆ๊ณผ ํจ๊ป ์ ์ ์ ์ฅ๋ฐ๊ตฌ๋ ๊ฐ์๋ฅผ ๋ํ๋ด๋ ์ปดํฌ๋ํธ์ด๋ค.
์ด๋ฅผ ๋ณด๋ค ์ฌ์ฌ์ฉ๊ฐ๋ฅํ๊ฒ ๋ง๋ค๊ณ ๋ณดํต์ ์๋น์ค์์ ์ฌ์ฉํ๋ ๋ค์ด๋ฐ์ ์ฌ์ฉํ ์ ์๋๋ก ๋ฆฌํฉํฐ๋ง์ ํ์๋ค. ๋ชจ๋ฐ์ผ์์๋ ์์ด์ฝ๊ณผ ์ซ์๊ฐ ํจ๊ป ์๋ ํํ๋ฅผ ๋ฐฐ์ง(Badge)๋ผ๊ณ ์นญํ๋ ๊ฒ์ด ์ผ๋ฐ์ ์ด๋ผ๊ณ ํ๋ค. ๋๋ฌธ์ ์ฅ๋ฐ๊ตฌ๋์ ๋ฐฐ์ง์ด๋ฏ๋ก CartBadge๋ผ๋ ์ด๋ฆ์ผ๋ก ์์ ํ์๋ค.
์ถ๊ฐ์ ์ผ๋ก ์์ผ๋ก ํฐ ์๋น์ค๋ฅผ ๋ง๋ค ๋, ๊ณ ๋ ค์ผ ํ ์ ์ ์ ์ฌ์ง์์ ์ซ์๊ฐ ํฌํจ๋์ด ์๋ ๋๊ทธ๋ ๋ชจ์์ ๋ ๋ฆฝ์ ์ธ ์ปดํฌ๋ํธ๋ก ๋๋์ด ๋ถ๋ฆฌ๋ฅผ ํ๋ ๊ฒ์ด๋ค. ํด๋น ์ปดํฌ๋ํธ๋ ๋ง ๊ทธ๋๋ก Badge๊ฐ ๋ ๊ฒ์ด๋ค. ํ์ง๋ง ์ด๋ฒ ๋ฏธ์ ์์๋ ๋ฐฐ์ง๋ฅผ ๋ค๋ฃจ๋ ์ปดํฌ๋ํธ๊ฐ CartBadge ํ๋๋ฟ์ด๋ฏ๋ก ๋ถ๋ฆฌ๋ฅผ ํ์ง ์์๋ค.
๋ง์ฝ, TDD๋ฅผ ํ ๋, ์ฒ์๋ถํฐ ๋ ์์ ์ปดํฌ๋ํธ๋ฅผ ์๊ฐํ๋ค๋ฉด ์ด๋ ์๊น? ํ๋ ์์ฌ์์ด ๋จ๋๋ค. ์ถ๊ฐ์ ์ผ๋ก ์๋น์ค์์ ์์ฃผ ์ฌ์ฉ๋๋ ๋ค์ด๋ฐ์ ์ ๋ฆฌ๋ฅผ ํด๋์ด ๋ ๊น๋ํ ๋ค์ด๋ฐ๊ณผ ๋ค์ด๋ฐ์ ํฌ์ํ๋ ๋น์ฉ์ ์ค์ผ ์ ์๋๋ก ํด์ผ๊ฒ ๋ค.
JSX์์ ์ฝ๋๋ฅผ ๊น๋ํ
์ด ๋ด์ฉ์ ์ด๋ฒ ๋ฏธ์ ์์ ์ง์์ ์ผ๋ก ๋ฑ์ฅํ ๋ฆฌ๋ทฐ์ด๋ค. ์๋ง, ์ด์ ๋ฏธ์ ๋ค์์๋ ์๊ฐํ์ง ์์๋ ๋ถ๋ถ์ด์์ ๊ฒ์ด๋ค. ๋ฆฌ์กํธ์์๋ JSX ๋ฌธ๋ฒ์ ์ฌ์ฉํ๋๋ฐ ์ด๋ ์๋ฐ์คํฌ๋ฆฝํธ์ ํ์ฅ ๋ฌธ๋ฒ์ด๋ฉฐ ์๋ฐ์คํฌ๋ฆฝํธ ํ์ผ์ HTML๊ณผ ๋น์ทํ๊ฒ ๋งํฌ์ ์ ์์ฑํ ์ ์๋๋ก ๋์์ค๋ค. ๋๋ฌธ์ ๋ฆฌ์กํธ ์ปดํฌ๋ํธ์ JSX ๋ฌธ๋ฒ์ ํ๋ฉด์ ๋ณด์ด๋ UI/UX์ ๋ฐ์ ํ ๊ด๋ จ์ด ์๋ค๊ณ ์๊ฐํ๋ค. ์ด๋ฐ ๋ถ๋ถ์ ๋ณต์กํ ๋ก์ง์ด ๋ค์ด์๋ค๋ฉด ์ฝ๋๋ฅผ ์ฝ๋ ์ ์ฅ์์๋ ๋ฌด์์ด ํ๋ฉด์ ๋๋๋ง์ด ๋๋์ง ์ฝ๊ฒ ํ์ ํ ์ ์๋ค. ์ง๊ธ๊น์ง ๋ด๊ฐ ๊ทธ๋ฌ๋ ๊ฒ์ฒ๋ผ ๋ง์ด๋ค...
์ด๋ฒ ๋ฏธ์ ์์์ ์ฝ๋๋ฅผ ์๋ฅผ ๋ค์ด๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
<S.Quantity>{quantity > SHOPPING_QUANTITY.MAX ? `${SHOPPING_QUANTITY.MAX}` : quantity}</S.Quantity>
์ฌ๊ธฐ์์ quantity๋ ์ฅ๋ฐ๊ตฌ๋์ ๋ด๊ธด ์ํ ์ข ๋ฅ์ ์๋์ด๋ค.(๊ฐ ์ํ์ ์๋์ด ์๋๋ค.) ์ด๋ฅผ JSX์์ ์ผํญ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ์ฌ ๊ณ์ฐํ๊ณ ์๋ค. ๋ณด์ฌ์ง๋ ๊ฒ๊ณผ ๊ณ์ฐํ๋ ๊ฒ. ๋ฌด์์ด JSX์ ์ญํ ์ธ์ง ์๊ฐํ๋ฉด ๋น์ฐํ ๋ณด์ฌ์ง๋ ๊ฒ์ด๋ค. ๋๋ฌธ์ ๊ณ์ฐํ๋ ๊ฒ์ JSX๊ฐ ์๋๋ผ ๋ค๋ฅธ ๊ณณ์์ ํ ์ ์๋๋ก ๋ฆฌํฉํฐ๋ง์ ์งํํ์๋ค.
๊ทธ๋ ๋ค๋ฉด ์ด๋์์ ์ฅ๋ฐ๊ตฌ๋์ ๋ด๊ธด ์ํ ์ข ๋ฅ์ ์๋์ ๊ณ์ฐํด์ผ ํ๋์ง๋ฅผ ์๊ฐํด์ผ ํ๋ค. ํ์ฌ ํ๋ก์ ํธ์์๋ ์ฅ๋ฐ๊ตฌ๋ ์ํ๋ฅผ atom์ผ๋ก ๊ด๋ฆฌํ๊ณ ์๊ธฐ ๋๋ฌธ์ selector์ ์ฌ์ฉํ์ฌ ์ฅ๋ฐ๊ตฌ๋์ ์ํ๋ฅผ ๋ฐํ์ผ๋ก ์ํ ์ข ๋ฅ์ ์๋์ ๊ณ์ฐํ ์ ์๋ค. ๊ฒฐ๊ตญ selector์์ ๋ฐํํ๋ shoppingCartAmount๋ฅผ ๊ทธ๋๋ก JSX์์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ผ๋ก ๋ฆฌํฉํฐ๋ง์ ํ์๋ค.(quantity๊ฐ ์ ํํ ์ด๋ค ๊ฒ์ ์๋์ธ์ง ํ์ ํ ์ ์์ด์ ๋ค์ด๋ฐ๋ ์์ ํ์๋ค.)
์ค์ํ ๊ฒ์ ๊ฐ๋ ์ฑ ์ธก๋ฉด์ ์๊ฐํ๋ค๋ฉด ๊ฐ๋จํ ๋ก์ง์ด์ฌ๋ JSX๋ณด๋จ ๋ค๋ฅธ ๊ณณ์์ ์ ์ธํ์ฌ JSX์์ ๋ณ์๋ง ์ฌ์ฉํ ์ ์๋๋ก ํ๋ ๊ฒ์ด๋ค. ์ต๊ด์ ๊ธฐ๋ฅด๋๋ก ํ์.
JSX์์ ์ผํญ์ฐ์ฐ์ ๋ณด๋จ early return
์ด๋ฒ์๋ JSX์ ๋ํ ๋ด์ฉ์ด๋ค. ํน์ ์ํ์ ๋ฐ๋ผ ์์ ํ ๋ค๋ฅธ JSX๊ฐ return ๋ ๊ฒฝ์ฐ๊ฐ ์๋ค. ์ด๋ด ๋, ๋๋ ๋ณดํต ์ผํญ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ์๋ค. ๊ฐ๋จํ ํ, ๋์ค์ธ ๊ฒฝ์ฐ์ ๊ด์ฐฎ์ง๋ง ์ผํญ์ฐ์ฐ์๊ฐ ๋๋ฌด ๊ธธ์ด์ง ๊ฒฝ์ฐ ์ฝ๋๋ฅผ ์ฝ๊ธฐ ํ๋ ์ํฉ์ด ์ฐพ์์ฌ ์ ์๋ค.
์ด๋ฒ ๋ฏธ์ ์์๋ ๋ค์๊ณผ ๊ฐ์ ์ํฉ์ด ์๋ค. ์ํ์ ์๋์ ์ฌ๋ฆฌ๊ณ ์ค์ด๋ ์ปดํฌ๋ํธ์ธ QuantityController์ ์ํ์ด ์ฅ๋ฐ๊ตฌ๋์ ์ถ๊ฐ๋์๋์ง ๊ทธ๋ ์ง ์์๋์ง์ ๋ฐ๋ผ ๋ค๋ฅธ JSX๊ฐ return ๋๋ค.
1. ์ํ์ด ์ฅ๋ฐ๊ตฌ๋์ ์ถ๊ฐ๋์ง ์์ ๊ฒฝ์ฐ ์ฅ๋ฐ๊ตฌ๋ ์์ด์ฝ์ด return ๋๋ค.
2. ์ํ์ด ์ฅ๋ฐ๊ตฌ๋์ ์ถ๊ฐ๋์ด ์๋ ๊ฒฝ์ฐ ์๋๊ณผ ์๋์ ์กฐ์ ํ ์ ์๋ ๋ฒํผ์ด return ๋๋ค.
์ด๋ฅผ ์ฝ๋๋ก ๊ฐ๋จํ ๋ํ๋ด๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
return quantity === SHOPPING_QUANTITYE.MIN ? (
<div>์ฅ๋ฐ๊ตฌ๋ ์์ด์ฝ</div>
) : (
<div>
<div>์ฅ๋ฐ๊ตฌ๋ ์๋</div>
<button>+</button>
<button>-</button>
</div>
)
์ค์ ์ฝ๋๋ ์์ ๋ด์ฉ๋ณด๋ค ํจ์ฌ ๊ธธ๊ธฐ ๋๋ฌธ์ ์ผํญ์ฐ์ฐ์๋ฅผ ํ ๋ฒ์ ํ์ ํ๊ธฐ์ ๋ฌด๋ฆฌ๊ฐ ์์๋ค. ๋๋ฌธ์ ์ด๋ฅผ early return์ผ๋ก ๋ฆฌํฉํฐ๋ง ํ์๋ค.
return (quantity === SHOPPING_QUANTITYE.MIN) {
return <div>์ฅ๋ฐ๊ตฌ๋ ์์ด์ฝ</div>
}
return <div>
<div>์ฅ๋ฐ๊ตฌ๋ ์๋</div>
<button>+</button>
<button>-</button>
</div>
์ด๋ ๊ฒ ๋๋ค๋ฉด ์กฐ๊ธ ๋ ์ฝ๋๋ฅผ ์ฝ๊ธฐ์ ํธํ์ง ์์๊น ์ถ๋ค.
๊ทธ๋ ๋ค๋ฉด '์ ์ฒด๊ฐ ๋ฐ๋๋ ๊ฒ์ด ์๋๋ผ ๋ถ๋ถ์ด ์ํ์ ๋ฐ๋ฅธ ๋ฐ๋๋ ๋ถ๋ถ์ ์ด๋ป๊ฒ ํด์ผ ํ ๊น?'๋ผ๋ ์๋ฌธ์ด ๋ค์๋ค. ์ฌ์ง์ด ๊ทธ ๋ถ๋ถ๋ ๊ธธ๋ค...๋ผ๊ณ ํ๋ฉด ์ด๋ป๊ฒ ํด์ผ ํ ๊น? ์๋ง ๊ทธ๋ฐ ์ํฉ์ด ์กด์ฌํ๋ค๋ฉด ์ปดํฌ๋ํธ ๋ถ๋ฆฌ๋ฅผ ๋ค์ ํ๋ฒ ์๊ฐ์ ํด์ผ ํ์ง ์์๊น ์ถ๋ค.
์ด๋ฒคํธ๋ฅผ ๋ค๋ฃจ๋ ํจ์์ ๋ค์ด๋ฐ
์ง๊ธ๊น์ง ์ด๋ฒคํธ๋ฅผ ๋ค๋ฃจ๋ ํจ์๋ฅผ ๋ง๋ค ๋ handle์ด๋ผ๋ ์ ๋์ฌ๋ฅผ ์ฌ์ฉํ์๋ค. ์๋ฅผ ๋ค์ด handleClickCartIcon ํจ์๋ "CartIcon๋ฅผ ํด๋ฆญํ์ ๋ค๋ฃจ๋ ํจ์๊ตฌ๋!"๋ผ๋ ๊ฒ์ ์ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค. ํ์ง๋ง ์ด๋ค ๋์์ ํ๋ ๊ฒ์ธ์ง๋ ํ์ ํ ์ ์๋ค. ํด๋ฆญ์ ํด์ ๋ฌด์์ ํ ๊ฒ์ธ์ง๋ ํจ์์ ๋ด๋ถ๋ฅผ ์ดํด๋ด์ผ ํ๋ค. ์ฆ, ์ฝ๋๋ฅผ ์ฝ๊ณ ํ์ ํ๋๋ฐ ๋น์ฉ์ด ๋ ๋ค.
๊ทธ๋ ๋ค๋ฉด ์ด๋ป๊ฒ ๋ค์ด๋ฐ์ ํด์ผ ํ ๊น? ์ฒ์ ๊ณ ๋ฏผํ๋ ๋ถ๋ถ์ ๋ค์๊ณผ ๊ฐ๋ค.
- handle~ + ๋์์ ๋ํ๋ด๋ ๋ค์ด๋ฐ
์์ ๊ฐ์ ์กฐํฉ์ ํด์์ด ์ด์ํ๋ค๊ณ ๋๊ปด์ง๋ค. ๋๋ฌธ์ ๋์์ ๋ํ๋ด๋ ๋ค์ด๋ฐ์ ์ด์ ์ ๋์๋ค. ์๋ฅผ ๋ค์ด ์์ handleClickCartIcon์ ํด๋ฆญ์ ํ๋ฉด ์ฅ๋ฐ๊ตฌ๋์ ์ํ์ด ์ถ๊ฐ๋๋ฏ๋ก addCartItem์ผ๋ก ๋ฆฌํฉํฐ๋ง ํ์๋ค. ๊ทธ๋๋ ์กฐ๊ธ ๋ ๊ณ ๋ฏผํ๋ฉด handle ์ ๋์ฌ๋ ์ฌ์ฉํ ์ ์์ง ์์๊น ์ถ๋ค
์์ผ๋ก ๋ค๋ฅธ ๊ฐ๋ฐ์์ ํ์ ์ ํ๋ ๊ธฐํ๊ฐ ๋ง์ด ์์ ๊ฒ์ด๋ค. ๊ทธ๋๋ง๋ค ํจ์์ ๋ด๋ถ ๋์์ ์ผ์ผ์ด ์ฝ๋ ๊ฒ๋ณด๋ค ํจ์์ ์ด๋ฆ์ ํตํด ์์ ๋์์ ๋น ๋ฅด๊ฒ ํ์ ํ๋ค๋ฉด ์ฝ๋ ์ฝ๋ ๋น์ฉ์ด ์ค์ด๋ค๊ธฐ ๋๋ฌธ์ ํ์ ํจ์จ์ด ๋์ด๋ ๊ฒ์ด๋ค. ์ง๊ธ๊น์ง ๊ฐ์ง๊ณ ์์๋ ์ต๊ด์ ๊ณ ์ณ๋ณด์.
์ถ๊ฐ๋ก, ์ด๋ฒคํธ ํธ๋ค๋ฌ์ ๋ํ ์ข์ ์๋ฃ๊ฐ ์์ด ๊ธฐ์ตํ๊ณ ์ ๋จ๊ธด๋ค. https://blog.shiren.dev/2020-07-27-1/
Barrel Pattern
์ด๋ฒ ๋ฆฌ๋ทฐ ๋ด์ฉ์์ ๊ฐ์ฅ ๋ํดํ ๋ถ๋ถ์ด์๋ค๊ณ ์๊ฐํ๋ค. ์๋ฃ๊ฐ ๋ง์ด ์์ง ์์๋ฟ๋๋ฌ, ๋์ ์ฝ๋์์ ์ด๋ค ๋ถ๋ถ์ด Barrel Pattern์ด์๋์ง ์ ๋ชฐ๋๊ธฐ ๋๋ฌธ์ด๋ค.
์ผ๋จ ๋ค์์ Barrel Pattern๋ฅผ ์๊ฐํ๊ณ ์๋ ์ธ๊ตญ ๋ธ๋ก๊ทธ์ด๋ค.
https://medium.com/swlh/import-components-in-react-like-a-pro-b1340cb76a1b
์ด๋ฅผ ๊ฐ๋จํ ์์ฝํ์๋ฉด Barrel Pattern์ด๋ ์ฌ๋ฌ ์ปดํฌ๋ํธ๋ฅผ ๊ฐ๊ฐ ๋ค๋ฅธ ํ์ผ์ import๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ์ ธ์ค๋ ๊ฒ์ด ์๋๋ผ ํ๋์ ํ์ผ(์๋ฅผ ๋ค์ด index.ts)์์ ๋ชจ๋ ์ปดํฌ๋ํธ๋ฅผ import๋ฅผ ํ๊ณ , ์ปดํฌ๋ํธ๊ฐ ํ์ํ ๊ณณ์์ index.ts ํ๋๋ง import ํ์ฌ ํ์ํ ์ปดํฌ๋ํธ๋ฅผ ๋ถ๋ฌ์ ์ฌ์ฉํ๋ ํจํด์ด๋ค.
๋น์ฐํ ์ด์ ๊ฐ์ ํจํด์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค. ์ฌ์ฉํ์ง ์๋ ์ปดํฌ๋ํธ๋ ํจ๊ป ๋ถ๋ฌ์ค๊ธฐ ๋๋ฌธ์ด๋ค. ๊ทธ๋ ๊ฒ ๋๋ค๋ฉด ๊ฒฐ๊ณผ์ ์ผ๋ก bundle.js๋ก ํฌํจ๋๋ ๋ฐฐํฌ ํ์ผ์ ์ฉ๋์ด ์ปค์ง๊ณ ์ด๋ ํ๋ฉด ๋ก๋ฉ์ด ์ค๋ ๊ฑธ๋ฆฌ๋ ์ฑ๋ฅ ๋ฌธ์ ๋ก ์ด์ด์ง๋ค. ์ด๋ฅผ Tree Shaking ์ด์๋ผ๊ณ ํ๋ค.
ํ์ง๋ง ๋์ ์ฝ๋์์ ์ด์ ๊ฐ์ ํจํด์ ์ฐพ์ ์ ์๋ค๊ณ ์๊ฐํ๋ค. ๋น์ทํ ๊ฒ์ด ์๋ค๊ณ ํ๋ฉด ์คํ์ผ ์ปดํฌ๋ํธ์ธ๋ฐ Barrel Pattern๊ณผ ๋ค๋ฅธ๋ค๊ณ ์๊ฐํ๋ ๊ฒ์ ๋ชจ๋ ์คํ์ผ ์ปดํฌ๋ํธ๋ฅผ ๋ญ๋น ์์ด ์ฌ์ฉํ๊ณ ์๋ค๋ ๊ฒ์ด๋ค. ์ฆ, ํ์ ์๋ ์คํ์ผ ์ปดํฌ๋ํธ๋ฅผ ๊ฐ์ ธ์ค์ง ์๊ณ ์๋ค.
Barrel Pattern. ์์ํ ํจํด์ด๊ณ ๋ค๋ฅธ ํฌ๋ฃจ๋ค์๊ฒ ๋ฌผ์ด๋ด๋ ์ฒ์ ๋ค์ด๋ดค๋ค๋ ํฌ๋ฃจ๋ค์ด ๋๋ถ๋ถ์ด์๋ค. ์์ผ๋ก ๋ค์ํ ์ฝ๋์ ๊ตฌ์กฐ๋ฅผ ๋ณด๊ฒ ๋ ํ ๋ฐ, ๋ณด๊ฒ ๋๋ค๋ฉด Tree Shaking ์ด์๋ฅผ ํ ๋ฒ ์ธ๊ธํด ๋ณผ ๋งํ๋ค. ๋ฌผ๋ก ๋ ์ฌ์ฉํ์ง ์์ ๊ฒ์ด๋ค.
๐ ์ํ ์
1. ๋ฆฌ๋ทฐ ๋ฐ์ ๋ด์ฉ์ ๊ผผ๊ผผํ ์ดํด๋ณด๊ณ ์ ์ฉํ ์ ์๋ ๋ถ๋ถ์ ์ต๋ํ ์ ์ฉํ์๋ค.
2. ๋ฐฐํฌ ๊ณผ์ ์์ ์ด๋ ค์์ด ์์์ง๋ง ์ ํ ์๊ฐ ๋ด์ ์ ํด๊ฒฐํ์๋ค.
๐ ์์ฌ์ด ์
1. ํ๊ณ ๋ฅผ ๋๋ฌด ๋ฆ๊ฒ ํ์๋ค.
2. ์์ง ์ฝ๋ ๋ ๋ฒจ์์ ๊ณ ์ณ์ผ ํ ์๋ชป๋ ์ต๊ด์ด ๋ณด์ธ๋ค.
๐ ์์ผ๋ก์ ๊ฐ์ค
1. ๋ค์ด๋ฐ์ ๊ณ์ ๊ฐ์ ธ๊ฐ์ผ ํ ๊ณ ๋ฏผ๊ฑฐ๋ฆฌ์ด์ง๋ง ์ฝ๋ ๋ ๋ฒจ์์ ์ต์ ์ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋๋ก ํ์.
2. ๊ธ์ฐ๋ ๊ฒ์ ๋ฏธ๋ฃจ์ง ๋ง์..
'๐ ์ฐ์ํํ ํฌ์ฝ์ค > Level2' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ ๋ฒจ2 ์ฅ๋ฐ๊ตฌ๋ ํ์ - Step1 (0) | 2023.06.20 |
---|---|
๋ ๋ฒจ2 ์ฅ๋ฐ๊ตฌ๋ - Step2 (0) | 2023.06.06 |
๋ ๋ฒจ2 ํ์ด๋จผ์ธ - Step3 (0) | 2023.05.15 |
๋ ๋ฒจ2 ํ์ด๋จผ์ธ - Step2 (1) | 2023.05.09 |
๋ ๋ฒจ2 ํ์ด๋จผ์ธ - Step1 (4) | 2023.04.24 |