|
1 | | -# Meow.zip |
| 1 | +# 🐱 Meow.zip Frontend |
2 | 2 |
|
3 | | -> 길고양이 케어테이커들을 위한 돌봄 일지 서비스 입니다. |
| 3 | +**길고양이 케어테이커들을 위한 종합 돌봄 일지 서비스의 프론트엔드 레포지토리** |
4 | 4 |
|
5 | | -## Tech Stack |
| 5 | +> 📋 **서비스 전체 소개**: [Meow.zip organization README.md](https://github.com/meowzip) 참고 |
6 | 6 |
|
7 | | -TypeScript | Next.js | Jotai | Tanstack-Query | TailwindCSS | shadcn-ui |
| 7 | +## 🛠 기술 스택 |
8 | 8 |
|
9 | | -## 주요 기능 |
| 9 | +- **Framework**: Next.js 14 (App Router) |
| 10 | +- **Language**: TypeScript |
| 11 | +- **Styling**: TailwindCSS + shadcn/ui |
| 12 | +- **State Management**: Jotai |
| 13 | +- **Data Fetching**: TanStack Query (React Query) |
| 14 | +- **Authentication**: NextAuth.js |
| 15 | +- **Package Manager**: pnpm |
| 16 | +- **Code Quality**: Prettier, ESLint |
10 | 17 |
|
11 | | -### 1. 고양이 모음집 |
| 18 | +## 📁 프로젝트 구조 |
12 | 19 |
|
13 | | -- 길고양이 프로필 등록 및 관리 |
14 | | -- 고양이별 상세 정보 기록 |
15 | | -- 이미지 업로드 및 관리 |
| 20 | +``` |
| 21 | +src/ |
| 22 | +├── app/ # Next.js App Router |
| 23 | +│ ├── @modal/ # 모달 인터셉팅 라우트 |
| 24 | +│ ├── api/ # API 라우트 핸들러 |
| 25 | +│ ├── community/ # /community |
| 26 | +│ │ └── page.tsx |
| 27 | +│ ├── profile/ # /profile |
| 28 | +│ │ └── [id]/ |
| 29 | +│ │ └── page.tsx # /profile/[id] |
| 30 | +│ ├── zip/ # /zip |
| 31 | +│ ├── layout.tsx # 루트 레이아웃 |
| 32 | +│ ├── page.tsx # |
| 33 | +│ ├── loading.tsx # 전역 로딩 UI |
| 34 | +│ └── error.tsx # 전역 에러 UI |
| 35 | +├── components/ # 재사용 컴포넌트 |
| 36 | +│ ├── ui/ # 기본 UI 컴포넌트 (shadcn/ui) |
| 37 | +│ ├── common/ # 공통 컴포넌트 |
| 38 | +│ └── [domain]/ # 도메인별 컴포넌트 |
| 39 | +├── hooks/ # 커스텀 훅 |
| 40 | +├── services/ # API 서비스 레이어 |
| 41 | +├── store/ # Jotai 전역 상태 관리 |
| 42 | +├── types/ # Types |
| 43 | +└── utils/ # 유틸리티 함수 |
| 44 | +``` |
16 | 45 |
|
17 | | -### 2. 돌봄 일지 |
| 46 | +## 🚀 개발 환경 설정 |
18 | 47 |
|
19 | | -- 일별 돌봄 활동 기록 |
20 | | -- 사진 첨부 기능 |
21 | | -- 돌봄 히스토리 관리 |
| 48 | +### 필수 조건 |
22 | 49 |
|
23 | | -### 3. 함께 돌봄 |
| 50 | +- **Node.js**: 18.17 이상 |
| 51 | +- **pnpm**: 9.8.0 이상 |
24 | 52 |
|
25 | | -- 다른 케어테이커와 협업 |
26 | | -- 돌봄 일정 공유 |
27 | | -- 실시간 알림 |
| 53 | +### 설치 및 실행 |
28 | 54 |
|
29 | | -### 4. 커뮤니티 |
| 55 | +```bash |
| 56 | +# 1. 저장소 클론 |
| 57 | +git clone https://github.com/meowzip/meowzip-front.git |
| 58 | +cd meowzip-front |
30 | 59 |
|
31 | | -- 피드 작성 및 공유 |
32 | | -- 댓글 기능 |
33 | | -- 좋아요/북마크 기능 |
34 | | -- 사용자간 커뮤니티 소통 |
| 60 | +# 2. 의존성 설치 |
| 61 | +pnpm install |
35 | 62 |
|
36 | | -### 5. 알림 |
| 63 | +# 3. 환경 변수 설정 |
| 64 | +cp .env.example .env.local |
| 65 | +# .env.local 파일 편집 필요 |
37 | 66 |
|
38 | | -- 알림 기능 |
39 | | -- 알림 관리 |
| 67 | +# 4. 개발 서버 실행 |
| 68 | +pnpm dev |
| 69 | +``` |
40 | 70 |
|
41 | | -> 개발 기간: 2023.10 ~ 진행 중 |
| 71 | +## 📜 개발 스크립트 |
| 72 | + |
| 73 | +```bash |
| 74 | +# 개발 서버 실행 |
| 75 | +pnpm dev |
| 76 | + |
| 77 | +# 프로덕션 빌드 |
| 78 | +pnpm build |
| 79 | + |
| 80 | +# 프로덕션 서버 실행 |
| 81 | +pnpm start |
| 82 | + |
| 83 | +``` |
| 84 | + |
| 85 | +## 🏗 개발 가이드라인 |
| 86 | + |
| 87 | +### 컴포넌트 작성 규칙 |
| 88 | + |
| 89 | +1. **디렉토리 구조** |
| 90 | + |
| 91 | + ``` |
| 92 | + components/ |
| 93 | + ├── ui/ # 재사용 가능한 기본 컴포넌트 |
| 94 | + ├── common/ # 도메인 무관한 공통 컴포넌트 |
| 95 | + └── [domain]/ # 특정 도메인 전용 컴포넌트 |
| 96 | + ``` |
| 97 | + |
| 98 | +2. **파일명 규칙** |
| 99 | + |
| 100 | + - 컴포넌트: `PascalCase.tsx` |
| 101 | + - 훅: `use(prefix) + camelCase.ts or tsx` |
| 102 | + - 유틸: `camelCase.ts` |
| 103 | + - 타입: `camelCaseType.ts` |
| 104 | + |
| 105 | +3. **컴포넌트 구조** |
| 106 | + |
| 107 | + ```typescript |
| 108 | + // 타입 정의 |
| 109 | + interface ComponentProps { |
| 110 | + // props 타입 |
| 111 | + } |
| 112 | + |
| 113 | + // 컴포넌트 정의 |
| 114 | + export default function Component({ ...props }: ComponentProps) { |
| 115 | + // 로직 |
| 116 | + return ( |
| 117 | + // JSX |
| 118 | + ); |
| 119 | + } |
| 120 | + ``` |
| 121 | + |
| 122 | +### 상태 관리 |
| 123 | + |
| 124 | +- **전역 상태**: Jotai atoms (`src/store/`) |
| 125 | +- **서버 상태**: TanStack Query (`src/hooks/`) |
| 126 | +- **로컬 상태**: React useState |
| 127 | + |
| 128 | +### API service layer |
| 129 | + |
| 130 | +```typescript |
| 131 | +// services 레이어 사용 |
| 132 | +import { getUserProfile } from '@/services/profile'; |
| 133 | + |
| 134 | +// TanStack Query 훅 사용 |
| 135 | +import { useQuery } from '@tanstack/react-query'; |
| 136 | + |
| 137 | +const { data, isLoading, error } = useQuery({ |
| 138 | + queryKey: ['profile', userId], |
| 139 | + queryFn: () => getUserProfile(userId) |
| 140 | +}); |
| 141 | +``` |
| 142 | + |
| 143 | +## 🤝 기여하기 |
| 144 | + |
| 145 | +### Pull Request 가이드 |
| 146 | + |
| 147 | +1. **브랜치 생성** |
| 148 | + |
| 149 | + ```bash |
| 150 | + git checkout -b feature/your-feature-name |
| 151 | + ``` |
| 152 | + |
| 153 | +2. **커밋 컨벤션** |
| 154 | + ``` |
| 155 | + feat: 새로운 기능 추가 |
| 156 | + fix: 버그 수정 |
| 157 | + docs: 문서 수정 |
| 158 | + style: 코드 포맷팅 |
| 159 | + refactor: 코드 리팩토링 |
| 160 | + test: 테스트 추가 |
| 161 | + chore: 빌드 업무 수정 |
| 162 | + ``` |
0 commit comments