Skip to content

Latest commit

Β 

History

History
162 lines (123 loc) Β· 3.83 KB

README.md

File metadata and controls

162 lines (123 loc) Β· 3.83 KB

🐱 Meow.zip Frontend

길고양이 μΌ€μ–΄ν…Œμ΄μ»€λ“€μ„ μœ„ν•œ μ’…ν•© λŒλ΄„ 일지 μ„œλΉ„μŠ€μ˜ ν”„λ‘ νŠΈμ—”λ“œ λ ˆν¬μ§€ν† λ¦¬

πŸ“‹ μ„œλΉ„μŠ€ 전체 μ†Œκ°œ: Meow.zip organization README.md μ°Έκ³ 

πŸ›  기술 μŠ€νƒ

  • Framework: Next.js 14 (App Router)
  • Language: TypeScript
  • Styling: TailwindCSS + shadcn/ui
  • State Management: Jotai
  • Data Fetching: TanStack Query (React Query)
  • Authentication: NextAuth.js
  • Package Manager: pnpm
  • Code Quality: Prettier, ESLint

πŸ“ ν”„λ‘œμ νŠΈ ꡬ쑰

src/
β”œβ”€β”€ app/                    # Next.js App Router
β”‚   β”œβ”€β”€ @modal/            # λͺ¨λ‹¬ μΈν„°μ…‰νŒ… 라우트
β”‚   β”œβ”€β”€ api/               # API 라우트 ν•Έλ“€λŸ¬
β”‚   β”œβ”€β”€ community/         # /community
β”‚   β”‚   └── page.tsx
β”‚   β”œβ”€β”€ profile/           # /profile
β”‚   β”‚   └── [id]/
β”‚   β”‚       └── page.tsx   # /profile/[id]
β”‚   β”œβ”€β”€ zip/               # /zip
β”‚   β”œβ”€β”€ layout.tsx         # 루트 λ ˆμ΄μ•„μ›ƒ
β”‚   β”œβ”€β”€ page.tsx           #
β”‚   β”œβ”€β”€ loading.tsx        # μ „μ—­ λ‘œλ”© UI
β”‚   └── error.tsx          # μ „μ—­ μ—λŸ¬ UI
β”œβ”€β”€ components/            # μž¬μ‚¬μš© μ»΄ν¬λ„ŒνŠΈ
β”‚   β”œβ”€β”€ ui/                # κΈ°λ³Έ UI μ»΄ν¬λ„ŒνŠΈ (shadcn/ui)
β”‚   β”œβ”€β”€ common/            # 곡톡 μ»΄ν¬λ„ŒνŠΈ
β”‚   └── [domain]/          # 도메인별 μ»΄ν¬λ„ŒνŠΈ
β”œβ”€β”€ hooks/                 # μ»€μŠ€ν…€ ν›…
β”œβ”€β”€ services/              # API μ„œλΉ„μŠ€ λ ˆμ΄μ–΄
β”œβ”€β”€ store/                 # Jotai μ „μ—­ μƒνƒœ 관리
β”œβ”€β”€ types/                 # Types
└── utils/                 # μœ ν‹Έλ¦¬ν‹° ν•¨μˆ˜

πŸš€ 개발 ν™˜κ²½ μ„€μ •

ν•„μˆ˜ 쑰건

  • Node.js: 18.17 이상
  • pnpm: 9.8.0 이상

μ„€μΉ˜ 및 μ‹€ν–‰

# 1. μ €μž₯μ†Œ 클둠
git clone https://github.com/meowzip/meowzip-front.git
cd meowzip-front

# 2. μ˜μ‘΄μ„± μ„€μΉ˜
pnpm install

# 3. ν™˜κ²½ λ³€μˆ˜ μ„€μ •
cp .env.example .env.local
# .env.local 파일 νŽΈμ§‘ ν•„μš”

# 4. 개발 μ„œλ²„ μ‹€ν–‰
pnpm dev

πŸ“œ 개발 슀크립트

# 개발 μ„œλ²„ μ‹€ν–‰
pnpm dev

# ν”„λ‘œλ•μ…˜ λΉŒλ“œ
pnpm build

# ν”„λ‘œλ•μ…˜ μ„œλ²„ μ‹€ν–‰
pnpm start

πŸ— 개발 κ°€μ΄λ“œλΌμΈ

μ»΄ν¬λ„ŒνŠΈ μž‘μ„± κ·œμΉ™

  1. 디렉토리 ꡬ쑰

    components/
    β”œβ”€β”€ ui/           # μž¬μ‚¬μš© κ°€λŠ₯ν•œ κΈ°λ³Έ μ»΄ν¬λ„ŒνŠΈ
    β”œβ”€β”€ common/       # 도메인 λ¬΄κ΄€ν•œ 곡톡 μ»΄ν¬λ„ŒνŠΈ
    └── [domain]/     # νŠΉμ • 도메인 μ „μš© μ»΄ν¬λ„ŒνŠΈ
    
  2. 파일λͺ… κ·œμΉ™

    • μ»΄ν¬λ„ŒνŠΈ: PascalCase.tsx
    • ν›…: use(prefix) + camelCase.ts or tsx
    • μœ ν‹Έ: camelCase.ts
    • νƒ€μž…: camelCaseType.ts
  3. μ»΄ν¬λ„ŒνŠΈ ꡬ쑰

    // νƒ€μž… μ •μ˜
    interface ComponentProps {
      // props νƒ€μž…
    }
    
    // μ»΄ν¬λ„ŒνŠΈ μ •μ˜
    export default function Component({ ...props }: ComponentProps) {
      // 둜직
      return (
        // JSX
      );
    }

μƒνƒœ 관리

  • μ „μ—­ μƒνƒœ: Jotai atoms (src/store/)
  • μ„œλ²„ μƒνƒœ: TanStack Query (src/hooks/)
  • 둜컬 μƒνƒœ: React useState

API service layer

// services λ ˆμ΄μ–΄ μ‚¬μš©
import { getUserProfile } from '@/services/profile';

// TanStack Query ν›… μ‚¬μš©
import { useQuery } from '@tanstack/react-query';

const { data, isLoading, error } = useQuery({
  queryKey: ['profile', userId],
  queryFn: () => getUserProfile(userId)
});

🀝 κΈ°μ—¬ν•˜κΈ°

Pull Request κ°€μ΄λ“œ

  1. 브랜치 생성

    git checkout -b feature/your-feature-name
  2. 컀밋 μ»¨λ²€μ…˜

    feat: μƒˆλ‘œμš΄ κΈ°λŠ₯ μΆ”κ°€
    fix: 버그 μˆ˜μ •
    docs: λ¬Έμ„œ μˆ˜μ •
    style: μ½”λ“œ ν¬λ§·νŒ…
    refactor: μ½”λ“œ λ¦¬νŒ©ν† λ§
    test: ν…ŒμŠ€νŠΈ μΆ”κ°€
    chore: λΉŒλ“œ 업무 μˆ˜μ •