{"id":23666526,"url":"https://github.com/dongju93/cocktail-maker","last_synced_at":"2026-04-17T15:33:00.557Z","repository":{"id":269324548,"uuid":"900036953","full_name":"dongju93/cocktail-maker","owner":"dongju93","description":"칵테일 제조에 필요한 다양한 주류의 특성(향, 맛, 여운 등), 정보, 이미지를 관리하고 검색할 수 있는 RESTful API 서비스로, MongoDB와 SQLite를 활용하여 주류 데이터와 메타데이터를 저장하고, JWT 기반 인증 시스템을 통해 사용자 권한을 관리합니다.","archived":false,"fork":false,"pushed_at":"2025-11-28T09:06:38.000Z","size":3050,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-11-30T17:53:18.083Z","etag":null,"topics":["backend","docker","fastapi","gunicorn","jwt","mongodb","python","react","rest-api","tailwindcss","typescript","uvicorn","vite"],"latest_commit_sha":null,"homepage":"https://dongju93.github.io/cocktail-maker/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dongju93.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2024-12-07T17:34:21.000Z","updated_at":"2025-10-03T15:40:13.000Z","dependencies_parsed_at":"2024-12-22T18:34:17.323Z","dependency_job_id":"dd0e72c5-023a-47e5-98f0-27184550a16d","html_url":"https://github.com/dongju93/cocktail-maker","commit_stats":null,"previous_names":["dongju93/cocktail-maker"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/dongju93/cocktail-maker","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dongju93%2Fcocktail-maker","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dongju93%2Fcocktail-maker/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dongju93%2Fcocktail-maker/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dongju93%2Fcocktail-maker/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dongju93","download_url":"https://codeload.github.com/dongju93/cocktail-maker/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dongju93%2Fcocktail-maker/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31934339,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-17T12:37:54.787Z","status":"ssl_error","status_checked_at":"2026-04-17T12:37:25.095Z","response_time":62,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["backend","docker","fastapi","gunicorn","jwt","mongodb","python","react","rest-api","tailwindcss","typescript","uvicorn","vite"],"created_at":"2024-12-29T07:32:41.833Z","updated_at":"2026-04-17T15:33:00.551Z","avatar_url":"https://github.com/dongju93.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 칵테일 메이커\n\nFastAPI와 React로 구축된 현대적인 한국어 칵테일 재료 데이터베이스 및 레시피 관리 시스템\n\n## 🚀 개요\n\n이 풀스택 웹 애플리케이션은 칵테일 재료, 레시피, 메타데이터를 관리하기 위한 종합 플랫폼을 제공합니다. 시스템은 주류, 리큐르, 보조 재료를 지원하며 상세한 속성 관리 및 검색 기능을 제공합니다.\n\n### ✨ 주요 기능\n\n- **🍸 재료 관리**: 주류, 리큐르, 재료에 대한 완전한 CRUD 작업\n- **🔍 고급 검색**: 모든 속성에 대한 전체 텍스트 검색 및 페이지네이션\n- **🏷️ 메타데이터 시스템**: 맛 프로필을 위한 카테고리별 설명 속성\n- **📸 이미지 지원**: 제품 이미지를 위한 파일 업로드 검증 및 저장\n- **🔐 인증**: JWT 기반 역할별 접근 제어\n- **📱 반응형 디자인**: TailwindCSS를 사용한 현대적인 React 프론트엔드\n- **⚡ 성능**: MongoDB와 SQLite를 사용한 비동기 우선 Python 백엔드\n\n## 🛠️ 기술 스택\n\n### 백엔드\n\n- **[FastAPI](https://fastapi.tiangolo.com/)** - 현대적인 비동기 Python 웹 프레임워크\n- **Python 3.13+** - uvloop 이벤트 루프 정책을 사용한 최신 Python\n- **[MongoDB](https://www.mongodb.com/)** - Motor(비동기 드라이버)를 통한 주 데이터 저장소\n- **[SQLite](https://www.sqlite.org/)** - SQLAlchemy ORM을 사용한 메타데이터 저장소\n- **[Pydantic](https://pydantic.dev/)** - 데이터 검증 및 설정 관리\n- **JWT** - 역할 기반 접근을 제공하는 커스텀 인증 시스템\n- **[Gunicorn](https://gunicorn.org/) + [Uvicorn](https://www.uvicorn.org/)** - 프로덕션 ASGI 서버\n\n### 프론트엔드\n\n- **[React 19](https://react.dev/)** - TypeScript를 사용한 최신 React\n- **[Vite](https://vite.dev/)** - Rolldown 번들러를 사용한 빌드 도구\n- **[TailwindCSS v4](https://tailwindcss.com/)** - 유틸리티 우선 CSS 프레임워크\n- **[React Router v7](https://reactrouter.com/)** - 클라이언트 사이드 라우팅\n- **[TypeScript](https://www.typescriptlang.org/)** - 정적 타입 검사\n\n### 개발 도구\n\n- **[UV](https://github.com/astral-sh/uv)** - 빠른 Python 패키지 관리자\n- **[PNPM](https://pnpm.io/)** - 효율적인 Node.js 패키지 관리자\n- **[Ruff](https://github.com/astral-sh/ruff)** - 빠른 Python 린터 및 포맷터\n- **[Pyright](https://github.com/microsoft/pyright)** - Python 정적 타입 검사기\n- **[Biome](https://biomejs.dev/)** - 빠른 TypeScript/React 린터 및 포맷터\n- **[MkDocs](https://www.mkdocs.org/)** - 문서 생성기\n\n## 🏗️ 아키텍처\n\n### 애플리케이션 구조\n\n```\ncocktail-maker/\n├── app/                    # FastAPI 백엔드\n│   ├── auth/               # 인증 (JWT, 역할, 암호화)\n│   ├── database/           # 데이터베이스 연결 (MongoDB, SQLite)\n│   ├── model/              # Pydantic 데이터 모델 및 유효성 검사\n│   ├── query/              # 데이터베이스 쿼리 로직 (추상화 포함)\n│   ├── utils/              # 로깅, 시간 등 공통 유틸리티\n│   ├── gunicorn.conf.py    # Gunicorn 서버 설정\n│   └── main.py             # FastAPI 애플리케이션 진입점 및 라우팅\n├── src/                    # React 프론트엔드\n│   ├── assets/             # 정적 에셋 (이미지, SVG)\n│   ├── components/         # 재사용 가능한 React 컴포넌트\n│   ├── contexts/           # React 컨텍스트 (테마 등)\n│   ├── hooks/              # 커스텀 훅 (API 호출, 테마 관리)\n│   ├── types/              # TypeScript 타입 정의\n│   ├── App.tsx             # 메인 애플리케이션 컴포넌트 및 라우팅\n│   └── main.tsx            # React 애플리케이션 진입점\n├── tests/                  # Pytest 테스트 스위트\n├── docs/                   # MkDocs 문서\n├── compose/                # Docker Compose 설정\n├── data/                   # 이미지 등 데이터 저장소\n├── public/                 # Vite public 에셋\n├── .github/workflows/      # GitHub Actions CI/CD 워크플로우\n├── pyproject.toml          # Python 프로젝트 및 의존성 설정 (uv)\n├── package.json            # Frontend 프로젝트 및 의존성 설정 (pnpm)\n└── README.md\n```\n\n### 백엔드 (app/)\n\n- **듀얼 데이터베이스 시스템**:\n  - **MongoDB**: 주 데이터(주류, 리큐르, 재료, 칵테일) 저장을 위해 `Motor` 비동기 드라이버 사용.\n  - **SQLite**: 맛, 향 등 메타데이터를 `SQLAlchemy` ORM을 통해 관계형으로 관리하여 데이터 일관성 보장.\n- **비동기 우선 설계**:\n  - `FastAPI`와 `uvloop` 이벤트 루프 정책을 채택하여 모든 데이터베이스 작업을 `async/await`으로 처리, 높은 처리량 달성.\n- **인증 시스템**:\n  - **JWT 토큰**: 액세스(15분) 및 리프레시(7일) 토큰 패턴을 사용한 상태 비저장 인증.\n  - **역할 기반 접근 제어(RBAC)**: `Admin`, `User`, `Guest` 역할을 정의하고 `Security` 의존성을 통해 엔드포인트 보호.\n  - **보안 쿠키**: `HttpOnly` 및 `Secure` 속성을 적용한 쿠키로 토큰을 전송하여 XSS 공격 방지.\n- **추상화된 쿼리 레이어 (`app/query/`)**:\n  - `CreateDocument`, `RetrieveDocument`, `SearchDocument` 등 추상 기본 클래스를 정의하여 CRUD 작업 표준화.\n  - 각 엔티티(주류, 리큐르 등)에 대한 구체적인 쿼리 클래스를 구현하여 재사용성 및 유지보수성 향상.\n- **표준화된 API 응답**:\n  - 모든 API는 `{\"status\", \"code\", \"data\", \"message\"}` 형식의 일관된 JSON 구조로 응답하여 클라이언트 처리 용이성 증대.\n- **이미지 처리**:\n  - `multipart/form-data`를 통한 파일 업로드 및 `Pillow`를 이용한 이미지 유효성 검사 및 처리.\n\n### 프론트엔드 (src/)\n\n- **React 19 및 TypeScript**: 최신 React 기능과 강력한 타입 시스템을 활용하여 안정적인 UI 개발.\n- **Vite 빌드 시스템**: `Rolldown` 번들러 기반의 Vite를 사용하여 빠른 개발 서버와 최적화된 프로덕션 빌드 제공.\n- **TailwindCSS v4**: 유틸리티 우선 CSS 프레임워크를 통해 일관되고 반응형 디자인 시스템 구축.\n- **클라이언트 사이드 라우팅**: `React Router v7`을 사용하여 모던하고 직관적인 페이지 네비게이션 구현.\n- **서버 상태 관리**: `@tanstack/react-query`를 사용하여 API 데이터 캐싱, 동기화, 재요청 등 서버 상태를 효율적으로 관리.\n- **커스텀 훅 (`src/hooks/`)**: `useApi`, `useMetadata` 등 API 호출 및 비즈니스 로직을 추상화한 커스텀 훅을 통해 코드 중복 최소화 및 재사용성 극대화.\n- **컴포넌트 기반 아키텍처**: 기능별로 분리된 재사용 가능한 컴포넌트(`SpiritsRegister`, `ImageUpload` 등)를 통해 유지보수성 및 확장성 확보.\n- **테마 관리**: `ThemeContext`를 사용하여 라이트/다크 모드 등 전역 테마를 손쉽게 관리.\n\n## 🚀 빠른 시작\n\n### 사전 요구사항\n\n- **Python 3.13+**\n- **Node.js 18+**\n- **UV** (Python 패키지 관리자)\n- **PNPM** (Node.js 패키지 관리자)\n\n### 설치\n\n```bash\n# 저장소 복제\ngit clone \u003crepository-url\u003e\ncd cocktail-maker\n\n# 백엔드 의존성 설치\nuv sync\n\n# 프론트엔드 의존성 설치\npnpm install\n\n# 개발 환경 설정\nuv run pre-commit install\n```\n\n### 개발\n\n```bash\n# 백엔드 서버 시작\nuv run uvicorn app.main:cocktail_maker --reload --host 127.0.0.1 --port 8000\n\n# 프론트엔드 개발 서버 시작 (새 터미널)\npnpm dev\n\n# 문서 서버 시작 (선택사항)\nuv run mkdocs serve\n```\n\n### 테스트\n\n```bash\n# 커버리지를 포함한 Python 테스트 실행\nTIMESTAMP=$(date +%Y%m%d-%H%M%S) \u0026\u0026 uv run pytest -s --cov=app --html=../tests/results/test-${TIMESTAMP}.html --self-contained-html\n\n# 코드 품질 검사 실행\nuvx ruff check --fix app/\nuvx pyright app/\npnpm lint\n```\n\n### 프로덕션 배포\n\n```bash\n# 프론트엔드 빌드\npnpm build\n\n# Docker Compose로 실행\ndocker compose -f compose/docker-compose-full-example.yaml up\n```\n\n## DB\n\n### 주류 및 리큐르\n\n속성\n\n- 주류별 ID, 명칭, 향, 맛, 여운, 종류, 용량, 도수, 국가, 지역, 설명, 사진\n\n### 보조 재료\n\n속성\n\n- 보조별 ID, 명칭, 종류, 설명, 사진\n\n### 메타데이터\n\n속성\n\n- 메타 ID, 명칭, 설명, 사진\n\n## 기능\n\n- **재료 관리 (Ingredient Management):** 주류, 리큐르, 기타 재료에 대한 완전한 CRUD 및 이미지 업로드 기능.\n- **칵테일 레시피 관리 (Cocktail Recipe Management):** 칵테일 레시피 등록, 조회, 검색, 수정, 삭제 기능.\n- **고급 검색 및 필터링 (Advanced Search \u0026 Filtering):** 재료 및 칵테일에 대한 다중 조건(이름, 도수, 원산지, 맛, 향 등) 검색, 페이지네이션, 정렬 기능.\n- **한국어 초성 검색 (Korean Consonant Search):** 자음을 이용한 빠른 재료 검색.\n- **메타데이터 시스템 (Metadata System):** 맛, 향, 여운 등 프로파일링을 위한 동적 속성 관리.\n- **추천 시스템 (Recommendation System):** 보유한 재료를 기반으로 제조 가능한 칵테일 추천.\n- **인증 및 권한 관리 (Authentication \u0026 Authorization):** JWT 토큰 기반 로그인, 역할(관리자, 사용자)에 따른 API 접근 제어, API 키 발급.\n- **사용자 맞춤 기능 (User Personalization):** 즐겨찾기, 평점 및 리뷰, 나만의 레시피 컬렉션 관리.\n- **커뮤니티 (Community):** 사용자들이 소통할 수 있는 게시판, 댓글, 좋아요 기능.\n- **관리자 대시보드 (Admin Dashboard):** 사용자 및 시스템 통계, 콘텐츠 관리 기능.\n- **성능 및 안정성 (Performance \u0026 Stability):** 비동기 처리, 결과 캐싱, API 요청 제한(Rate Limiting), 구조화된 로깅을 통한 고성능 및 안정적인 서비스 제공.\n\n## 📝 백엔드 개발 로드맵\n\n### 🚀 우선순위 높음 (핵심 기능)\n\n#### 1. 칵테일 레시피 CRUD 완성\n\n- [ ] **칵테일 레시피 상세 조회 API** (`GET /api/v1/cocktail/{name}`)\n  - 칵테일 이름으로 단일 레시피 조회\n  - 사용된 재료 정보와 연결하여 반환\n  - 메타데이터(맛, 향, 여운) 정보 포함\n- [ ] **칵테일 레시피 검색 API** (`GET /api/v1/cocktail/search`)\n  - 칵테일명, 재료, 글래스 타입, 원산지별 검색\n  - 페이지네이션 지원\n  - 검색 결과 정렬 (관련성, 이름순)\n- [ ] **칵테일 레시피 수정 API** (`PUT /api/v1/cocktail/{id}`)\n  - 기존 레시피 정보 업데이트\n  - 재료 목록 및 제조 단계 수정\n  - 이미지 업로드 및 교체\n- [ ] **칵테일 레시피 삭제 API** (`DELETE /api/v1/cocktail/{id}`)\n  - 레시피 소프트 삭제 또는 하드 삭제 구현\n  - 관련 이미지 파일 정리\n\n#### 2. 한국어 자음 검색 기능\n\n- [ ] **한국어 초성 검색 라이브러리 통합**\n  - 주류/리큐르/재료명에 대한 초성 검색 지원\n  - 예: \"ㅂㅅㅋ\" 입력 시 \"보스턴 칵테일\" 검색\n- [ ] **자음 검색 API 엔드포인트 추가**\n  - `/api/v1/spirits/search/consonant`\n  - `/api/v1/liqueur/search/consonant`\n  - `/api/v1/ingredient/search/consonant`\n- [ ] **검색 성능 최적화**\n  - MongoDB 인덱스 설정 (한글명 필드)\n  - 자음 매핑 테이블 구축\n\n#### 3. 재료-칵테일 관계 시스템\n\n- [ ] **재료별 칵테일 목록 API** (`GET /api/v1/spirits/{id}/cocktails`)\n  - 특정 주류/리큐르를 사용하는 칵테일 목록 반환\n  - 주재료/부재료 구분 표시\n- [ ] **칵테일별 재료 정보 확장**\n  - 필수/선택 재료 구분\n  - 대체 가능 재료 제안\n  - 재료별 중요도/비율 정보\n- [ ] **제조 가능한 칵테일 추천 API** (`POST /api/v1/cocktail/recommend`)\n  - 보유 재료 목록을 전송하면 제조 가능한 칵테일 반환\n  - 부족한 재료 개수별로 정렬\n  - 대체 재료 제안 포함\n\n### 📱 중간 우선순위 (사용자 경험)\n\n#### 4. 이메일 인증 시스템\n\n- [ ] **회원가입 시 이메일 중복 확인** (`POST /api/v1/auth/check-email`)\n  - 실시간 이메일 중복 검사\n  - 도메인 유효성 검증\n- [ ] **이메일 인증 토큰 발송**\n  - SMTP 서버 설정 (Gmail/SendGrid/AWS SES)\n  - 인증 토큰 생성 및 만료 처리\n  - 인증 이메일 템플릿 작성\n- [ ] **이메일 인증 확인 API** (`POST /api/v1/auth/verify-email`)\n  - 토큰 검증 후 계정 활성화\n  - 인증 실패 시 재발송 기능\n\n#### 5. 고급 검색 및 필터링\n\n- [ ] **복합 검색 조건 지원**\n  - 도수 범위 필터 (예: 20-40도)\n  - 다중 카테고리 선택\n  - 가격대별 필터링 (추가 필드 필요)\n- [ ] **검색 결과 정렬 옵션**\n  - 관련성, 이름순, 도수순, 평점순 정렬\n  - 오름차순/내림차순 선택\n- [ ] **검색 기록 및 인기 검색어**\n  - 사용자별 최근 검색 기록 저장\n  - 실시간 인기 검색어 집계\n\n#### 6. 파일 업로드 시스템 개선\n\n- [ ] **이미지 최적화 파이프라인**\n  - 자동 리사이징 (썸네일, 중간, 원본)\n  - WebP 형식 변환 지원\n  - 이미지 메타데이터 추출\n- [ ] **클라우드 스토리지 연동**\n  - AWS S3/Google Cloud Storage 연동\n  - CDN을 통한 이미지 서빙\n  - 이미지 URL 관리\n\n### 🌟 낮은 우선순위 (확장 기능)\n\n#### 7. 커뮤니티 게시판 시스템\n\n- [ ] **게시판 데이터 모델 설계**\n  - 게시글, 댓글, 대댓글 스키마\n  - 카테고리, 태그 시스템\n  - 첨부파일 지원\n- [ ] **게시글 CRUD API**\n  - `/api/v1/board/posts` - 게시글 목록/작성\n  - `/api/v1/board/posts/{id}` - 게시글 상세/수정/삭제\n  - 마크다운 에디터 지원\n- [ ] **댓글 시스템 API**\n  - `/api/v1/board/posts/{id}/comments` - 댓글 CRUD\n  - 대댓글(nested comments) 지원\n  - 댓글 정렬 옵션 (최신순, 추천순)\n- [ ] **좋아요/싫어요 시스템**\n  - 게시글/댓글별 평가 기능\n  - 중복 평가 방지 로직\n  - 실시간 평가 수 집계\n- [ ] **실시간 알림 시스템**\n  - 댓글 작성 시 원글 작성자 알림\n  - WebSocket 또는 Server-Sent Events 구현\n  - 알림 설정 관리 API\n\n#### 8. 사용자 개인화 기능\n\n- [ ] **즐겨찾기 시스템**\n  - 주류/칵테일 즐겨찾기 추가/제거\n  - 개인 즐겨찾기 목록 조회\n- [ ] **평점 및 리뷰 시스템**\n  - 주류/칵테일별 평점 (1-5점)\n  - 리뷰 작성 및 관리\n  - 평점 기반 추천 알고리즘\n- [ ] **개인 칵테일 레시피 컬렉션**\n  - 사용자가 직접 작성한 레시피 관리\n  - 공개/비공개 설정\n  - 다른 사용자와 레시피 공유\n\n#### 9. 관리자 기능 강화\n\n- [ ] **관리자 대시보드 API**\n  - 사용자 통계, 인기 검색어\n  - 시스템 사용량 모니터링\n- [ ] **컨텐츠 관리 기능**\n  - 부적절한 게시글/댓글 신고 처리\n  - 일괄 데이터 등록/수정 도구\n  - 이미지 일괄 처리\n\n#### 10. API 성능 및 안정성\n\n- [ ] **캐싱 시스템 도입**\n  - Redis를 이용한 검색 결과 캐싱\n  - 메타데이터 캐싱으로 응답 속도 향상\n- [ ] **API 속도 제한 (Rate Limiting)**\n  - 사용자별/IP별 요청 제한\n  - API 키별 차등 제한\n- [ ] **로깅 및 모니터링 강화**\n  - 구조화된 로그 형식 정립\n  - 성능 메트릭 수집\n  - 에러 추적 시스템\n\n### 📋 개발 진행 가이드\n\n#### 단계별 구현 순서\n\n1. **1단계**: 칵테일 CRUD 완성 → 자음 검색 → 재료-칵테일 관계\n2. **2단계**: 이메일 인증 → 고급 검색 → 파일 업로드 개선\n3. **3단계**: 커뮤니티 기능 → 개인화 → 관리자 기능 → 성능 최적화\n\n#### 각 기능 구현 시 체크리스트\n\n- [ ] Pydantic 모델 정의 (`app/model/`)\n- [ ] MongoDB 컬렉션 스키마 설계\n- [ ] 쿼리 클래스 구현 (`app/query/`)\n- [ ] API 엔드포인트 구현 (`app/main.py`)\n- [ ] 에러 핸들링 및 로깅\n- [ ] 단위 테스트 작성 (`tests/`)\n- [ ] API 문서화 (FastAPI 자동 생성)\n- [ ] 성능 테스트 (필요시)\n\n## 🧪 테스트\n\n커버리지 리포트와 함께 전체 테스트 스위트를 실행합니다:\n\n```bash\nTIMESTAMP=$(date +%Y%m%d-%H%M%S) \u0026\u0026 uv run pytest -s --cov=app --html=../tests/results/test-${TIMESTAMP}.html --self-contained-html\n```\n\n## 🤝 기여하기\n\n1. **코드 품질**: 모든 코드는 린팅, 타입 검사, 테스트를 통과해야 합니다\n2. **Pre-commit 훅**: `uv run pre-commit install`로 설치\n3. **테스트**: 새로운 기능과 버그 수정에 대한 테스트 작성\n4. **문서**: API 변경사항에 대한 문서 업데이트\n\n### 개발 워크플로우\n\n```bash\n# 커밋하기 전에\nuvx ruff check --fix app/\nuvx ruff format app/\nuvx pyright app/\npnpm lint\npnpm format\nuv run pytest tests/ --cov=app\n```\n\n## 📄 라이선스\n\n이 프로젝트는 여러 오픈소스 의존성을 포함합니다. 자세한 정보는 아래 라이선스 표를 참조하세요.\n\n## Licenses\n\n| Name                       | Version     | License                                             |\n| -------------------------- | ----------- | --------------------------------------------------- |\n| Brotli                     | 1.1.0       | MIT License                                         |\n| Deprecated                 | 1.2.18      | MIT License                                         |\n| Jinja2                     | 3.1.6       | BSD License                                         |\n| Markdown                   | 3.9         | UNKNOWN                                             |\n| MarkupSafe                 | 3.0.2       | BSD License                                         |\n| PyJWT                      | 2.10.1      | MIT License                                         |\n| PyYAML                     | 6.0.2       | MIT License                                         |\n| Pygments                   | 2.19.2      | BSD License                                         |\n| SQLAlchemy                 | 2.0.43      | MIT                                                 |\n| Secweb                     | 1.25.2      | UNKNOWN                                             |\n| aiofiles                   | 24.1.0      | Apache Software License                             |\n| aiohappyeyeballs           | 2.6.1       | Python Software Foundation License                  |\n| aiohttp                    | 3.12.15     | Apache-2.0 AND MIT                                  |\n| aiohttp-retry              | 2.9.1       | MIT License                                         |\n| aiosignal                  | 1.4.0       | Apache Software License                             |\n| aiosmtplib                 | 3.0.2       | MIT                                                 |\n| annotated-types            | 0.7.0       | MIT License                                         |\n| anyio                      | 4.10.0      | UNKNOWN                                             |\n| asgiref                    | 3.9.1       | BSD License                                         |\n| attrs                      | 25.3.0      | UNKNOWN                                             |\n| babel                      | 2.17.0      | BSD License                                         |\n| backrefs                   | 5.9         | MIT License                                         |\n| certifi                    | 2025.8.3    | Mozilla Public License 2.0 (MPL 2.0)                |\n| cffi                       | 2.0.0       | UNKNOWN                                             |\n| cfgv                       | 3.4.0       | MIT License                                         |\n| charset-normalizer         | 3.4.3       | MIT                                                 |\n| click                      | 8.2.1       | UNKNOWN                                             |\n| colorama                   | 0.4.6       | BSD License                                         |\n| coverage                   | 7.10.6      | Apache-2.0                                          |\n| cryptography               | 45.0.7      | Apache-2.0 OR BSD-3-Clause                          |\n| distlib                    | 0.4.0       | Python Software Foundation License                  |\n| dnspython                  | 2.8.0       | ISC License (ISCL)                                  |\n| email-validator            | 2.3.0       | The Unlicense (Unlicense)                           |\n| fastapi                    | 0.116.1     | MIT License                                         |\n| fastapi-cli                | 0.0.11      | MIT License                                         |\n| fastapi-cloud-cli          | 0.1.5       | MIT License                                         |\n| filelock                   | 3.19.1      | The Unlicense (Unlicense)                           |\n| frozenlist                 | 1.7.0       | Apache-2.0                                          |\n| ghp-import                 | 2.1.0       | Apache Software License                             |\n| griffe                     | 1.14.0      | UNKNOWN                                             |\n| gunicorn                   | 23.0.0      | MIT License                                         |\n| h11                        | 0.16.0      | MIT License                                         |\n| httpcore                   | 1.0.9       | BSD License                                         |\n| httptools                  | 0.6.4       | MIT License                                         |\n| httpx                      | 0.28.1      | BSD License                                         |\n| identify                   | 2.6.14      | MIT                                                 |\n| idna                       | 3.10        | BSD License                                         |\n| iniconfig                  | 2.1.0       | MIT License                                         |\n| markdown-it-py             | 4.0.0       | MIT License                                         |\n| mdurl                      | 0.1.2       | MIT License                                         |\n| mergedeep                  | 1.3.4       | MIT License                                         |\n| mkdocs                     | 1.6.1       | BSD License                                         |\n| mkdocs-autorefs            | 1.4.3       | UNKNOWN                                             |\n| mkdocs-get-deps            | 0.2.0       | MIT License                                         |\n| mkdocs-material            | 9.6.19      | MIT License                                         |\n| mkdocs-material-extensions | 1.3.1       | MIT License                                         |\n| mkdocstrings               | 0.30.0      | UNKNOWN                                             |\n| mkdocstrings-python        | 1.18.2      | UNKNOWN                                             |\n| multidict                  | 6.6.4       | Apache License 2.0                                  |\n| nodeenv                    | 1.9.1       | BSD License                                         |\n| orjson                     | 3.11.3      | Apache Software License; MIT License                |\n| packaging                  | 25.0        | Apache Software License; BSD License                |\n| paginate                   | 0.5.7       | MIT License                                         |\n| pathspec                   | 0.12.1      | Mozilla Public License 2.0 (MPL 2.0)                |\n| phonenumbers               | 8.13.55     | Apache Software License                             |\n| pillow                     | 11.3.0      | UNKNOWN                                             |\n| pkce                       | 1.0.3       | MIT License                                         |\n| platformdirs               | 4.4.0       | MIT License                                         |\n| pluggy                     | 1.6.0       | MIT License                                         |\n| pre_commit                 | 4.3.0       | MIT                                                 |\n| propcache                  | 0.3.2       | Apache Software License                             |\n| pycparser                  | 2.23        | BSD License                                         |\n| pycryptodome               | 3.20.0      | Apache Software License; BSD License; Public Domain |\n| pydantic                   | 2.11.7      | MIT License                                         |\n| pydantic_core              | 2.33.2      | MIT License                                         |\n| pyinstrument               | 5.1.1       | BSD License                                         |\n| pymdown-extensions         | 10.16.1     | MIT License                                         |\n| pymongo                    | 4.15.0      | Apache Software License                             |\n| pyotp                      | 2.9.0       | MIT License                                         |\n| pytest                     | 8.4.2       | MIT License                                         |\n| pytest-asyncio             | 1.1.0       | UNKNOWN                                             |\n| pytest-cov                 | 7.0.0       | MIT License                                         |\n| pytest-dotenv              | 0.5.2       | MIT License                                         |\n| pytest-html                | 4.1.1       | MIT License                                         |\n| pytest-metadata            | 3.1.1       | Mozilla Public License 2.0 (MPL 2.0)                |\n| python-dateutil            | 2.9.0.post0 | Apache Software License; BSD License                |\n| python-dotenv              | 1.1.1       | BSD License                                         |\n| python-multipart           | 0.0.20      | Apache Software License                             |\n| pyyaml_env_tag             | 1.1         | UNKNOWN                                             |\n| requests                   | 2.32.5      | Apache Software License                             |\n| requests-file              | 2.1.0       | Apache Software License                             |\n| rich                       | 14.1.0      | MIT License                                         |\n| rich-toolkit               | 0.15.1      | MIT License                                         |\n| rignore                    | 0.6.4       | MIT                                                 |\n| sentry-sdk                 | 2.37.1      | BSD License                                         |\n| setproctitle               | 1.3.7       | BSD License                                         |\n| shellingham                | 1.5.4       | ISC License (ISCL)                                  |\n| six                        | 1.17.0      | MIT License                                         |\n| sniffio                    | 1.3.1       | Apache Software License; MIT License                |\n| sqlmodel                   | 0.0.24      | MIT License                                         |\n| starlette                  | 0.47.3      | BSD License                                         |\n| starlette-compress         | 1.6.1       | Zero-Clause BSD (0BSD)                              |\n| structlog                  | 25.4.0      | Apache Software License; MIT License                |\n| supertokens_python         | 0.30.2      | Apache Software License                             |\n| tldextract                 | 5.3.0       | BSD License                                         |\n| twilio                     | 9.8.0       | MIT License                                         |\n| typer                      | 0.17.4      | MIT License                                         |\n| typing-inspection          | 0.4.1       | UNKNOWN                                             |\n| typing_extensions          | 4.15.0      | UNKNOWN                                             |\n| urllib3                    | 2.5.0       | UNKNOWN                                             |\n| uvicorn                    | 0.35.0      | BSD License                                         |\n| uvicorn-worker             | 0.3.0       | MIT License                                         |\n| uvloop                     | 0.21.0      | Apache Software License; MIT License                |\n| virtualenv                 | 20.34.0     | MIT License                                         |\n| watchdog                   | 6.0.0       | Apache Software License                             |\n| watchfiles                 | 1.1.0       | MIT License                                         |\n| websockets                 | 15.0.1      | BSD License                                         |\n| wrapt                      | 1.17.3      | BSD License                                         |\n| yarl                       | 1.20.1      | Apache Software License                             |\n| zstandard                  | 0.24.0      | BSD License                                         |\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdongju93%2Fcocktail-maker","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdongju93%2Fcocktail-maker","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdongju93%2Fcocktail-maker/lists"}