์์ธ ์ง์ญ ํด๋ผ์ด๋ฐ ์ ํธ๊ฐ๋ค์ ์ํ ๋ชจ๋ฐ์ผ ์น ์ ํ๋ฆฌ์ผ์ด์
ํด๋ผ์ด๋ฐ ์์ธ์ ์์ธ ๋ฐ ์๋๊ถ์ ํด๋ผ์ด๋ฐ ์์ฅ ์ ๋ณด๋ฅผ ์ ๊ณตํ๊ณ , ํด๋ผ์ด๋ฐ ์ปค๋ฎค๋ํฐ๋ฅผ ์ฐ๊ฒฐํ๋ ๋ชจ๋ฐ์ผ ์ฐ์ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๋๋ค.
- ๐บ๏ธ ์์ฅ ์ง๋: ์์ธ ์ง์ญ ํด๋ผ์ด๋ฐ ์์ฅ ์์น ๋ฐ ์ค์๊ฐ ํผ์ก๋ ํ์ธ
- ๐ ํ: ์ฃผ๋ณ ์์ฅ ์ ๋ณด์ ์ถ์ฒ ์์ฅ ๋ชฉ๋ก
- ๐ฌ ์ปค๋ฎค๋ํฐ: ํด๋ผ์ด๋จธ๋ค ๊ฐ์ ์ ๋ณด ๊ณต์ ๋ฐ ์ํต
- ๐ค ํ๋กํ: ๊ฐ์ธ ํ๋กํ ๋ฐ ํด๋ผ์ด๋ฐ ๊ธฐ๋ก ๊ด๋ฆฌ
- ๐ ์ธ์ฆ: ๋ก๊ทธ์ธ/ํ์๊ฐ์ ๋ฐ ์์ ๋ก๊ทธ์ธ (๊ตฌ๊ธ, ์นด์นด์ค)
- React 19.1.0 - ์ต์ React ๊ธฐ๋ฅ ํ์ฉ
- Vite 7.0.4 - ๋น ๋ฅธ ๊ฐ๋ฐ ํ๊ฒฝ ๋ฐ ๋น๋
- Material-UI 7.2.0 - ์ผ๊ด๋ Material Design
- Framer Motion 12.23.3 - ๋ถ๋๋ฌ์ด ์ ๋๋ฉ์ด์
- ๋ชจ๋ฐ์ผ ์ต์ ํ - 393px ๊ธฐ์ค ๋ฐ์ํ ๋์์ธ
- Redux Toolkit 2.8.2 - ํจ์จ์ ์ธ ์ํ ๊ด๋ฆฌ
- React-Redux 9.2.0 - React-Redux ์ฐ๋
- Axios 1.10.0 - API ํต์ ๋ฐ ์ธํฐ์ ํฐ
- ESLint - ์ฝ๋ ํ์ง ๊ด๋ฆฌ
- React Hook Form 7.53.2 - ํผ ๊ด๋ฆฌ
src/
โโโ components/ # ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ์ปดํฌ๋ํธ
โ โโโ auth/ # ์ธ์ฆ ๊ด๋ จ ์ปดํฌ๋ํธ
โ โ โโโ LoginForm/ # ๋ก๊ทธ์ธ ํผ โ
โ โ โโโ RegisterForm/# ํ์๊ฐ์
ํผ
โ โ โโโ SocialLogin/ # ์์
๋ก๊ทธ์ธ
โ โโโ common/ # ๊ณตํต ์ปดํฌ๋ํธ
โ โ โโโ Header/ # ์๋จ ํค๋ โ
โ โ โโโ BottomNavigation/ # ํ๋จ ๋ค๋น๊ฒ์ด์
โ
โ โ โโโ FAB/ # ํ๋กํ
์ก์
๋ฒํผ โ
โ โ โโโ Loading/ # ๋ก๋ฉ ์ปดํฌ๋ํธ
โ โ โโโ Modal/ # ๋ชจ๋ฌ ์ปดํฌ๋ํธ
โ โ โโโ Footer/ # ํธํฐ
โ โโโ community/ # ์ปค๋ฎค๋ํฐ ๊ด๋ จ ์ปดํฌ๋ํธ
โ โ โโโ PostCard/ # ๊ฒ์๊ธ ์นด๋ โ
โ โ โโโ PostForm/ # ๊ฒ์๊ธ ์์ฑ
โ โ โโโ PostList/ # ๊ฒ์๊ธ ๋ชฉ๋ก
โ โ โโโ CommentForm/ # ๋๊ธ ์์ฑ
โ โ โโโ CommentList/ # ๋๊ธ ๋ชฉ๋ก
โ โโโ gym/ # ์์ฅ ๊ด๋ จ ์ปดํฌ๋ํธ
โ โ โโโ GymCard/ # ์์ฅ ์นด๋ โ
โ โ โโโ GymDetail/ # ์์ฅ ์์ธ
โ โ โโโ GymList/ # ์์ฅ ๋ชฉ๋ก
โ โโโ map/ # ์ง๋ ๊ด๋ จ ์ปดํฌ๋ํธ
โ โโโ KakaoMap/ # ์นด์นด์ค ์ง๋
โ โโโ GymMarker/ # ์์ฅ ๋ง์ปค
โ โโโ CongestionBadge/ # ํผ์ก๋ ๋ฐฐ์ง
โโโ pages/ # ํ์ด์ง ์ปดํฌ๋ํธ
โ โโโ Home/ # ํํ์ด์ง โ
โ โโโ Map/ # ์ง๋ ํ์ด์ง
โ โโโ Community/ # ์ปค๋ฎค๋ํฐ ํ์ด์ง โ
โ โโโ Profile/ # ํ๋กํ ํ์ด์ง โ
โ โโโ Auth/ # ์ธ์ฆ ํ์ด์ง โ
โโโ store/ # Redux ์ํ ๊ด๋ฆฌ
โ โโโ slices/ # Redux ์ฌ๋ผ์ด์ค
โ โ โโโ authSlice.js # ์ธ์ฆ ์ํ โ
โ โ โโโ gymSlice.js # ์์ฅ ์ํ โ
โ โ โโโ communitySlice.js # ์ปค๋ฎค๋ํฐ ์ํ โ
โ โ โโโ mapSlice.js # ์ง๋ ์ํ โ
โ โโโ index.js # ์คํ ์ด ์ค์ โ
โโโ services/ # API ์๋น์ค
โ โโโ api.js # ๊ณตํต API ์ค์ โ
โ โโโ authService.js # ์ธ์ฆ ์๋น์ค โ
โ โโโ gymService.js # ์์ฅ ์๋น์ค โ
โ โโโ communityService.js # ์ปค๋ฎค๋ํฐ ์๋น์ค โ
โโโ hooks/ # ์ปค์คํ
ํ
โ โโโ useAuth.js # ์ธ์ฆ ํ
โ
โ โโโ useGyms.js # ์์ฅ ํ
โ
โ โโโ useMap.js # ์ง๋ ํ
โ
โ โโโ usePosts.js # ๊ฒ์๊ธ ํ
โ
โโโ utils/ # ์ ํธ๋ฆฌํฐ ํจ์
โ โโโ constants.js # ์์ ์ ์ โ
โ โโโ formatters.js # ํฌ๋งทํฐ ํจ์ โ
โ โโโ helpers.js # ๋์ฐ๋ฏธ ํจ์ โ
โ โโโ validators.js # ์ ํจ์ฑ ๊ฒ์ฌ โ
โโโ styles/ # ์คํ์ผ ๊ด๋ จ
โโโ globals.css # ์ ์ญ ์คํ์ผ โ
โโโ theme.js # Material-UI ํ
๋ง โ
- Node.js 18.x ์ด์
- npm ๋๋ yarn
-
์ ์ฅ์ ํด๋ก
git clone https://github.com/climbing-nav/frontend.git cd frontend
-
์์กด์ฑ ์ค์น
npm install
-
๊ฐ๋ฐ ์๋ฒ ์คํ
npm run dev
-
๋ธ๋ผ์ฐ์ ์์ ํ์ธ
http://localhost:5173
์์ ์ ํ๋ฆฌ์ผ์ด์ ํ์ธ
# ํ๋ก๋์
๋น๋
npm run build
# ๋น๋ ๋ฏธ๋ฆฌ๋ณด๊ธฐ
npm run preview
# ์ฝ๋ ๋ฆฐํธ ๊ฒ์ฌ
npm run lint
- ์์ธ ์์ฅ ํต๊ณ (24๊ฐ ์์ฅ, 12๊ฐ ์พ์ ํ ๊ณณ)
- ๋ด ์ฃผ๋ณ ์์ฅ ์ง๋ ๋ฏธ๋ฆฌ๋ณด๊ธฐ
- ์ถ์ฒ ์์ฅ ๋ชฉ๋ก (์ด์ธํด๋ผ์ด๋ฐ, ๋ณผ๋๋ง์คํ๋์ค ๋ฑ)
- ์นด์นด์ค ์ง๋ API ๊ธฐ๋ฐ ์์ฅ ์์น ํ์
- ์ค์๊ฐ ํผ์ก๋ ์ ๋ณด (์พ์ /๋ณดํต/ํผ์ก)
- ํ์ฌ ์์น ๊ธฐ๋ฐ ์ฃผ๋ณ ์์ฅ ๊ฒ์
- ํญ ๊ธฐ๋ฐ ๋ค๋น๊ฒ์ด์ (์ ์ฒด/์ง๋ฌธ/ํ/ํ๊ธฐ)
- ๊ฒ์๊ธ ๋ชฉ๋ก ๋ฐ ์์ธ๋ณด๊ธฐ
- ๋๊ธ ๋ฐ ๋๋๊ธ ์์คํ
- ์ฌ์ฉ์ ํ๋กํ ์ ๋ณด
- ํด๋ผ์ด๋ฐ ๋ ๋ฒจ ๋ฐ ์ฑ์ทจ๋
- ์ค์ ๋ฐ ๊ณ ๊ฐ์ผํฐ ๋ฉ๋ด
- ๋ก๊ทธ์ธ/ํ์๊ฐ์ ํผ
- ์์ ๋ก๊ทธ์ธ (๊ตฌ๊ธ, ์นด์นด์ค)
- ์ด๋ฉ์ผ ์ธ์ฆ ํ๋ก์ฐ
- Primary:
#667eea
(๋ณด๋ผ๋น ํ๋) - Secondary:
#764ba2
(์งํ ๋ณด๋ผ) - Background:
#f8f9fa
(๋ฐ์ ํ์)
- Font Family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif
- ๋ฐ์ํ ๋์์ธ: ๋ชจ๋ฐ์ผ ์ฐ์ (393px ๊ธฐ์ค)
- HomePage - ํต๊ณ, ์ง๋ ๋ฏธ๋ฆฌ๋ณด๊ธฐ, ์ถ์ฒ ์์ฅ ๋ชฉ๋ก
- CommunityPage - ํญ ๋ค๋น๊ฒ์ด์ , ๊ฒ์๊ธ ๋ชฉ๋ก
- ProfilePage - ์ฌ์ฉ์ ํ๋กํ, ๋ฉ๋ด ์น์
- AuthPage - ๋ก๊ทธ์ธ/ํ์๊ฐ์ ์ธํฐํ์ด์ค
- Header - ๊ฒ์๋ฐ, ํ๋กํ ๋ฒํผ
- BottomNavigation - 4๊ฐ ํญ ๋ค๋น๊ฒ์ด์
- FAB - ํ๋กํ ์ก์ ๋ฒํผ
- Redux Slices - auth, gym, community, map ์ฌ๋ผ์ด์ค
- Custom Hooks - useAuth, useGyms, useMap, usePosts
- Services - API ์๋น์ค ๋ ์ด์ด
- LoginForm - ์์ ํ ๋ก๊ทธ์ธ ํผ (Redux ์ฐ๋, ์ ํจ์ฑ ๊ฒ์ฌ, ์๋ฌ ์ฒ๋ฆฌ)
- LoginForm - ์ด๋ฉ์ผ/๋น๋ฐ๋ฒํธ, ์์ ๋ก๊ทธ์ธ UI
- RegisterForm - ํ์๊ฐ์ ํผ ๊ตฌํ ํ์
- SocialLogin - OAuth ์ฐ๋ ๊ตฌํ ํ์
- GymCard - ์์ฅ ์นด๋ ์ปดํฌ๋ํธ
- GymDetail - ์์ฅ ์์ธ ์ ๋ณด
- GymList - ์์ฅ ๋ชฉ๋ก ๋ฐ ํํฐ
- PostCard - ๊ฒ์๊ธ ์นด๋ ์ปดํฌ๋ํธ
- PostForm - ๊ฒ์๊ธ ์์ฑ/์์
- PostList - ๊ฒ์๊ธ ๋ชฉ๋ก
- CommentForm - ๋๊ธ ์์ฑ
- CommentList - ๋๊ธ ๋ชฉ๋ก
- KakaoMap - ์นด์นด์ค ์ง๋ API ์ฐ๋
- GymMarker - ์์ฅ ๋ง์ปค ๋ฐ ํด๋ฌ์คํฐ๋ง
- CongestionBadge - ํผ์ก๋ ํ์
- Loading - ์ค์ผ๋ ํค/์คํผ๋ ๋ก๋ฉ
- Modal - ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ๋ชจ๋ฌ
- Footer - ํธํฐ ์ปดํฌ๋ํธ
- ์ธ์ฆ ์์คํ ์์ ๊ตฌํ
- ์ง๋ ๊ธฐ๋ฅ (์นด์นด์ค ์ง๋ API)
- ์์ฅ ์์ธ ์ ๋ณด ํ์ด์ง
- ๊ฒ์๊ธ ๊ด๋ฆฌ ์์คํ
- ๋๊ธ ๋ฐ ๋๋๊ธ ๊ธฐ๋ฅ
- ๊ฒ์ ๋ฐ ํํฐ๋ง
- ๋ก๋ฉ ์ํ ๋ฐ ์ ๋๋ฉ์ด์
- ์๋ฆผ ์์คํ
- ์ฑ๋ฅ ์ต์ ํ
- ์ด์ ํ์ธ: GitHub Issues
- ๋ธ๋์น ์์ฑ:
feature/๊ธฐ๋ฅ๋ช
๋๋fix/๋ฒ๊ทธ๋ช
- ์ปค๋ฐ ์ปจ๋ฒค์
:
feat: ์๋ก์ด ๊ธฐ๋ฅ
fix: ๋ฒ๊ทธ ์์
docs: ๋ฌธ์ ์์
style: ์ฝ๋ ํฌ๋งทํ
refactor: ๋ฆฌํฉํ ๋ง
- Pull Request ์์ฑ
- GitHub Issues: ๋ฒ๊ทธ ๋ฆฌํฌํธ ๋ฐ ๊ธฐ๋ฅ ์์ฒญ
- ์ด๋ฉ์ผ: climbing.seoul@example.com
์ด ํ๋ก์ ํธ๋ MIT ๋ผ์ด์ ์ค ํ์ ์์ต๋๋ค. ์์ธํ ๋ด์ฉ์ LICENSE ํ์ผ์ ์ฐธ์กฐํ์ธ์.
๐งโโ๏ธ ํด๋ผ์ด๋ฐ ์์ธ๊ณผ ํจ๊ป ์์ธ์ ๋ชจ๋ ํด๋ผ์ด๋ฐ ์์ฅ์ ํํํ์ธ์!
Made with โค๏ธ by Climbing Seoul Team