๊ฒฐํผ์ค๋น๋ฅผ ๋ด ๋ง์๋๋ก ํธ์งํ๋ค, ์จ๋ง
์จ๋ง๊ณผ ํจ๊ป๋ผ๋ฉด ๋์ด์์ ์คํธ๋ ์ค๋ ์์ต๋๋ค!
์จ๋ฉ ์ค๋น๋ ๊ฐ๊ฒฉ ๋น๊ณต๊ฐ์ ๋๋ ์ค ํผํ
์ดฌ์ ๊ธ์ง ๋๋ฌธ์ ๋ง์ ๋ถ๋ถ๋ค์๊ฒ ์คํธ๋ ์ค๋ฅผ ์ค๋๋ค.
Wedit์ ์๋น๋ถ๋ถ๋ฅผ ์ํ ์จ๋ฉ์
์ฒด ๊ฐ๊ฒฉ ๋น๊ต ํ๋ซํผ์ผ๋ก,
- ์ํ๋ ์ ์ฒด๋ง ๊ณจ๋ผ ๊ฒฌ์ ์ ๋น๊ตํ๊ณ
- ํด๋ฆญ ํ ๋ฒ์ผ๋ก ์ ์ฒด ์๋ด๊ณผ ์์ฝ์ ํ ๋ฒ์
- ๋ชจ๋ฐ์ผ ์ฒญ์ฒฉ์ฅ๋ ์ ์ฒด ๋ฐ๋ก ์ฐพ์ ํ์์์ด ๋ด๊ฐ ์ง์ ์ปค์คํ ,
- ๋๋ ์ค ์์ฌ๋ถํฐ ๋ฅ๋ผ์ธ, ์ค์ปคํธ ๋ผ์ธ๊น์ง ๊ธฐ๋ก์ด ๊ฐ๋ฅํฉ๋๋ค.
- ๐ ์ฐ๋์บ๋ฆฐ๋ ๊ด๋ฆฌ โ ์จ๋ฉ ๊ด๋ จ ์ผ์ ์ ์๋ณ/๋ฆฌ์คํธ๋ก ๊ด๋ฆฌ
- ๐ข ์กฐ๊ฑด๊ฒ์ โ ์ ์ฒด ์ฑ๊ฒฉ์ ๋ฐ๋ฅธ ํํฐ ์ ํ์ผ๋ก ๋์๊ฒ ๋ง๋ ์ ์ฒด๋ง ์์น
- ๐ ๋ฆฌ๋ทฐ ๊ด๋ฆฌ โ ๋ด๊ฐ ๊ณ์ฝํ ์ ์ฒด ํ๊ธฐ, ์จ๋ง์ ์ ๋ค์ ์์งํ ํ๊ธฐ
- ๐ฐ ๋งค๊ฑฐ์ง โ ์จ๋ง์ด ์ ๊ณตํ๋ ๊ฒฐํผ์ค๋น ํ
- ๐ ๋๋ ์ค ์ค์ผ์น โ ์๊ทธ๋ฆผ ๋์ ์์ด์ฝ ํด๋ฆญ์ผ๋ก ๋๋ ์ค ๊ธฐ๋ก
- ๐ ๊ฒฌ์ ์ โ ๊ฐ๊ฒฉ์ ๋น๊ตํ๊ณ ์ถ์ ์ ์ฒด๋ง ๋ด์์ ์์ฐ ๊ด๋ฆฌ
- ๐ฐ๐ปโโ๏ธ ์ฒญ์ฒฉ์ฅ - ์จ๋ง์์ ํธ๋ฆฌํ๊ฒ ๋ชจ๋ฐ์ผ ์ฒญ์ฒฉ์ฅ ๋ง๋ค๊ธฐ
- ๐ณ ์๋ด ์์ฝ / ์ ์ฒด ๊ณ์ฝ - ์จ๋ง์์ ํ๋ฒ์ ์ ์ฒด ๊ณ์ฝ , ์๋ด ์์ฝํ๊ธฐ
- React 19
- Next.js 15.5 โ App Router, Server Components, Dynamic Routing
- TypeScript 5
- React DOM 19
- Tailwind CSS 4 โ ์ ํธ๋ฆฌํฐ ํผ์คํธ ์คํ์ผ๋ง
- shadcn/ui (Radix ๊ธฐ๋ฐ, lucide-react์ ํจ๊ป ์ฌ์ฉ)
- lucide-react 0.542.0 โ ์์ด์ฝ ์ปดํฌ๋ํธ
- Embla Carousel 8.6
embla-carousel-reactembla-carousel-autoplayembla-carousel(core)
- clsx 2.1.1 โ ์กฐ๊ฑด๋ถ ํด๋์ค ๋ค์ ๊ด๋ฆฌ
- js-cookie 3.0.5 โ ์ฟ ํค ๊ธฐ๋ฐ ์ํ ๊ด๋ฆฌ
- tanstack-query - ์๋ฒ ์ํ์ ์บ์ฑ์ ์๋ ๊ด๋ฆฌ UI์ ๋ฐ์ดํฐ ๋๊ธฐํ๋ฅผ ์ํ ์ํ๊ด๋ฆฌ
- zustand - ์ ์ ์ ๋ณด ๊ด๋ฆฌ๋ฅผ ์ํ ์ํ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
- next-pwa 5.6.0 โ ์๋น์ค ์์ปค ๋ฐ ์คํ๋ผ์ธ ๋ชจ๋ ์ง์ / ํฐ์ผ๋ก๋ ์ฝ๊ฒ ์ ๊ทผํ๋๋ก mobile-first ๋์์ธ ๊ตฌํ
- Storybook 9.1.3 โ ์ปดํฌ๋ํธ ๋ฌธ์ํ ๋ฐ ๋์์ธ ์์คํ ๊ตฌ์ถ
- ESLint 9 +
eslint-config-next+eslint-plugin-storybook - Prettier 3.6.2 โ ์ฝ๋ ํฌ๋งทํ
- @tailwindcss/postcss 4 โ Tailwind PostCSS ํ๋ฌ๊ทธ์ธ
@types/react,@types/react-dom,@types/node,@types/js-cookie
- API ํธ์ถ โ services/http.ts
- ํ ํฐ ๋ง๋ฃ ์ โ reissueOnce() โ refreshStore
- ์ access token ๋ฐ๊ธ ํ ์ฌ์์ฒญ
- ์ต์ข ์ ์ผ๋ก UI์ ์ ์ ์๋ต ์ ๋ฌ
src/
โโ app/ # Next.js App Router ํ์ด์ง
โ โโ home/ # ํ
โ โโ calendar/ # ์บ๋ฆฐ๋
โ โโ cart/ # ๊ฒฌ์ ์
โ โโ reservation/ # ์์ฝ/์๋ด ํ๋ก์ฐ
โ โโ mypage/ # ๋ง์ดํ์ด์ง (์์ฝ, ํ๊ฐ ์์ฑ, ์ฐ๊ฒฐ, ์ฒญ์ฒฉ์ฅ)
โ โโ editorials/ # ์จ๋ฉ ์๋ํ ๋ฆฌ์ผ
โ โโ search/ # ๊ฒ์/ํํฐ/๊ฒฐ๊ณผ
โ โโ tours/ # ํฌ์ด/๊ฒฌ์
โ โโ vendor/ # ์
์ฒด ์์ธ
โ โโ todo/ # ํ ์ผ ํ๋ก์ฐ
โ โโ review/ # ํ๊ธฐ ํ์ธ
โ โโ auth/ # ๋ก๊ทธ์ธ / ํ์๊ฐ์
โ โโ comming-soon/ # ๊ณง ๊ตฌํ๋ ํ๋ฉด
โ
โโ components/ # ์ฌ์ฌ์ฉ UI ์ปดํฌ๋ํธ
โ โโ common/ # ๊ณต์ฉ (ํค๋, ๋ฐํ
ํญ ๋ฑ)
โ โโ forms/ # ์
๋ ฅ ํผ
โ โโ Mypage/ # ๋ง์ดํ์ด์ง ์น์
โ โโ tours/ # ๋๋ ์ค ํฌ์ด ์ผ์ง ๊ด๋ จ ์ปดํฌ๋ํธ
โ โโ admin/ # ์
์ฒด ๋ฑ๋ก(๊ด๋ฆฌ์) ๊ด๋ จ ์ปดํฌ๋ํธ
โ โโ Calendar/ # ์บ๋ฆฐ๋ ๊ด๋ จ ์ปดํฌ๋ํธ
โ โโ onboading/ # ์จ๋ณด๋ฉ ๊ด๋ จ ์ปดํฌ๋ํธ
โ โโ reservation/ # ์
์ฒด ์์ฝ ๊ด๋ จ ์ปดํฌ๋ํธ
โ โโ search/ # ์กฐ๊ฑด ๊ฒ์ ๊ด๋ จ ์ปดํฌ๋ํธ
โ โโ vendor/ # ์
์ฒด ๊ด๋ จ ์ปดํฌ๋ํธ
โ โโ anim/ # todo ์ ๋๋ฉ์ด์
๊ด๋ จ ์ปดํฌ๋ํธ
โ โโ invitation/ # ์ฒญ์ฒฉ์ฅ ๊ด๋ จ ์ปดํฌ๋ํธ
โ
โโ services/ # API ํต์ ๋ชจ๋
โ โโ http.ts # โ
๊ณตํต HTTP ํด๋ผ์ด์ธํธ (ํ ํฐ/์ฌ๋ฐ๊ธ)
โ โโ auth.api.ts # ์ธ์ฆ
โ โโ mypage.api.ts # ๋ง์ดํ์ด์ง
โ โโ review.api.ts # ๋ฆฌ๋ทฐ
โ โโ tours.api.ts # ํฌ์ด
โ โโ vendor.api.ts # ์
์ฒด
โ โโ โฆ # ๊ธฐํ (๊ฒฌ์ , ์จ๋ฉํ ๋ฑ)
โ
โโ hooks/ # ์ปค์คํ
ํ
(๋ฐ์ดํฐ/์ํ ๊ด๋ฆฌ)
โ โโ useMyProfile.ts
โ โโ useMyReservations.ts
โ โโ useCreateReview.ts
โ โโ useSignupWizard.ts
โ
โโ lib/ # ์ ํธ๋ฆฌํฐ & ์ ์ญ ์คํ ์ด
โ โโ tokenStore.ts # ์ก์ธ์ค ํ ํฐ ๊ด๋ฆฌ
โ โโ refreshStore.ts # ๋ฆฌํ๋ ์ ํ ํฐ ๊ด๋ฆฌ
โ โโ routes.tsx # ๋ผ์ฐํธ ์์
โ โโ dday.ts, format.ts ๋ฑ ์ ํธ
โ
โโ types/ # ํ์
์ ์ (Auth, Vendor, Tour, Review ๋ฑ)
โโ data/ # ์ ์ /์ํ ๋ฐ์ดํฐ (ํ, ์๋ํ ๋ฆฌ์ผ ๋ฑ)
โโ utills/cn.ts # className ์ ํธ ํจ์| ์ด๋ฆ | ์ญํ | GitHub | ๋ด๋น ์ ๋ฌด |
|---|---|---|---|
| ๊น์ ํ | Frontend Lead | @Jeong011010 | ์ํคํ ์ฒ ๋ฐ ๋๋ ํฐ๋ฆฌ ๊ตฌ์กฐ ์ค๊ณ, ์ํ๊ด๋ฆฌ & ํ์ง, UI๊ตฌํ, API ์ฐ๋ |
| ๋ฐ์๋ฏผ | Frontend Developer | @psm1st | UI๋์์ธ, ์ฒญ์ฒฉ์ฅ ๊ตฌํ, ๊ณตํต ์ปดํฌ๋ํธ ์ ์ |