Notice
Recent Posts
Recent Comments
Link
ยซ   2026/10   ยป
์ผ ์›” ํ™” ์ˆ˜ ๋ชฉ ๊ธˆ ํ† 
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Tags more
Archives
Today
Total
๊ด€๋ฆฌ ๋ฉ”๋‰ด

๋ƒฅ๋ƒ 

[React] ์žฅ๋ฐ”๊ตฌ๋‹ˆ ๊ตฌํ˜„ (ํšŒ์›, ๋น„ํšŒ์›) ๋ณธ๋ฌธ

React

[React] ์žฅ๋ฐ”๊ตฌ๋‹ˆ ๊ตฌํ˜„ (ํšŒ์›, ๋น„ํšŒ์›)

sueeee-e 2025. 5. 30. 14:06

๐Ÿ“– ์žฅ๋ฐ”๊ตฌ๋‹ˆ ๊ธฐ๋Šฅ

 

โœ… 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 ๋ Œ๋”๋ง

 

+ ์ถ”๊ฐ€์ ์œผ๋กœ ํ•ด์•ผ ํ•  ์žฅ๋ฐ”๊ตฌ๋‹ˆ ๊ธฐ๋Šฅ 

- ์ƒํ’ˆ ์นด๋“œ ์ž์ฒด์—์„œ ๋ฐ”๋กœ ์žฅ๋ฐ”๊ตฌ๋‹ˆ ๋‹ด๊ธฐ (์žฅ๋ฐ”๊ตฌ๋‹ˆ ์•„์ด์ฝ˜ ํด๋ฆญ - ์ƒํ’ˆ์˜ต์…˜ ์„ ํƒ - ๋‹ด๊ธฐ)

- ์˜ต์…˜ ๋ณ€๊ฒฝ์—์„œ ์ถ”๊ฐ€ ๋ฒ„ํŠผ ๋กœ์ง ๊ตฌํ˜„

- ๋น„ํšŒ์›์ผ ๋•Œ ์žฅ๋ฐ”๊ตฌ๋‹ˆ ์ •๋ณด๋ฅผ ๋กœ๊ทธ์ธ, ํšŒ์›๊ฐ€์ž… ์‹œ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜