Skip to Content
스킬프로젝트 가이드라인

프로젝트 가이드라인

다운로드 후 ~/.claude/skills/ 폴더에 복사하여 사용하세요

프로젝트별 스킬의 예시입니다. 자신의 프로젝트를 위한 템플릿으로 사용하세요.

실제 프로덕션 애플리케이션 기반: Zenith  - AI 기반 고객 발견 플랫폼

사용 시점

이 스킬이 설계된 특정 프로젝트에서 작업할 때 참조하세요.

프로젝트 스킬에 포함된 내용:

  • 아키텍처 개요
  • 파일 구조
  • 코드 패턴
  • 테스트 요구사항
  • 배포 워크플로우

아키텍처 개요

기술 스택:

레이어기술
프론트엔드Next.js 15 (App Router), TypeScript, React
백엔드FastAPI (Python), Pydantic 모델
데이터베이스Supabase (PostgreSQL)
AIClaude API (도구 호출 및 구조화된 출력)
배포Google Cloud Run
테스팅Playwright (E2E), pytest (백엔드), React Testing Library

서비스 아키텍처:

┌─────────────────────────────────────────────────────────────┐ │ 프론트엔드 │ │ Next.js 15 + TypeScript + TailwindCSS │ └─────────────────────────────────────────────────────────────┘ ┌─────────────────────────────────────────────────────────────┐ │ 백엔드 │ │ FastAPI + Python 3.11 + Pydantic │ └─────────────────────────────────────────────────────────────┘ ┌───────────────┼───────────────┐ ▼ ▼ ▼ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ Supabase │ │ Claude │ │ Redis │ │ Database │ │ API │ │ Cache │ └──────────┘ └──────────┘ └──────────┘

파일 구조

project/ ├── frontend/ │ └── src/ │ ├── app/ # Next.js app router 페이지 │ │ ├── api/ # API 라우트 │ │ ├── (auth)/ # 인증 보호 라우트 │ │ └── workspace/ # 메인 앱 워크스페이스 │ ├── components/ # React 컴포넌트 │ │ ├── ui/ # 기본 UI 컴포넌트 │ │ ├── forms/ # 폼 컴포넌트 │ │ └── layouts/ # 레이아웃 컴포넌트 │ ├── hooks/ # 커스텀 React 훅 │ ├── lib/ # 유틸리티 │ └── types/ # TypeScript 정의 ├── backend/ │ ├── routers/ # FastAPI 라우트 핸들러 │ ├── models.py # Pydantic 모델 │ ├── main.py # FastAPI 앱 진입점 │ ├── auth_system.py # 인증 │ ├── database.py # 데이터베이스 작업 │ ├── services/ # 비즈니스 로직 │ └── tests/ # pytest 테스트 ├── deploy/ # 배포 설정 ├── docs/ # 문서 └── scripts/ # 유틸리티 스크립트

코드 패턴

API 응답 형식 (FastAPI)

from pydantic import BaseModel from typing import Generic, TypeVar, Optional T = TypeVar('T') class ApiResponse(BaseModel, Generic[T]): success: bool data: Optional[T] = None error: Optional[str] = None @classmethod def ok(cls, data: T) -> "ApiResponse[T]": return cls(success=True, data=data) @classmethod def fail(cls, error: str) -> "ApiResponse[T]": return cls(success=False, error=error)

프론트엔드 API 호출 (TypeScript)

interface ApiResponse<T> { success: boolean data?: T error?: string } async function fetchApi<T>( endpoint: string, options?: RequestInit ): Promise<ApiResponse<T>> { try { const response = await fetch(`/api${endpoint}`, { ...options, headers: { 'Content-Type': 'application/json', ...options?.headers, }, }) if (!response.ok) { return { success: false, error: `HTTP ${response.status}` } } return await response.json() } catch (error) { return { success: false, error: String(error) } } }

Claude AI 통합 (구조화된 출력)

from anthropic import Anthropic from pydantic import BaseModel class AnalysisResult(BaseModel): summary: str key_points: list[str] confidence: float async def analyze_with_claude(content: str) -> AnalysisResult: client = Anthropic() response = client.messages.create( model="claude-sonnet-4-5-20250514", max_tokens=1024, messages=[{"role": "user", "content": content}], tools=[{ "name": "provide_analysis", "description": "구조화된 분석 제공", "input_schema": AnalysisResult.model_json_schema() }], tool_choice={"type": "tool", "name": "provide_analysis"} ) # 도구 사용 결과 추출 tool_use = next( block for block in response.content if block.type == "tool_use" ) return AnalysisResult(**tool_use.input)

테스트 요구사항

백엔드 (pytest)

# 모든 테스트 실행 poetry run pytest tests/ # 커버리지와 함께 실행 poetry run pytest tests/ --cov=. --cov-report=html

테스트 구조:

import pytest from httpx import AsyncClient from main import app @pytest.fixture async def client(): async with AsyncClient(app=app, base_url="http://test") as ac: yield ac @pytest.mark.asyncio async def test_health_check(client: AsyncClient): response = await client.get("/health") assert response.status_code == 200 assert response.json()["status"] == "healthy"

프론트엔드 (React Testing Library)

# 테스트 실행 npm run test # E2E 테스트 실행 npm run test:e2e

배포 워크플로우

배포 전 체크리스트

  • 로컬에서 모든 테스트 통과
  • npm run build 성공 (프론트엔드)
  • poetry run pytest 통과 (백엔드)
  • 하드코딩된 시크릿 없음
  • 환경 변수 문서화됨
  • 데이터베이스 마이그레이션 준비됨

배포 명령어

# 프론트엔드 빌드 및 배포 cd frontend && npm run build gcloud run deploy frontend --source . # 백엔드 빌드 및 배포 cd backend gcloud run deploy backend --source .

환경 변수

# 프론트엔드 (.env.local) NEXT_PUBLIC_API_URL=https://api.example.com NEXT_PUBLIC_SUPABASE_URL=https://xxx.supabase.co NEXT_PUBLIC_SUPABASE_ANON_KEY=eyJ... # 백엔드 (.env) DATABASE_URL=postgresql://... ANTHROPIC_API_KEY=sk-ant-... SUPABASE_URL=https://xxx.supabase.co SUPABASE_KEY=eyJ...

중요 규칙

규칙설명
이모지 금지코드, 주석, 문서에서
불변성객체나 배열 절대 변경하지 않기
TDD구현 전 테스트 작성
80% 커버리지최소 요구사항
파일 크기일반적으로 200-400줄, 최대 800줄
console.log 금지프로덕션 코드에서
적절한 오류 처리try/catch 사용
입력 검증Pydantic/Zod 사용

관련 스킬

  • coding-standards.md - 일반 코딩 모범 사례
  • backend-patterns.md - API 및 데이터베이스 패턴
  • frontend-patterns.md - React 및 Next.js 패턴
  • tdd-workflow/ - 테스트 주도 개발 방법론
Last updated on