๋ฅ๋
[React] ์ฅ๋ฐ๊ตฌ๋ ๊ตฌํ (ํ์, ๋นํ์) ๋ณธ๋ฌธ
๐ ์ฅ๋ฐ๊ตฌ๋ ๊ธฐ๋ฅ
โ 1. ์ํ ์์ธ ํ์ด์ง → ์ฅ๋ฐ๊ตฌ๋ ์ถ๊ฐ
- ์ต์ ์ ํ ํ์ (์: ์ฌ์ด์ฆ, ์์ ๋ฑ)
- ์๋ ์ง์ ๊ฐ๋ฅ
- ๋ก๊ทธ์ธ ์ฌ๋ถ์ ๋ฐ๋ผ ์ฒ๋ฆฌ ๋ฐฉ์ ๋ถ๊ธฐ:
- ํ์: ์๋ฒ API ํธ์ถ (addToCart)
- ๋นํ์: ๋ก์ปฌ์คํ ๋ฆฌ์ง ์ ์ฅ (addToGuestCart)
- ์ค๋ณต ์ต์
์ผ ๊ฒฝ์ฐ:
- ๋์ผ ์ต์ ์ํ์ด ์ด๋ฏธ ๋ด๊ฒจ ์์ผ๋ฉด → ์๋๋ง ์ฆ๊ฐ
โ 2. ์ฅ๋ฐ๊ตฌ๋ ๋ชฉ๋ก ํ์ด์ง
- ๋ก๊ทธ์ธ ์ฌ๋ถ์ ๋ฐ๋ผ ๋ค๋ฅธ ๋ฆฌ์คํธ ์ปดํฌ๋ํธ ๋๋๋ง
- ํ์: MemberCartList
- ๋นํ์: GuestCartList
๊ณตํต UI ๊ธฐ๋ฅ
- ์ํ ์ธ๋ค์ผ, ์ด๋ฆ, ์ ํ ์ต์ ํ์
- ๊ฐ ํญ๋ชฉ์ ๋ํด:
- ์๋ ๋ณ๊ฒฝ (์ง์ ์ ๋ ฅ + "๋ณ๊ฒฝ" ๋ฒํผ)
- ์ต์ ๋ณ๊ฒฝ (๋ชจ๋ฌ ๋๋ ํ์ ์ผ๋ก ์ต์ ์ ํ ํ ๋ณ๊ฒฝ)
- ๊ฐ๋ณ ์ญ์ ๋ฒํผ
- ์ ์ฒด/์ ํ ํญ๋ชฉ ์ญ์
- ์ ํ๋ ํญ๋ชฉ ๊ธฐ์ค:
- ์ด ์ํ๊ธ์ก
- ๋ฐฐ์ก๋น ๊ณ์ฐ (์: 7๋ง์ ์ด์ ๋ฌด๋ฃ)
- ๊ฒฐ์ ์์ ๊ธ์ก ํ์
๐ ํ์, ๋นํ์ ๋ถ๊ธฐ ๊ธฐ์ ( ๋ก๊ทธ์ธ ์ฌ๋ถ )
: ์ฅ๋ฐ๊ตฌ๋ ๋ด๊ธฐ ํด๋ฆญ ์
: ์ฅ๋ฐ๊ตฌ๋ ํ์ด์ง
| ์ ์ฅ ์์น | ์ํ ๊ด๋ฆฌ | ์ค๋ช | |
| ํ์ | ์๋ฒ DB | API | addToCart API ํธ์ถ, ์๋ฒ์ ์ ์ฅ |
| ๋นํ์ | localStorage | zustand | ์ํ ๊ด๋ฆฌ + ์์์ฑ ์ ์ฅ ๊ฒธํจ |
๐ ํ์ผ ๊ตฌ์ฑ
*ํ์์ฉ ์ฅ๋ฐ๊ตฌ๋
api - cartApis ( ์ถ๊ฐ, ์กฐํ, ์์ , ์ญ์ api )
page - MemberCartList (UI ์ฅ๋ฐ๊ตฌ๋ ๋ชฉ๋ก-api ํธ์ถ)
*๋นํ์์ฉ ์ฅ๋ฐ๊ตฌ๋
hooks - useAddToCart (ํ์, ๋นํ์ ๋ชจ๋ ์ฒ๋ฆฌ- ๋ก๊ทธ์ธ์ฌ๋ถ ๋ถ๊ธฐ์ฒ๋ฆฌ)
utils - guestCartUtils(๋ก์ปฌ์คํ ๋ฆฌ์ง ์ง์ ์ ๊ทผ)
store - guestCartStore(๋นํ์ ์ฅ๋ฐ๊ตฌ๋ ์ํ ๊ด๋ฆฌ)
page - GuestCartList (UI ์ฅ๋ฐ๊ตฌ๋ ๋ชฉ๋ก-zustand ๊ตฌ๋ )
๐งพ ํ์ ์ฅ๋ฐ๊ตฌ๋ ๋ก์ง ๊ตฌ์ฑ ์ ๋ฆฌ
apis/cartApis.js
- ์ญํ : ํ์ ์ฅ๋ฐ๊ตฌ๋ ๊ด๋ จ API ํจ์ ์งํฉ
- ๊ธฐ๋ฅ:
- addToCart(payload) : ์ํ ์ฅ๋ฐ๊ตฌ๋์ ์ถ๊ฐ
- getCartItems() : ์ฅ๋ฐ๊ตฌ๋ ๋ชฉ๋ก ์กฐํ
- updateCartItem(payload) : ์๋ ๋๋ ์ต์ ๋ณ๊ฒฝ
- deleteCartItems(payload) : ํญ๋ชฉ ๋๋ ์ ์ฒด ์ญ์
๐ธ ์๋ฒ์ ์ง์ ํต์ ํ๋ฉฐ DB์ ๋ฐ์
hooks/useAddToCart.js
- ์ญํ : ๋ก๊ทธ์ธ ์ฌ๋ถ์ ๋ฐ๋ผ ์ฅ๋ฐ๊ตฌ๋ ์ถ๊ฐ ๋ก์ง ๋ถ๊ธฐ ์ฒ๋ฆฌ
- ๊ธฐ๋ฅ:
- ํ์์ธ ๊ฒฝ์ฐ: cartApis.addToCart() ํธ์ถ
- API ์๋ต ์์ด ์คํจ/์ฑ๊ณต ์ฒ๋ฆฌ ์๋ฆผ
pages/MemberCartList.js
- ์ญํ : ํ์ ์ฅ๋ฐ๊ตฌ๋ ๋ชฉ๋ก ํ๋ฉด UI
- ๊ธฐ๋ฅ:
- getCartItems() ํธ์ถํ์ฌ ์ฅ๋ฐ๊ตฌ๋ ๋ฐ์ดํฐ ๋ก๋
- ์๋ ๋ณ๊ฒฝ → updateCartItem() ํธ์ถ
- ํญ๋ชฉ ์ญ์ → deleteCartItems() ํธ์ถ
- ์ต์ ๋ณ๊ฒฝ → updateCartItem() ํธ์ถ
- ์ ํ ์ํ ์ดํฉ, ๋ฐฐ์ก๋น, ๊ฒฐ์ ๊ธ์ก ๊ณ์ฐ ๋ฐ ๋ ๋๋ง
๐ ๋นํ์ ์ฅ๋ฐ๊ตฌ๋ ๋ก์ง ๊ตฌ์ฑ ์ ๋ฆฌ
hooks/useAddToCart.js
- ์ญํ : ์ฅ๋ฐ๊ตฌ๋ ์ถ๊ฐ ๋ก์ง ๊ณตํต ์ฒ๋ฆฌ
- ๊ธฐ๋ฅ:
- ๋ก๊ทธ์ธ ์ฌ๋ถ ํ์ธ (authStore.isLogin)
- ํ์: addToCart API ํธ์ถ
- ๋นํ์:
- ์ํ ์ ๋ณด๋ฅผ ๋ก์ปฌ์คํ ๋ฆฌ์ง์ฉ ํฌ๋งท์ผ๋ก ๊ฐ๊ณต
- guestCartUtils์ addToGuestCart() ํธ์ถ
- guestCartStore์ ์ํ ์ ์ฅ → UI ๋ฐ์
utils/guestCartUtils.js
- ์ญํ : ๋ก์ปฌ์คํ ๋ฆฌ์ง ์ง์ ์ ๊ทผํ๋ ์ ํธ ํจ์ ์งํฉ
- ๊ธฐ๋ฅ:
- getGuestCart() : ๋ก์ปฌ์คํ ๋ฆฌ์ง์์ ์ฅ๋ฐ๊ตฌ๋ ๋ถ๋ฌ์ค๊ธฐ
- setGuestCart(cartItems) : ์ฅ๋ฐ๊ตฌ๋ ์ ์ฒด ์ ์ฅ
- addToGuestCart(item) : ๊ธฐ์กด ์์ดํ ์ด๋ฉด ์๋๋ง ์ฆ๊ฐ
- removeFromGuestCart(productOptionId) : ํด๋น ์ํ ์ ๊ฑฐ
- updateGuestCartItem(productOptionId, updates) : ์๋ ๋๋ ์ต์ ๋ณ๊ฒฝ
- clearGuestCart() : ์ฅ๋ฐ๊ตฌ๋ ์ ์ฒด ๋น์ฐ๊ธฐ
๐ธ store์ ์ง์ ์ ๊ทผํ์ง ์๊ณ , ๋ก์ปฌ์คํ ๋ฆฌ์ง๋ง ์กฐ์
store/guestCartStore.js (Zustand)
- ์ญํ : UI์์ ์ฌ์ฉํ ๋นํ์ ์ฅ๋ฐ๊ตฌ๋ ์ํ ๊ด๋ฆฌ
- ๊ธฐ๋ฅ:
- cartItems : ํ์ฌ ์ฅ๋ฐ๊ตฌ๋ ์ํ
- addItem(item) : zustand์ ๋ฐ์ + ๋ก์ปฌ์คํ ๋ฆฌ์ง์ ์ ์ฅ
- updateQuantity(productOptionId, quantity) : ์๋ ๋ณ๊ฒฝ
- removeItem(productOptionId) : ํญ๋ชฉ ์ญ์
- clearCart() : ์ ์ฒด ๋น์ฐ๊ธฐ
๐ธ ๋ด๋ถ์ ์ผ๋ก guestCartUtils ํจ์๋ค์ ํธ์ถํด์ ๋ก์ปฌ์คํ ๋ฆฌ์ง์ ์ํ ๋๊ธฐํ
pages/GuestCartList.js
- ์ญํ : ๋นํ์ ์ฅ๋ฐ๊ตฌ๋ UI ํ์ด์ง
- ๊ธฐ๋ฅ:
- useGuestCartStore()๋ก zustand ์ํ ๊ตฌ๋
- ์๋ ๋ณ๊ฒฝ, ์ญ์ , ์ต์ ๋ณ๊ฒฝ ์ฒ๋ฆฌ
- ๊ธ์ก ๊ณ์ฐ ๋ฐ ๋ฐฐ์ก๋น ๋ก์ง ์ฒ๋ฆฌ
- ์ํ ๋ชฉ๋ก UI ๋ ๋๋ง
+ ์ถ๊ฐ์ ์ผ๋ก ํด์ผ ํ ์ฅ๋ฐ๊ตฌ๋ ๊ธฐ๋ฅ
- ์ํ ์นด๋ ์์ฒด์์ ๋ฐ๋ก ์ฅ๋ฐ๊ตฌ๋ ๋ด๊ธฐ (์ฅ๋ฐ๊ตฌ๋ ์์ด์ฝ ํด๋ฆญ - ์ํ์ต์ ์ ํ - ๋ด๊ธฐ)
- ์ต์ ๋ณ๊ฒฝ์์ ์ถ๊ฐ ๋ฒํผ ๋ก์ง ๊ตฌํ
- ๋นํ์์ผ ๋ ์ฅ๋ฐ๊ตฌ๋ ์ ๋ณด๋ฅผ ๋ก๊ทธ์ธ, ํ์๊ฐ์ ์ ๋ง์ด๊ทธ๋ ์ด์

'React' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [React] Custom Hook ๋ง๋ค๊ธฐ (0) | 2025.02.05 |
|---|---|
| [React] react-datepicker ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ ์ฉ (0) | 2025.01.13 |
| [React] react-quil ์ด๋ฏธ์ง s3๋ก ์ฒ๋ฆฌํ๊ธฐ (2) (0) | 2024.11.08 |
| [React] S3์ผ๋ก ์ด๋ฏธ์ง ์ฒ๋ฆฌํ๊ธฐ(1) (3) | 2024.11.05 |
| [React] ํ์๊ฐ์ ๊ตฌํ ( stepper, ์ฝ๊ด๋์, ์ ํจ์ฑ ๊ฒ์ฌ ) (1) | 2024.10.28 |