๐Ÿ† ํ–ฅ์ˆ˜ ํŒ๋งค e-์ปค๋จธ์Šค

PERMEATE

์„œ๋น„์Šค ๋งํฌ : https://www.permeate.store

โšก ํ”„๋กœ์ ํŠธ ์†Œ๊ฐœ

  • โ€˜ํ–ฅ๊ธฐโ€™ ์™€ ๊ด€๋ จํ•œ ์ œํ’ˆ์„ ํŒŒ๋Š” ๊ณณ์€ ๋งŽ์ง€๋งŒ, ํŒ๋งค ์‚ฌ์ดํŠธ๋“ค์ด ๋ถ„์‚ฐ๋˜์–ด ์žˆ์–ด ๊ตฌ๋งค์ž์˜ ์ž…์žฅ์—์„œ๋Š” ๊ฒ€์ฆ๋œ ์‚ฌ์ดํŠธ๋ฅผ ์ฐพ๊ธฐ ์‰ฝ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ์ด์— ํŠน์ • ๋ธŒ๋žœ๋“œ์— ์–ฝ๋งค์ด์ง€ ์•Š๊ณ , ๋‹ค์–‘ํ•œ ๋ธŒ๋žœ๋“œ๋ฅผ ๋ชจ์•„ ํ•˜๋‚˜์˜ ์›น์‚ฌ์ดํŠธ์—์„œ ํŽธ๋ฆฌํ•˜๊ฒŒ ๊ตฌ๋งคํ•  ์ˆ˜ ์žˆ๋Š” e-์ปค๋จธ์Šค ์‚ฌ์ดํŠธ์ž…๋‹ˆ๋‹ค.

๐ŸŽฒ ํŒ€์› ์†Œ๊ฐœ

๋ฆฌ๋”: ์œค๋ฌธ์—ด ํŒ€์›: ๋ฐ•์›๋นˆ ํŒ€์›: ์ด์ˆ˜์ง„ ํŒ€์›: ์ดํ•˜์–€
์œค๋ฌธ์—ด ๋ฐ•์›๋นˆ ์ด์ˆ˜์ง„ ์ดํ•˜์–€
@munyeol-Yoon @harry21-kr @leeejin @hayanLee

๐ŸŒ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ๋ฐ ์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜

  • Front : Next.js, TailwindCSS
  • Database : Supabase
  • ๋ฒ„์ „ ๋ฐ ์ด์Šˆ๊ด€๋ฆฌ : Github,
  • ํ˜‘์—… ํˆด : Slack, ๋…ธ์…˜,
  • ์„œ๋น„์Šค ๋ฐฐํฌ ํ™˜๊ฒฝ : Vercel
  • ๋””์ž์ธ : ํ”ผ๊ทธ๋งˆ ์ดˆ์•ˆ

๐Ÿณ ์‚ฌ์šฉ ๊ธฐ์ˆ 

NPMESLintTypeScriptNext JSTailwindCSSShadcn/UILodashSupabaseFigma

์—ญํ•  ๋ถ„๋‹ด

โžก๏ธ ์œค๋ฌธ์—ด

  • ์นดํ…Œ๊ณ ๋ฆฌ ํŽ˜์ด์ง€
  • ๊ฒ€์ƒ‰ ํŽ˜์ด์ง€
  • ์ƒํ’ˆ ๋ชฉ๋ก ํŽ˜์ด์ง€

โžก๏ธ ๋ฐ•์›๋นˆ

  • ์žฅ๋ฐ”๊ตฌ๋‹ˆ ํŽ˜์ด์ง€
  • ์ฃผ๋ฌธ ํŽ˜์ด์ง€

โžก๏ธ ์ด์ˆ˜์ง„

  • ๋ฉ”์ธ ํŽ˜์ด์ง€
  • ์ƒํ’ˆ ๋””ํ…Œ์ผ ํŽ˜์ด์ง€
  • ๋ฆฌ๋ทฐ ํŽ˜์ด์ง€

โžก๏ธ ์ดํ•˜์–€

  • ๋กœ๊ทธ์ธ(๋กœ์ปฌ,์†Œ์…œ),๋กœ๊ทธ์•„์›ƒ,ํšŒ์›๊ฐ€์ž…
  • ๋งˆ์ดํŽ˜์ด์ง€
  • UI

๊ฐœ๋ฐœ ๊ธฐ๊ฐ„

  • ์ „์ฒด ๊ฐœ๋ฐœ ๊ธฐ๊ฐ„ 2024-07-16~2024-08-21
  • ์•„์ด๋””์–ด / ๊ธฐ์ˆ ์Šคํƒ ์„ ์ • 2024-07-16~2024-07-19
  • ์™€์ด์–ดํ”„๋ ˆ์ž„ / URL ๊ตฌ์กฐ / ์—ญํ•  ๋ถ„๋ฐฐ 2024-07-17~2024-07-21
  • DBํ…Œ์ด๋ธ” ์ƒ์„ฑ ๋ฐ ๋””์ž์ธ, ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ 2024-07-18~2024-08-04
  • MVP ์™„์„ฑ 2024-08-05
  • UT ํ›„ ์ถ”๊ฐ€ ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ ๋ฐ ๊ฐœ์„  2024-08-05~2024-08-16
  • ์ตœ์ข… ๋งˆ๋ฌด๋ฆฌ ~2024-08-21

ํ•ต์‹ฌ ๊ธฐ์ˆ 

  • ์ฃผ๋ฌธ ( PortOne API )

๐Ÿ’ก ํŽ˜์ด์ง€๋ณ„ ๊ธฐ๋Šฅ

๋ฉ”์ธํŽ˜์ด์ง€

  • ํŽ˜์ด์ง€ ์ด๋™ nav
    • ์นดํ…Œ๊ณ ๋ฆฌ, ์žฅ๋ฐ”๊ตฌ๋‹ˆ, ๋งˆ์ดํŽ˜์ด์ง€
    • ํ—ค๋” ํƒญ
    • ๋ฉ”์ธ ์บ๋Ÿฌ์…€ ์•„๋ž˜ ๋ฐฐ๋„ˆ
  • ์บ๋Ÿฌ์…€
    • ๋ฉ”์ธ ํ™”๋ฉด
    • ์ถ”์ฒœ ์ƒํ’ˆ
  • ์ œํ’ˆ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ
    • ์ฃผ๋ฌธ๋Ÿ‰ / ์ตœ์‹  ์ œํ’ˆ / ์ข‹์•„์š” ์ˆœ
  • ํŠน์ • ์ƒํ’ˆ ๋ธŒ๋žœ๋“œ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ
    • ์บ”๋“ค, ๋””ํ“จ์ €, ๋”ฅ๋””ํฌ(๋ธŒ๋žœ๋“œ)
  • ์ œํ’ˆ๋งˆ๋‹ค ์ข‹์•„์š” ๊ธฐ๋Šฅ

์ƒํ’ˆ์ƒ์„ธํŽ˜์ด์ง€

  • ์žฅ๋ฐ”๊ตฌ๋‹ˆ ์ถ”๊ฐ€
  • ํ•ด๋‹น ์นดํ…Œ๊ณ ๋ฆฌ๋กœ ๋ฐ”๋กœ๊ฐ€๊ธฐ
  • ๋ฐ”๋กœ ๊ตฌ๋งคํ•˜๊ธฐ
  • ์นด์นด์˜คํ†ก ๊ณต์œ ํ•˜๊ธฐ
  • ์ข‹์•„์š” ๊ธฐ๋Šฅ (optimisitc)

๋ฆฌ๋ทฐํŽ˜์ด์ง€

  • ์ „์ฒด ํ›„๊ธฐ ์‚ฌ์ง„ 7๊ฐœ๋งŒ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ
  • ์ƒํ’ˆ๋ณ„ ๋ฆฌ๋ทฐ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ
  • ๋ฆฌ๋ทฐ๋ณ„ ํ•„ํ„ฐ๋ง
    • ์ตœ์‹ ์ˆœ / ์˜ค๋žœ๋œ ์ˆœ / ๋ณ„์  ๋†’์€์ˆœ
  • ํŽ˜์ด์ง€๋„ค์ด์…˜ ( prefetching )
  • ์ด๋ฏธ์ง€ ์ „์ฒด ๋ณด๊ธฐ ํด๋ฆญ ์‹œ
    • ๋ทฐ ์ „์ฒด ์‚ฌ์ง„ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ

์ƒํ’ˆ ์ฃผ๋ฌธ/๊ฒฐ์ œํŽ˜์ด์ง€

  • ๋น„๋กœ๊ทธ์ธ ์‹œ ๋กœ์ปฌ ์Šคํ† ๋ฆฌ์ง€๋งŒ ์‚ฌ์šฉ
  • ๋กœ๊ทธ์ธ ์‹œ ๋กœ์ปฌ ์Šคํ† ๋ฆฌ์ง€ +DB ์‚ฌ์šฉ
  • ์ƒ์„ธ ํŽ˜์ด์ง€์—์„œ ์ƒํ’ˆ ์ถ”๊ฐ€ ๊ธฐ๋Šฅ
  • ๊ตฌ๋งคํ•  ์ƒํ’ˆ์˜ ์ƒํƒœ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ
    • ์ƒํ’ˆ ์‚ญ์ œ
    • ์ƒํ’ˆ ์˜ต์…˜ ๋ณ€๊ฒฝ
    • ์ƒํ’ˆ ๊ตฌ๋งค ์—ฌ๋ถ€ ๋ณ€๊ฒฝ
  • ๋ฐฐ์†ก์ง€ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ (๋งˆ์ดํŽ˜์ด์ง€)
  • ๋ฐฐ์†ก ๋ฉ”๋ชจ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ
  • ๊ตฌ๋งคํ•  ์ƒํ’ˆ์˜ ์ •๋ณด ํ™•์ธ ๊ฐ€๋Šฅ
  • ์‚ฌ์šฉํ•  ๋งˆ์ผ๋ฆฌ์ง€ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ
  • ์‚ฌ์šฉํ•  ์ฟ ํฐ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ
  • ๊ฒฐ์ œ ์ˆ˜๋‹จ ์„ ํƒ ๊ฐ€๋Šฅ
    • ์นด์นด์˜คํŽ˜์ด, ํ† ์ŠคํŽ˜์ด
  • ์ตœ์ข… ๊ธˆ์•ก ํ™•์ธ ๊ฐ€๋Šฅ

์ƒํ’ˆ ๊ฒฐ๊ณผ ํ•„ํ„ฐ๋งํŽ˜์ด์ง€

  • ์ƒํ’ˆ ๊ฒฐ๊ณผ์— ๋Œ€ํ•œ ํŽธ์˜์„ฑ์„ ์œ„ํ•ด ํ•„ํ„ฐ๋ง ์ œ๊ณต
    • ๊ฐ€๊ฒฉ๋ณ„

๊ฒ€์ƒ‰ํŽ˜์ด์ง€

  • ์นดํ…Œ๊ณ ๋ฆฌ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ
  • ๋กœ์ปฌ ์Šคํ† ๋ฆฌ์ง€๋ฅผ ํ™œ์šฉํ•œ ์ตœ๊ทผ ๊ฒ€์ƒ‰์–ด ์ถ”๊ฐ€ ๋ฐ ์‚ญ์ œ
  • ๋””๋ฐ”์šด์‹ฑ์„ ํ™œ์šฉํ•œ ์—ฐ๊ด€ ๊ฒ€์ƒ‰์–ด
  • ์—ฐ๊ด€ ์ƒํ’ˆ, ์นดํ…Œ๊ณ ๋ฆฌ, ํ‚ค์›Œ๋“œ ์กฐํšŒ

๋กœ๊ทธ์ธ/ํšŒ์›๊ฐ€์ž…

  • ์ด๋ฉ”์ผ
    • ์ด๋ฉ”์ผ ์ธ์ฆ (OTP)
  • OAuth (์นด์นด์˜ค/๊ตฌ๊ธ€)
  • ํšŒ์›๊ฐ€์ž… ์‹œ, ์œ ์ € ์ถ”๊ฐ€์ •๋ณด ์ž…๋ ฅ ํผ ์ œ๊ณต

๋งˆ์ดํŽ˜์ด์ง€

  • ๋งˆ์ผ๋ฆฌ์ง€ / ์ฟ ํฐ / ํ›„๊ธฐ ํŽ˜์ด์ง€
  • ์ฃผ๋ฌธ ๋‚ด์—ญ / ์ฐœ ํŽ˜์ด์ง€
  • ํšŒ์›์ •๋ณด / ๋ฐฐ์†ก์ง€ ๋ณ€๊ฒฝ ํŽ˜์ด์ง€

ํŠธ๋Ÿฌ๋ธ” ์ŠˆํŒ…

๐Ÿง ๋ฌธ์ œ ์ •์˜
๐ŸŒ ์žฅ๋ฐ”๊ตฌ๋‹ˆ๊ฐ€ ๋Š๋ฆฌ๋‹ค!

ํ”„๋กœ์ ํŠธ ๋‚ด ์žฅ๋ฐ”๊ตฌ๋‹ˆ ๊ธฐ๋Šฅ์— ๋Œ€ํ•ด ๋ถ€์ •์ ์ธ ํ”ผ๋“œ๋ฐฑ ์ค‘ ๊ณตํ†ต๋œ ํ”ผ๋“œ๋ฐฑ์€ ์žฅ๋ฐ”๊ตฌ๋‹ˆ๊ฐ€ ๋Š๋ฆฌ๋‹ค! ๋ผ๋Š” ์˜๊ฒฌ์ด์˜€์Šต๋‹ˆ๋‹ค.
๋‹ค์ˆ˜์˜ ํ”ผ๋“œ๋ฐฑ์„ ๋ฐ›์•˜๊ณ , ๊ฐœ๋ฐœ์ž ๋ณธ์ธ๋„ ๋ฌธ์ œ๋ฅผ ์ธ์‹ํ•˜๊ณ  ์žˆ์Œ์— ํ•ด๋‹น ์ด์Šˆ์— ๋Œ€ํ•ด ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ…์„ ์ž‘์„ฑํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๐Ÿค” ์ •ํ™•ํžˆ ์–ด๋–ค ๋ถ€๋ถ„์ด ๋Š๋ฆด๊นŒ?

1. ์žฅ๋ฐ”๊ตฌ๋‹ˆ์— ์ƒํ’ˆ์„ ์ถ”๊ฐ€ํ•ด๋„ ๋ฐ”๋กœ ์ ์šฉ๋˜์ง€ ์•Š๊ณ  ์งง์€ ๋”œ๋ ˆ์ด ํ›„ ์žฅ๋ฐ”๊ตฌ๋‹ˆ์— ์ƒํ’ˆ์ด ์ถ”๊ฐ€๋œ๋‹ค!
2. ์žฅ๋ฐ”๊ตฌ๋‹ˆ์—์„œ ๊ตฌ๋งคํ•  ์ƒํ’ˆ์˜ ์˜ต์…˜(์ˆ˜๋Ÿ‰, ์‚ฌ์ด์ฆˆ)์„ ๋ณ€๊ฒฝํ•˜๋ฉด ๋ฐ”๋กœ ์ ์šฉ๋˜์ง€ ์•Š๊ณ  ๋”œ๋ ˆ์ด ํ›„ ์ƒํ’ˆ์˜ ์˜ต์…˜์ด ๋ณ€๊ฒฝ๋œ๋‹ค!
3. ์žฅ๋ฐ”๊ตฌ๋‹ˆ ๋‚ด์˜ ์ƒํ’ˆ์„ ์‚ญ์ œํ•  ๋•Œ, ๋ฐ”๋กœ ์ ์šฉ๋˜์ง€ ์•Š๊ณ  ๋”œ๋ ˆ์ด ํ›„ ์ƒํ’ˆ์ด ์‚ญ์ œ๋œ๋‹ค!

๐Ÿค” ๋‹จ์ˆœํžˆ ๋ฐ˜์‘์ด ๋Š๋ฆฐ๊ฒƒ๋งŒ ๋ฌธ์ œ์ผ๊นŒ?

UI๊ฐ€ ์œ ์ €์˜ ์ธํ„ฐ๋ž™์…˜์— ๋”ฐ๋ผ ๋ฐ˜์˜๋˜๋Š”๊ฒŒ ๋Š๋ฆฌ๋‹ค! ๋ผ๋Š” ๋ฌธ์ œ๋งŒ ์กด์žฌํ•œ๋‹ค๋ฉด ๊ทธ๋ ‡๊ฒŒ ์‹ฌ๊ฐํ•œ ์ด์Šˆ๋Š” ์•„๋‹ˆ์ง€๋งŒ,
์‹ค์ œ ์ฃผ๋ฌธ ํŽ˜์ด์ง€์—์„œ ์ฃผ๋ฌธ์„ ํ•˜๋ ค๊ณ  ํ•ด๋„ ์žฅ๋ฐ”๊ตฌ๋‹ˆ์— ์ถ”๊ฐ€ํ•œ ์ƒํ’ˆ์ด ์ ์šฉ๋˜์ง€ ์•Š๋Š” ํ˜„์ƒ๋„ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

์œ ์ €์˜ ์ž…์žฅ์—์„œ๋Š” "์–ด? ๋‚˜๋Š” ์žฅ๋ฐ”๊ตฌ๋‹ˆ์— ๋ถ„๋ช… ์ƒํ’ˆ์„ ์ถ”๊ฐ€ํ–ˆ๊ณ , ์ด ์ƒํ’ˆ์„ ์ฃผ๋ฌธํ•˜๋ ค๊ณ  ํ–ˆ๋Š”๋ฐ ์™œ ๋ฐ˜์˜์ด ์•ˆ๋˜์–ด์žˆ์ง€?" ํ˜น์€
์ƒํ’ˆ ๋‚ด์—ญ์„ ์ •ํ™•ํžˆ ํ™•์ธํ•˜์ง€ ์•Š๋Š” ์œ ์ €์˜ ๊ฒฝ์šฐ์—๋Š” ๋‚ด๊ฐ€ ์„ ํƒํ•œ ์ œํ’ˆ์„ ๊ตฌ๋งคํ•˜์ง€ ๋ชปํ•˜๋Š” ์ตœ์•…์˜ ์ƒํ™ฉ์„ ๋งž์ดํ• ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

**๋”ฐ๋ผ์„œ ๋‹จ์ˆœํžˆ UI๊ฐ€ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๋Š”๋‹ค! ๋ผ๋Š” ์ด์Šˆ๋ณด๋‹ค ๋” ์‹ฌ๊ฐํ•œ, ํ•˜๋‚˜์˜ ๊ฑฐ๋Œ€ํ•œ ๋ฒ„๊ทธ๋ผ๊ณ  ์ธ์ง€ํ•˜๊ณ  ํ•ด๋‹น ๋ฒ„๊ทธ๋ฅผ ์ˆ˜์ •ํ•˜๊ณ ์žํ•ฉ๋‹ˆ๋‹ค.**

โ“ ๋ฌธ์ œ ์›์ธ
๐Ÿ“ก  ํ•ญ์ƒ ์„œ๋ฒ„์™€ ํ†ต์‹ ํ•˜๋Š” ์žฅ๋ฐ”๊ตฌ๋‹ˆ

์ด์Šˆ๋ฅผ ํŒŒ์•…ํ•ด๋ณธ ๊ฒฐ๊ณผ ์›์ธ์€ ๊ต‰์žฅํžˆ ๋‹จ์ˆœํ•˜์˜€์Šต๋‹ˆ๋‹ค.
๋ฐ”๋กœ ์žฅ๋ฐ”๊ตฌ๋‹ˆ์— ์ƒํ’ˆ์„ ๋‹ด๊ฑฐ๋‚˜, ์ˆ˜์ •, ์‚ญ์ œํ•  ๊ฒฝ์šฐ ํ•ญ์ƒ ์„œ๋ฒ„์™€์˜ ํ†ต์‹ ์ด ์ผ์–ด๋‚˜๊ณ  ์žˆ์—ˆ๋‹ค๋Š” ์ ์ด์˜€์ฃ .

ํ•ญ์ƒ ์„œ๋ฒ„์™€์˜ ํ†ต์‹ ์œผ๋กœ ์ธํ•ด UI์— ๋ฐ˜์˜๋˜๋Š” ์†๋„๊ฐ€ ๋Šฆ์–ด์ง€๊ณ ,
์„œ๋ฒ„์™€์˜ ํ†ต์‹ ์ด ์ผ์–ด๋‚˜๊ณ ์žˆ๋Š” ๋„์ค‘ ์ฃผ๋ฌธ์„ ํ•˜๋ ค๊ณ  ํ–ˆ์„๋•Œ,
์ฆ‰, ์„œ๋ฒ„์— ์ƒˆ๋กœ์šด ์ƒํ’ˆ์˜ ์ •๋ณด๋ฅผ ์žฅ๋ฐ”๊ตฌ๋‹ˆ์— ์ถ”๊ฐ€ํ•˜๋ ค๊ณ  ํ•˜๋Š” ๋„์ค‘ ์ฃผ๋ฌธ์„ ํ•˜๋ ค๊ณ  ์ฃผ๋ฌธ ํŽ˜์ด์ง€๋กœ ๋„˜์–ด๊ฐ€๊ฒŒ๋˜๋ฉด
์ฃผ๋ฌธ ํŽ˜์ด์ง€์—์„œ๋Š” ์ตœ์‹  ์žฅ๋ฐ”๊ตฌ๋‹ˆ๋ฅผ ๋ฐ˜์˜ํ•˜์ง€ ๋ชปํ•œ ์ด์ „์˜ ์žฅ๋ฐ”๊ตฌ๋‹ˆ ๋‚ด์—ญ์„ ๋ณด์—ฌ์ฃผ๊ณ , ๊ฒฐ์ œ๊นŒ์ง€ ์ง„ํ–‰ํ•˜๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด์ฃ .

๐Ÿ› ๏ธ ๊ณ ๋ฏผ ๋‚ด์—ญ
1. ์„œ๋ฒ„์™€์˜ ํ†ต์‹ ์ด ์™„๋ฃŒ๋ ๋•Œ๊นŒ์ง€ ์œ ์ €์˜ ํ–‰๋™์„ ์ œํ•œํ•œ๋‹ค.

์„œ๋ฒ„์™€ ํ†ต์‹ ํ•˜๋Š” ์‹œ๊ฐ„๋™์•ˆ UI์—๋Š” ๋กœ๋”ฉ ์Šคํ”ผ๋„ˆ์™€ ๊ฐ™์€ UI๋ฅผ ํ‘œ์‹œํ•ด์ฃผ๊ณ , ์„œ๋ฒ„์™€์˜ ํ†ต์‹ ์ด ์™„๋ฃŒ๋ ๋•Œ๊นŒ์ง€ ์œ ์ €๊ฐ€ ๋‹ค๋ฅธ ํ–‰๋™์„ ํ•˜์ง€ ๋ชปํ•˜๊ฒŒ
ํด๋ผ์ด์–ธํŠธ์—์„œ ํ–‰๋™์„ ์ œํ•œํ•  ์ˆ˜๋„ ์žˆ์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์‹ค์ œ๋กœ ์ด๋Ÿฐ ์†”๋ฃจ์…˜์„ ์‚ฌ์šฉํ•˜๊ณ ์žˆ๋Š” ์ด์ปค๋จธ์Šค ์‚ฌ์ดํŠธ๋Š” ์ฟ ํŒก์ด ์žˆ์Šต๋‹ˆ๋‹ค.
์ฟ ํŒก์€ ์žฅ๋ฐ”๊ตฌ๋‹ˆ์—์„œ ๋ฌด์–ธ๊ฐ€๋ฅผ ์ˆ˜์ •, ์‚ญ์ œํ•  ๋•Œ ๊ตฌ๋งคํ•˜๊ธฐ ๋ฒ„ํŠผ์„ `disabled` ์‹œ์ผœ ์œ ์ €๋กœ๋ถ€ํ„ฐ ํ•˜์—ฌ๊ธˆ ์„œ๋ฒ„์™€์˜ ํ†ต์‹ ์ด ์ข…๋ฃŒ๋ ๋•Œ๊นŒ์ง€
์ฃผ๋ฌธ ํŽ˜์ด์ง€์— ๊ฐ€์ง€ ๋ชปํ•˜๋„๋ก ์ œํ•œํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

2. ๋งค ์ˆ˜์ •๋งˆ๋‹ค ์„œ๋ฒ„์™€ ํ†ต์‹ ํ•˜์ง€ ์•Š๋Š”๋‹ค.

์„œ๋ฒ„์™€ ํ†ต์‹ ํ•˜๋Š” ์‹œ๊ฐ„์ด ๋ฌธ์ œ๋ผ๋ฉด, ์„œ๋ฒ„์™€ ํ†ต์‹ ํ•˜๋Š” ๋ถ€๋ถ„์„ ์—†์• ๋ฒ„๋ฆด์ˆ˜๋„ ์žˆ๊ฒ ๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.
๋ฌผ๋ก  ์•„์˜ˆ ์œ ์ €์˜ ์žฅ๋ฐ”๊ตฌ๋‹ˆ ์ •๋ณด๊ฐ€ DB์— ์ €์žฅ๋˜์ง€ ์•Š๋Š”๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค.

๋จผ์ € ์žฅ๋ฐ”๊ตฌ๋‹ˆ์—์„œ ์ผ์–ด๋‚˜๋Š” ์ถ”๊ฐ€/์ˆ˜์ •/์‚ญ์ œ์™€ ๊ด€๋ จํ•œ ๋ถ€๋ถ„์€ ๋กœ์ปฌ ์Šคํ† ๋ฆฌ์ง€์— ์ •๋ณด๋“ค์„ ์ €์žฅํ•œ ๋’ค,
์ €์žฅ๋œ ์ •๋ณด๋“ค์„ ์žฅ๋ฐ”๊ตฌ๋‹ˆ๊ฐ€ ์–ธ๋งˆ์šดํŠธ ๋  ๋•Œ, ์ฆ‰ ์‚ฌ์ดํŠธ์˜ ์ด๋™์ด๋‚˜ ์œ ์ €์˜ ์•ก์…˜์ด ์ผ์–ด๋‚ฌ์„ ๋•Œ DB์— ์ €์žฅ์„ ํ•ด์ฃผ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ์œ„ ๋ฐฉ๋ฒ•๋„ ๊ฒฐ๊ตญ์—๋Š” ์„œ๋ฒ„์™€ ํ†ต์‹ ํ•˜๋Š” ์‹œ๊ฐ„์ด ํ•„์—ฐ์ ์œผ๋กœ ๋ฐœ์ƒํ•˜๊ฒŒ ๋˜๊ณ , ๋กœ๋”ฉ ์ค‘์ด๋ผ๋Š” UI๋Š” ๊ณตํ†ต์ ์œผ๋กœ ํ‘œํ˜„ํ•ด์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ ์œ„ ๋ฐฉ๋ฒ•์œผ๋กœ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜์˜€์„๋–„์˜ ๋ฐœ์ƒํ•  ์ด์Šˆ๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์ข…๋ฃŒํ•˜์˜€์„๋•Œ์—๋Š” React๊ฐ€ ์–ธ๋งˆ์šดํŠธ๋ฅผ ๊ฐ์ง€ํ•˜์ง€ ๋ชปํ•˜์—ฌ
์ฐฝ์„ ๊ฐ•์ œ์ข…๋ฃŒํ•˜์˜€์„๋•Œ๋Š” ์ €์žฅ์ด ๋˜์ง€ ์•Š๋Š”๋‹ค๋Š” ์ ์ž…๋‹ˆ๋‹ค.

โ—๏ธ ๋ฌธ์ œ ํ•ด๊ฒฐ

๊ธฐ์กด ๋กœ์ง
๋กœ๊ทธ์ธ ์ƒํƒœ
`์žฅ๋ฐ”๊ตฌ๋‹ˆ ํŽ˜์ด์ง€ ๋งˆ์šดํŠธ`
โ†’ `ํ•ด๋‹น ์œ ์ €์˜ ๊ธฐ์กด ์žฅ๋ฐ”๊ตฌ๋‹ˆ๋ฅผ ๊ฐ€์ ธ์™€ setState()` 
โ†’ `๋งค ์ˆ˜์ •์ด ์ผ์–ด๋‚ ๋•Œ๋งˆ๋‹ค DB์— ์žฅ๋ฐ”๊ตฌ๋‹ˆ ์ •๋ณด ์ €์žฅ` 

๋น„๋กœ๊ทธ์ธ ์ƒํƒœ
`์žฅ๋ฐ”๊ตฌ๋‹ˆ ์‚ฌ์šฉ ๋ถˆ๊ฐ€๋Šฅ`

๋ณ€๊ฒฝ๋œ ๋กœ์ง
๋กœ๊ทธ์ธ ์ƒํƒœ

`์œ ์ € ๋กœ๊ทธ์ธ ์‹œ ํ•ด๋‹น ์œ ์ €์˜ ๊ธฐ์กด ์žฅ๋ฐ”๊ตฌ๋‹ˆ๋ฅผ ๊ฐ€์ ธ์™€ ๋กœ์ปฌ์Šคํ† ๋ฆฌ์ง€์— ์ €์žฅ` 
`์žฅ๋ฐ”๊ตฌ๋‹ˆ ํŽ˜์ด์ง€ ๋งˆ์šดํŠธ`
โ†’ `๋กœ์ปฌ์Šคํ† ๋ฆฌ์ง€์— ์žˆ๋Š” ์žฅ๋ฐ”๊ตฌ๋‹ˆ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์™€ setState()`
โ†’ `๋งค ์ˆ˜์ •์ด ์ผ์–ด๋‚ ๋•Œ๋งˆ๋‹ค ๋กœ์ปฌ์— ์žฅ๋ฐ”๊ตฌ๋‹ˆ ์ •๋ณด ์ €์žฅ`
โ†’ `์žฅ๋ฐ”๊ตฌ๋‹ˆ ํŽ˜์ด์ง€ ์–ธ๋งˆ์šดํŠธ ์‹œ DB์— ํ•ด๋‹น ์œ ์ € ์žฅ๋ฐ”๊ตฌ๋‹ˆ ์ •๋ณด ์ €์žฅ` 

๋น„๋กœ๊ทธ์ธ ์ƒํƒœ
`์žฅ๋ฐ”๊ตฌ๋‹ˆ ์ •๋ณด๋ฅผ ๋กœ์ปฌ์Šคํ† ๋ฆฌ์ง€์— ์ €์žฅ` 
๋งŒ์•ฝ ์œ ์ €๊ฐ€ `๋กœ๊ทธ์ธ` ์‹œ,
`๋กœ์ปฌ์Šคํ† ๋ฆฌ์ง€์— ์žˆ๋Š” ์ƒํ’ˆ` + `DB์— ์žˆ๋˜ ์œ ์ €์˜ ๊ธฐ์กด ์žฅ๋ฐ”๊ตฌ๋‹ˆ ์ •๋ณด`
๋กœ์ปฌ์Šคํ† ๋ฆฌ์ง€๋ฅผ ์ ๊ทน์ ์œผ๋กœ ํ™œ์šฉํ•˜๋ฉด์„œ 

1. ๊ธฐ์กด ์žฅ๋ฐ”๊ตฌ๋‹ˆ๊ฐ€ ๋Š๋ฆฌ๋‹ค๋Š” ํ”ผ๋“œ๋ฐฑ์„ ๊ฐœ์„ 
2. ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์ˆ˜์ •, ์‚ญ์ œํ•œ ์ œํ’ˆ์ด ์ฃผ๋ฌธ ์‹œ ํฌํ•จ๋˜๋Š” ์ด์Šˆ ํ•ด๊ฒฐ
3. ๋กœ๊ทธ์ธ์„ ํ•˜์ง€์•Š์€ ์œ ์ €๋„ ์žฅ๋ฐ”๊ตฌ๋‹ˆ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ฐœ์„ 

์ด ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
์‚ฌ์šฉ์ž ์ธ์ฆ ์ƒํƒœ๋ฅผ ํด๋ผ์ด์–ธํŠธ ์ƒํƒœ๋กœ ๊ด€๋ฆฌ
๋ฌธ์ œ
context๋ฅผ ์ด์šฉํ•œ ์ „์—ญ ์ƒํƒœ ๊ด€๋ฆฌ ๋ฐฉ์‹์€ ํด๋ผ์ด์–ธํŠธ ์‚ฌ์ด๋“œ์—์„œ ์ง์ ‘ ์‚ฌ์šฉ์ž ์ธ์ฆ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์™€ ์ƒํƒœ๋กœ ๊ด€๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ Œ๋”๋ง๋  ๋•Œ๋งˆ๋‹ค ์‚ฌ์šฉ์ž ์ธ์ฆ ์ •๋ณด๊ฐ€ ์กด์žฌํ•˜๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๋กœ์ง์ด ํ•„์š”
=> ์ดˆ๊ธฐ ์‚ฌ์šฉ์ž ๋ฐ์ดํ„ฐ(undefined)๊ฐ€ ๋ถˆํ™•์‹คํ•˜๊ณ , ์ด๋กœ ์ธํ•ด UI๊ฐ€ ๊นœ๋นก๊ฑฐ๋ฆฌ๊ฑฐ๋‚˜ ์ถ”๊ฐ€ ๋กœ๋”ฉ ์ƒํƒœ ๊ด€๋ฆฌ๊ฐ€ ํ•„์š”

TanStack Query๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„œ๋ฒ„ ์ƒํƒœ ๊ด€๋ฆฌ๋ฅผ ๋„์ž…
์ธ์ฆ ์ƒํƒœ์™€ ๊ฐ™์€ ์„œ๋ฒ„ ๋ฐ์ดํ„ฐ๋ฅผ ์ผ๊ด€๋˜๊ฒŒ ๊ด€๋ฆฌํ•˜๋Š”๋ฐ ์ ํ•ฉํ•˜๋‹ค๊ณ  ํŒ๋‹จ

๋ฐ์ดํ„ฐ๊ฐ€ ์ž๋™์œผ๋กœ ์บ์‹ฑ๋˜๊ณ , ์„œ๋ฒ„์™€ ๋™๊ธฐํ™”๋˜๋ฉฐ 
์ปดํฌ๋„ŒํŠธ๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์ค€๋น„๋œ ํ›„ ๋ Œ๋”๋ง์„ ์ง„ํ–‰ํ•˜์—ฌ ๋ถˆํ•„์š”ํ•œ null ํ™•์ธ ๋กœ์ง ์ œ๊ฑฐ

useQuery๋ฅผ ํ†ตํ•ด ๋กœ๋”ฉ ์ƒํƒœ์™€ ๋ฐ์ดํ„ฐ๋ฅผ ๋ถ„๋ฆฌํ•˜์—ฌ, ์ดˆ๊ธฐ ๋ Œ๋”๋ง ์‹œ ๋ฐ์ดํ„ฐ ๋ถˆํ™•์‹ค์„ฑ์œผ๋กœ ์ธํ•œ ๋ถˆํ•„์š”ํ•œ ๋กœ์ง ์ œ๊ฑฐ

์‚ฌ์šฉ์ž ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๋กœ์ง์„ useAuthQuery๋กœ ๋ถ„๋ฆฌํ•˜์—ฌ ์žฌ์‚ฌ์šฉ์„ฑ์„ ๋†’์ด๊ณ , ์—ฌ๋Ÿฌ ์ปดํฌ๋„ŒํŠธ์—์„œ ์ผ๊ด€๋œ ๋ฐฉ์‹์œผ๋กœ ์‚ฌ์šฉ์ž ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌ

๊ฐœ์„  ๋ชฉํ‘œ

์ถ”ํ›„ ๊ฐœ๋ฐœ

  • ๋ฆฌํŽ™ํ† ๋ง
  • ํŒ๋งค์ž,๋ธŒ๋žœ๋“œ, ์ด๋ฒคํŠธ ํŽ˜์ด์ง€ ๊ตฌํ˜„
  • ์ฃผ๋ฌธ ์ทจ์†Œ/ํ™˜๋ถˆ
  • ์•„์ด๋””/๋น„๋ฐ€๋ฒˆํ˜ธ ์ฐพ๊ธฐ
  • ๊ณ ๊ฐ์„ผํ„ฐ

๊ธฐ์ˆ ์ ์ธ ๋„์ „ ๊ณ„ํš

  • ํŽ˜์ด์ง€ ์„ฑ๋Šฅ ์ตœ์ ํ™”
  • ๋ฐ์ดํ„ฐ ๋ณด์•ˆ ๊ฐ•ํ™”
  • 1:1 ๋ฌธ์˜ ์ฑ—๋ด‡ ๋„์ž…

ํ”„๋กœ์ ํŠธ ํ›„๊ธฐ

์œค๋ฌธ์—ด

๋””์ž์ด๋„ˆ์™€ ํ•จ๊ป˜ ํ˜‘์—…ํ•˜๋Š” ๊ฒฝํ—˜์ด ์ข‹์€ ๊ฒฝํ—˜์ด์—ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋งŒ ์ผ์ •์ ์ธ ๋ฌธ์ œ์™€ ๊ณ„์† ๋ถ€๋”ชํ˜”๊ณ  ์ด์— ๊ธ‰ํ•˜๊ฒŒ ๊ฒฐ๊ณผ๋ฅผ ๋งŒ๋“ค์–ด ๋‚ธ ๋ถ€๋ถ„ ๋•Œ๋ฌธ์— ๊ฐœ์„ ํ•ด์•ผ ํ•  ์ ์ด ๋ณด์—ฌ ์•„์‰ฝ์Šต๋‹ˆ๋‹ค.

๋ฐ•์›๋นˆ

์งง์€ ์‹œ๊ฐ„ ์•ˆ์— ์–ด๋Š์ •๋„ ์™„์„ฑ๋„์žˆ๋Š” ๊ฒฐ๊ณผ๋ฌผ์„ ๋งŒ๋“ค์–ด ๋งŒ์กฑํ•˜์ง€๋งŒ, ์‹œ๊ฐ„ ๊ด€๊ณ„์ƒ ๊นŠ๊ฒŒ ๊ณ ๋ฏผํ•œ ํ›„ ์งœ์•ผํ•˜๋Š” ๋กœ์ง๋„ ์งง์€ ์‹œ๊ฐ„ ๋‚ด์— ๋งŒ๋“ค์–ด์•ผ ํ•ด ์™„์„ฑ๋„๊ฐ€ ๋–จ์–ด์ง€๋Š” ์ ์ด ์•„์‰ฝ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค!

์ด์ˆ˜์ง„

์งง์€ ์‹œ๊ฐ„๋‚ด์— ๊ธฐํš๊ณผ ์‡ผํ•‘๋ชฐ์„ ๋งŒ๋“ค๊ณ  ์œ ์ €ํ”ผ๋“œ๋ฐฑ์„ ๋ฐ›์•„ ๋กœ์ง ๊ฐœ์„ ์„ ํ•ด๋ดค๋‹ค๋Š” ์ ์ด ์„ฑ์žฅ๊ธฐํšŒ์˜€๊ณ  ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋กœ์ง์— ๋Œ€ํ•ด์„œ ์กฐ๊ธˆ ๋” ์ƒ๊ฐ์„ ๋ชปํ•œ ๊ฒƒ์ด ์•„์‰ฌ์› ์Šต๋‹ˆ๋‹ค

์ดํ•˜์–€

๊ธฐํš๊ณผ ๊ฐœ๋ฐœ ์ด์™ธ์—๋„ UT, ๋””์ž์ด๋„ˆ์™€์˜ ํ˜‘์—… ๊ฒฝํ—˜์„ ํ•  ์ˆ˜ ์žˆ์–ด์„œ ์ข‹์•˜์Œ. ์šฐ์„ ์ˆœ์œ„, ์•„์‰ฌ์šด ์‹œ๊ฐ„๊ด€๋ฆฌ๋กœ ๋ฆฌํŒฉํ† ๋ง์„ ๋น„๋กฏํ•œ ์ž˜ ์งœ์—ฌ์ง„ ์ฝ”๋“œ๋ฅผ ๊ณ ๋ฏผํ•˜๋ฉฐ, ๋งŒ๋“ค ์‹œ๊ฐ„์ด ๋ถ€์กฑํ•ด ์•„์‰ฌ์› ์Œ

ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ

 ๐Ÿ“ฆsrc
 โ”ฃ ๐Ÿ“‚api
 โ”ƒ โ”ฃ ๐Ÿ“œaddresses.ts
 โ”ƒ โ”ฃ ๐Ÿ“œauth.ts
 โ”ƒ โ”ฃ ๐Ÿ“œbrand.ts
 โ”ƒ โ”ฃ ๐Ÿ“œcart.ts
 โ”ƒ โ”ฃ ๐Ÿ“œcategories.ts
 โ”ƒ โ”ฃ ๐Ÿ“œcoupon.ts
 โ”ƒ โ”ฃ ๐Ÿ“œdeliveries.ts
 โ”ƒ โ”ฃ ๐Ÿ“œmyPage.ts
 โ”ƒ โ”ฃ ๐Ÿ“œorder.ts
 โ”ƒ โ”ฃ ๐Ÿ“œorderInfo.ts
 โ”ƒ โ”ฃ ๐Ÿ“œpayment.ts
 โ”ƒ โ”ฃ ๐Ÿ“œproduct.ts
 โ”ƒ โ”ฃ ๐Ÿ“œreview.ts
 โ”ƒ โ”ฃ ๐Ÿ“œuser.ts
 โ”ƒ โ”— ๐Ÿ“œwish.ts
 โ”ฃ ๐Ÿ“‚app
 โ”ƒ โ”ฃ ๐Ÿ“‚(provider)
 โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“‚(root)
 โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“‚(NavCategories)
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“‚brands
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”— ๐Ÿ“œpage.tsx
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“‚events
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”— ๐Ÿ“œpage.tsx
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“‚support
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”— ๐Ÿ“œpage.tsx
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”— ๐Ÿ“œlayout.tsx
 โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“‚auth
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“‚log-in
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”— ๐Ÿ“œpage.tsx
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“‚sign-up
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“‚account-form
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”— ๐Ÿ“œpage.tsx
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“‚agreement
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”— ๐Ÿ“œpage.tsx
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“‚complete
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”— ๐Ÿ“œpage.tsx
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“‚email-confirm
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”— ๐Ÿ“œpage.tsx
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”— ๐Ÿ“œpage.tsx
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”— ๐Ÿ“œlayout.tsx
 โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“‚cart
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“‚_components
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“œCartAccordion.tsx
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“œCartEmpty.tsx
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“œCartItem.tsx
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“œCartList.tsx
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“œCartSelector.tsx
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”— ๐Ÿ“œindex.ts
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”— ๐Ÿ“œpage.tsx
 โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“‚category
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“‚search
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“‚result
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“‚_components
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“œFilterBenefits.tsx
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“œFilterButton.tsx
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“œFilterLabel.tsx
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“œFilterNavMenu.tsx
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“œFilterPricePoint.tsx
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“œFilterPriceType.tsx
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“œindex.ts
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”— ๐Ÿ“œResultFilter.tsx
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“œlayout.tsx
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”— ๐Ÿ“œpage.tsx
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“‚_components
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“œindex.ts
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“œRecentSearch.tsx
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“œSearchInput.tsx
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”— ๐Ÿ“œSearchNotFound.tsx
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”— ๐Ÿ“œpage.tsx
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”— ๐Ÿ“œpage.tsx
 โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“‚mypage
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“‚address
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“‚edit
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”— ๐Ÿ“œpage.tsx
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”— ๐Ÿ“œpage.tsx
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“‚coupon
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”— ๐Ÿ“œpage.tsx
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“‚edit
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“‚info
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”— ๐Ÿ“œpage.tsx
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“‚password
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”— ๐Ÿ“œpage.tsx
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”— ๐Ÿ“œpage.tsx
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“‚mileage
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“‚_components
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”— ๐Ÿ“‚MilieageCard
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“œindex.ts
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”— ๐Ÿ“œMileageCard.tsx
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”— ๐Ÿ“œpage.tsx
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“‚orders
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“‚_components
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“‚OrderCard
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“œindex.ts
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”— ๐Ÿ“œOrderCard.tsx
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“‚OrderItem
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“œindex.ts
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”— ๐Ÿ“œOrderItem.tsx
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”— ๐Ÿ“‚ReviewItem
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“œindex.ts
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”— ๐Ÿ“œReviewItem.tsx
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”— ๐Ÿ“œpage.tsx
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“‚review
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”— ๐Ÿ“œpage.tsx
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“‚wish
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”— ๐Ÿ“œpage.tsx
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“‚_components
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“‚CouponCard
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“œCouponCard.tsx
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”— ๐Ÿ“œindex.ts
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“‚InfoCard
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“œindex.ts
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”— ๐Ÿ“œInfoCard.tsx
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“‚LinkCard
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“œindex.ts
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”— ๐Ÿ“œLinkCard.tsx
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”— ๐Ÿ“‚Profile
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“œindex.ts
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”— ๐Ÿ“œProfile.tsx
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”— ๐Ÿ“œpage.tsx
 โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“‚order
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“‚_components
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“œindex.ts
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“œOrderCompleted.tsx
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“œOrderError.tsx
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”— ๐Ÿ“œOrderLoading.tsx
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”— ๐Ÿ“œpage.tsx
 โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“‚products
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“‚category
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”— ๐Ÿ“œpage.tsx
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“‚[productId]
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“‚qna
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”— ๐Ÿ“œpage.tsx
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“‚review
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“‚images
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“œlayout.tsx
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”— ๐Ÿ“œpage.tsx
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”— ๐Ÿ“œpage.tsx
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”— ๐Ÿ“œpage.tsx
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”— ๐Ÿ“‚_components
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“‚Coupon
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“œCoupon.tsx
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”— ๐Ÿ“œindex.ts
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“‚DeliveryOptions
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“œDeliveryOptions.tsx
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”— ๐Ÿ“œindex.ts
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“‚DetailButtons
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“œindex.ts
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“œPaying.tsx
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“œShare.tsx
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”— ๐Ÿ“œWish.tsx
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”— ๐Ÿ“‚DetailTabs
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“œDetail.tsx
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“œDetailTabs.tsx
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“œindex.ts
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“œQnA.tsx
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”— ๐Ÿ“œReview.tsx
 โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“‚_components
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“‚Footer
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“‚_components
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“œCallInfo.tsx
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”— ๐Ÿ“œSNSInfo.tsx
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“œFooter.tsx
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”— ๐Ÿ“œindex.ts
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”— ๐Ÿ“‚Header
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“‚_components
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“œHeaderNav.tsx
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“œNavCategories.tsx
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”— ๐Ÿ“œTopBanner.tsx
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“œHeader.tsx
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“œindex.ts
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”— ๐Ÿ“œNavbar.tsx
 โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“œlayout.tsx
 โ”ƒ โ”ƒ โ”ƒ โ”— ๐Ÿ“œpage.tsx
 โ”ƒ โ”ƒ โ”— ๐Ÿ“œlayout.tsx
 โ”ƒ โ”ฃ ๐Ÿ“‚api
 โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“‚auth
 โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“‚callback
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”— ๐Ÿ“œroute.ts
 โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“‚log-in
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”— ๐Ÿ“œroute.ts
 โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“‚log-out
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”— ๐Ÿ“œroute.ts
 โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“‚otp
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“‚sign-up
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”— ๐Ÿ“œroute.ts
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”— ๐Ÿ“œroute.ts
 โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“‚provider
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”— ๐Ÿ“œroute.ts
 โ”ƒ โ”ƒ โ”ƒ โ”— ๐Ÿ“‚user
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”— ๐Ÿ“œroute.ts
 โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“‚brands
 โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“‚brand
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”— ๐Ÿ“œroute.ts
 โ”ƒ โ”ƒ โ”ƒ โ”— ๐Ÿ“œroute.ts
 โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“‚carts
 โ”ƒ โ”ƒ โ”ƒ โ”— ๐Ÿ“‚[id]
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”— ๐Ÿ“œroute.ts
 โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“‚categories
 โ”ƒ โ”ƒ โ”ƒ โ”— ๐Ÿ“‚category
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”— ๐Ÿ“œroute.ts
 โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“‚category
 โ”ƒ โ”ƒ โ”ƒ โ”— ๐Ÿ“œroute.ts
 โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“‚my
 โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“‚address
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“‚[id]
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”— ๐Ÿ“œroute.ts
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”— ๐Ÿ“œroute.ts
 โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“‚coupon
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”— ๐Ÿ“œroute.ts
 โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“‚orders
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”— ๐Ÿ“œroute.ts
 โ”ƒ โ”ƒ โ”ƒ โ”— ๐Ÿ“‚wishes
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”— ๐Ÿ“œroute.ts
 โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“‚order
 โ”ƒ โ”ƒ โ”ƒ โ”— ๐Ÿ“œroute.ts
 โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“‚orderInfo
 โ”ƒ โ”ƒ โ”ƒ โ”— ๐Ÿ“‚[id]
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”— ๐Ÿ“œroute.ts
 โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“‚products
 โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“‚brands
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”— ๐Ÿ“œroute.ts
 โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“‚category
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”— ๐Ÿ“œroute.ts
 โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“‚wishes
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”— ๐Ÿ“œroute.ts
 โ”ƒ โ”ƒ โ”ƒ โ”— ๐Ÿ“œroute.ts
 โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“‚reviews
 โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“‚images
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”— ๐Ÿ“œroute.ts
 โ”ƒ โ”ƒ โ”ƒ โ”— ๐Ÿ“œroute.ts
 โ”ƒ โ”ƒ โ”— ๐Ÿ“‚search
 โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“‚relation
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”— ๐Ÿ“œroute.ts
 โ”ƒ โ”ƒ โ”ƒ โ”— ๐Ÿ“œroute.ts
 โ”ƒ โ”ฃ ๐Ÿ“œglobal-error.tsx
 โ”ƒ โ”ฃ ๐Ÿ“œglobals.css
 โ”ƒ โ”ฃ ๐Ÿ“œicon.ico
 โ”ƒ โ”— ๐Ÿ“œlayout.tsx
 โ”ฃ ๐Ÿ“‚assets
 โ”ƒ โ”ฃ ๐Ÿ“‚brands
 โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“œbrand1.png
 โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“œbrand2.png
 โ”ƒ โ”ƒ โ”— ๐Ÿ“œbrand3.png
 โ”ƒ โ”ฃ ๐Ÿ“‚events
 โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“œevent1.png
 โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“œevent2.png
 โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“œevent3.png
 โ”ƒ โ”ƒ โ”— ๐Ÿ“œevent4.png
 โ”ƒ โ”ฃ ๐Ÿ“œsign-up.png
 โ”ƒ โ”— ๐Ÿ“œsupport.png
 โ”ฃ ๐Ÿ“‚components
 โ”ƒ โ”ฃ ๐Ÿ“‚BrandBanner
 โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“œBrandBanner.tsx
 โ”ƒ โ”ƒ โ”— ๐Ÿ“œindex.ts
 โ”ƒ โ”ฃ ๐Ÿ“‚Bread
 โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“œBread.tsx
 โ”ƒ โ”ƒ โ”— ๐Ÿ“œindex.ts
 โ”ƒ โ”ฃ ๐Ÿ“‚Card
 โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“œCategoryCard.tsx
 โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“œEventLinkCard.tsx
 โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“œindex.ts
 โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“œProductCard.tsx
 โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“œReviewCard.tsx
 โ”ƒ โ”ƒ โ”— ๐Ÿ“œSkeletonCard.tsx
 โ”ƒ โ”ฃ ๐Ÿ“‚CategoryMore
 โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“œCategoryMore.tsx
 โ”ƒ โ”ƒ โ”— ๐Ÿ“œindex.ts
 โ”ƒ โ”ฃ ๐Ÿ“‚Input
 โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“œindex.ts
 โ”ƒ โ”ƒ โ”— ๐Ÿ“œInput.tsx
 โ”ƒ โ”ฃ ๐Ÿ“‚Loading
 โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“œindex.ts
 โ”ƒ โ”ƒ โ”— ๐Ÿ“œLoading.tsx
 โ”ƒ โ”ฃ ๐Ÿ“‚Navbar
 โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“œindex.ts
 โ”ƒ โ”ƒ โ”— ๐Ÿ“œNavbar.tsx
 โ”ƒ โ”ฃ ๐Ÿ“‚Pagination
 โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“œindex.ts
 โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“œPageButton.tsx
 โ”ƒ โ”ƒ โ”— ๐Ÿ“œPagination.tsx
 โ”ƒ โ”ฃ ๐Ÿ“‚products
 โ”ƒ โ”ƒ โ”— ๐Ÿ“‚Cart
 โ”ƒ โ”ƒ โ”ƒ โ”— ๐Ÿ“œCart.tsx
 โ”ƒ โ”ฃ ๐Ÿ“‚SearchPage
 โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“œindex.ts
 โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“œMenuItem.tsx
 โ”ƒ โ”ƒ โ”— ๐Ÿ“œSearchHeader.tsx
 โ”ƒ โ”ฃ ๐Ÿ“‚Sliders
 โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“œBannerSlide.tsx
 โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“œCategoryProducts.tsx
 โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“œCategorySection.tsx
 โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“œCurrentProducts.tsx
 โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“œindex.ts
 โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“œMdReviews.tsx
 โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“œProductSlide.tsx
 โ”ƒ โ”ƒ โ”— ๐Ÿ“œSliders.tsx
 โ”ƒ โ”ฃ ๐Ÿ“‚Tab
 โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“œindex.ts
 โ”ƒ โ”ƒ โ”— ๐Ÿ“œTab.tsx
 โ”ƒ โ”ฃ ๐Ÿ“‚Toggle
 โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“œindex.ts
 โ”ƒ โ”ƒ โ”— ๐Ÿ“œToggle.tsx
 โ”ƒ โ”— ๐Ÿ“‚ui
 โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“œaccordion.tsx
 โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“œbreadcrumb.tsx
 โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“œbutton.tsx
 โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“œcalendar.tsx
 โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“œcarousel.tsx
 โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“œcheckbox.tsx
 โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“œdialog.tsx
 โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“œdrawer.tsx
 โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“œdropdown-menu.tsx
 โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“œinput.tsx
 โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“œselect.tsx
 โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“œskeleton.tsx
 โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“œtabs.tsx
 โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“œtoast.tsx
 โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“œtoaster.tsx
 โ”ƒ โ”ƒ โ”— ๐Ÿ“œuse-toast.ts
 โ”ฃ ๐Ÿ“‚constant
 โ”ƒ โ”— ๐Ÿ“œpathname.ts
 โ”ฃ ๐Ÿ“‚contexts
 โ”ƒ โ”— ๐Ÿ“‚auth.context
 โ”ƒ โ”ƒ โ”— ๐Ÿ“œauth.context.tsx
 โ”ฃ ๐Ÿ“‚hooks
 โ”ƒ โ”ฃ ๐Ÿ“‚mutation
 โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“œindex.ts
 โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“œuseAddressMutation.ts
 โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“œuseAuthMutation.ts
 โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“œuseCartsMutation.ts
 โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“œuseOrderMutation.ts
 โ”ƒ โ”ƒ โ”— ๐Ÿ“œuseWishesMutation.ts
 โ”ƒ โ”ฃ ๐Ÿ“‚query
 โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“‚mypage
 โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“œindex.ts
 โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“œuseCouponQuery.ts
 โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“œuseOrderListQuery.ts
 โ”ƒ โ”ƒ โ”ƒ โ”— ๐Ÿ“œuseUserWishesQuery.ts
 โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“œindex.ts
 โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“œuseAddressQuery.ts
 โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“œuseAuthQuery.ts
 โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“œuseBrandsQuery.ts
 โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“œuseCartsQuery.ts
 โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“œuseCategoryQuery.ts
 โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“œuseOrderInfoQuery.ts
 โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“œuseProductsQuery.ts
 โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“œuseRelatedSearchQuery.ts
 โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“œuseReviewsQuery.ts
 โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“œuseReviewsTotalImagesQuery.ts
 โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“œuseSearchQuery.ts
 โ”ƒ โ”ƒ โ”— ๐Ÿ“œuseWishesQuery.ts
 โ”ƒ โ”ฃ ๐Ÿ“œuseAlert.ts
 โ”ƒ โ”ฃ ๐Ÿ“œuseCart.ts
 โ”ƒ โ”ฃ ๐Ÿ“œuseLocalCart.ts
 โ”ƒ โ”— ๐Ÿ“œuseRecentSearchTerms.tsx
 โ”ฃ ๐Ÿ“‚mockup
 โ”ƒ โ”ฃ ๐Ÿ“œbanner.json
 โ”ƒ โ”ฃ ๐Ÿ“œdeliveryInfo.json
 โ”ƒ โ”ฃ ๐Ÿ“œkeyword.ts
 โ”ƒ โ”ฃ ๐Ÿ“œmdPick.json
 โ”ƒ โ”— ๐Ÿ“œuserReview.json
 โ”ฃ ๐Ÿ“‚providers
 โ”ƒ โ”— ๐Ÿ“œQueryProvider.tsx
 โ”ฃ ๐Ÿ“‚supabase
 โ”ƒ โ”ฃ ๐Ÿ“œclient.ts
 โ”ƒ โ”ฃ ๐Ÿ“œmiddleware.ts
 โ”ƒ โ”— ๐Ÿ“œserver.ts
 โ”ฃ ๐Ÿ“‚types
 โ”ƒ โ”ฃ ๐Ÿ“‚myPage
 โ”ƒ โ”ƒ โ”— ๐Ÿ“œorder.ts
 โ”ƒ โ”ฃ ๐Ÿ“œbrands.ts
 โ”ƒ โ”ฃ ๐Ÿ“œcart.ts
 โ”ƒ โ”ฃ ๐Ÿ“œcategories.ts
 โ”ƒ โ”ฃ ๐Ÿ“œdeliveries.ts
 โ”ƒ โ”ฃ ๐Ÿ“œorder.ts
 โ”ƒ โ”ฃ ๐Ÿ“œproducts.ts
 โ”ƒ โ”ฃ ๐Ÿ“œreview.ts
 โ”ƒ โ”ฃ ๐Ÿ“œsearch.ts
 โ”ƒ โ”ฃ ๐Ÿ“œsupabase.ts
 โ”ƒ โ”— ๐Ÿ“œtypes.ts
 โ”ฃ ๐Ÿ“‚utils
 โ”ƒ โ”ฃ ๐Ÿ“œcn.ts
 โ”ƒ โ”— ๐Ÿ“œvalidateCheck.ts
 โ”— ๐Ÿ“œmiddleware.ts