-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Labels
documentationImprovements or additions to documentationImprovements or additions to documentationgood first issueGood for newcomersGood for newcomers
Description
나만의 칵테일 저장소 PRD (Product Requirements Document)
1. 프로젝트 개요
1.1 제품명
나만의 칵테일 저장소 (My Cocktail Collection)
1.2 프로젝트 목표
20세 주류 애호가 대학생을 위한 개인 맞춤형 칵테일 레시피 저장 및 공유 플랫폼 구축. MSA(Microservices Architecture)와 CI/CD 파이프라인을 활용한 현대적 개발 경험 제공.
1.3 타겟 사용자
- 페르소나: 김민수 (20세, 남성, 대학생)
- 특징: 술을 즐기고 자신만의 칵테일 조합을 기록하고 친구들과 공유하고 싶어함
- 니즈: 직관적인 시각화와 함께 레시피를 저장하고 손쉽게 공유할 수 있는 도구
2. 기술 아키텍처
2.1 마이크로서비스 구조
Client (Flutter) → API Gateway → User Service / Recipe Service
2.1.1 사용자 서비스 (User Service)
- 책임: 사용자 인증 및 계정 관리
- 주요 기능: 회원가입, 로그인, 사용자 정보 관리
- API 엔드포인트:
/users,/auth/login,/auth/register
2.1.2 레시피 서비스 (Recipe Service)
- 책임: 칵테일 레시피 CRUD 및 이미지 처리
- 주요 기능: 레시피 생성/조회/수정/삭제, 이미지 생성, 공유 링크 생성
- API 엔드포인트:
/recipes,/recipes/{id},/recipes/{id}/share
2.2 기술 스택
- 백엔드: FastAPI
- 프론트엔드: Flutter
- 데이터베이스: PostgreSQL, Redis
- 이미지 저장: AWS S3 또는 Cloudinary
- 배포: Docker + AWS/GCP (무료 티어)
- CI/CD: GitHub Actions
3. 핵심 기능 명세
3.1 기능 목록
| 기능 ID | 기능명 | 설명 | 우선순위 |
|---|---|---|---|
| F-01 | 나만의 조합 저장 | 칵테일 레시피 생성 및 저장 | High |
| F-02 | 직관적 이미지 제공 | 비율 기반 시각화 이미지 자동 생성 | High |
| F-03 | 유저 인증 | 회원가입, 로그인 기능 | High |
| F-04 | 레시피 공유 | 공유 링크 생성 및 접근 | Medium |
3.2 상세 기능 명세
F-01: 나만의 조합 저장
사용자 스토리: "나만의 칵테일 레시피를 상세하게 기록하고 싶다"
기능 요구사항:
- 칵테일 이름 입력 (필수)
- 베이스 주류 선택 (필수)
- 추가 재료 및 비율 입력 (ml/oz 단위)
- 제작 과정 메모 (선택)
- 개인 팁 기록 (선택)
- 완성 사진 업로드 (선택)
비기능 요구사항:
- 레시피 저장 응답시간 < 2초
- 이미지 업로드 크기 제한 5MB
F-02: 직관적 이미지 제공
사용자 스토리: "내가 입력한 레시피를 한눈에 알아볼 수 있는 이미지가 있으면 좋겠다"
기능 요구사항:
- 주류별 병 이미지 템플릿 제공 (위스키, 진, 보드카, 럼 등)
- 입력된 비율에 따른 색상 레이어 자동 생성
- 재료별 색상 구분 (진-투명, 위스키-갈색, 크랜베리주스-빨강 등)
- 생성된 이미지와 레시피 연동 저장
기술 요구사항:
- Canvas API 또는 서버사이드 이미지 생성 라이브러리 활용
- 이미지 생성 시간 < 3초
F-03: 유저 인증
사용자 스토리: "내 레시피를 안전하게 관리하고 싶다"
기능 요구사항:
- 이메일 기반 회원가입
- 로그인/로그아웃
- 비밀번호 찾기
- 사용자 프로필 관리
보안 요구사항:
- JWT 토큰 기반 인증
- 비밀번호 해시화 (bcrypt)
- 토큰 만료시간 24시간
F-04: 레시피 공유
사용자 스토리: "친구들과 내 레시피를 쉽게 공유하고 싶다"
기능 요구사항:
- 고유 공유 링크 생성
- 링크 접근 시 레시피 상세 정보 표시
- 앱 설치 없이 웹에서 접근 가능
- 공유 횟수 추적 (선택)
4. 사용자 인터페이스
4.1 주요 화면 구성
- 로그인/회원가입 화면
- 메인 대시보드 (내 레시피 목록)
- 레시피 생성 화면
- 레시피 상세 보기
- 공유 링크 페이지
4.2 UI/UX 가이드라인
- 모바일 우선 반응형 디자인
- 직관적이고 깔끔한 인터페이스
- 칵테일 테마에 맞는 색상 팔레트 (골드, 딥블루, 크림 등)
5. CI/CD 파이프라인
5.1 파이프라인 구성
코드 Push → GitHub Actions 트리거
↓
빌드 및 테스트 실행
↓
Docker 이미지 생성
↓
클라우드 배포
↓
배포 완료 알림
5.2 단계별 상세
- Trigger: main 브랜치 push 또는 PR 생성
- Build:
- Java/Kotlin 컴파일 또는 Node.js 빌드
- 의존성 설치 및 검증
- Test:
- 단위 테스트 실행
- 통합 테스트 실행
- 테스트 커버리지 80% 이상 유지
- Docker:
- Dockerfile 기반 이미지 생성
- 이미지 레지스트리 푸시
- Deploy:
- 클라우드 인스턴스에 컨테이너 배포
- 헬스체크 및 롤백 대비
6. 데이터 모델
6.1 사용자 정보
{
"userId": "string",
"email": "string",
"username": "string",
"createdAt": "datetime",
"updatedAt": "datetime"
}6.2 레시피 정보
{
"recipeId": "string",
"userId": "string",
"title": "string",
"baseSpirit": "string",
"ingredients": [
{
"name": "string",
"amount": "number",
"unit": "string",
"color": "string"
}
],
"instructions": "string",
"notes": "string",
"photoUrl": "string",
"visualImageUrl": "string",
"shareId": "string",
"isPublic": "boolean",
"createdAt": "datetime",
"updatedAt": "datetime"
}7. 성능 및 확장성
7.1 성능 목표
- 페이지 로딩 시간 < 3초
- API 응답 시간 < 2초
- 이미지 생성 시간 < 3초
- 동시 사용자 100명 지원
7.2 확장성 고려사항
- 마이크로서비스별 독립적 확장
- 이미지 CDN 활용
- 데이터베이스 샤딩 고려 (향후)
- 캐싱 전략 (Redis)
8. 보안 요구사항
8.1 인증 및 권한
- JWT 기반 stateless 인증
- CORS 정책 적용
- Rate limiting 적용
8.2 데이터 보안
- HTTPS 통신 강제
- 개인정보 암호화
- SQL Injection 방어
9. 개발 일정
Phase 1 (4주) - MVP 개발
- 주 1-2: 아키텍처 설정 및 사용자 서비스 개발
- 주 3: 레시피 서비스 개발
- 주 4: 프론트엔드 개발 및 통합
Phase 2 (2주) - 완성도 향상
- 주 5: CI/CD 파이프라인 구축
- 주 6: 테스트 및 버그 수정, 배포
10. 성공 지표
10.1 기술적 지표
- 빌드 성공률 95% 이상
- 테스트 커버리지 80% 이상
- 평균 응답시간 2초 이하
10.2 사용자 지표
- 회원가입 후 첫 레시피 생성률 70% 이상
- 월 활성 사용자 유지율 60% 이상
- 레시피 공유 사용률 30% 이상
11. 위험 요소 및 완화 방안
11.1 기술적 위험
- 위험: MSA 복잡성으로 인한 개발 지연
- 완화: 단순한 2-서비스 구조로 시작, 점진적 확장
11.2 사용자 위험
- 위험: 직관적 이미지 기능의 사용성 이슈
- 완화: 사용자 테스트 기반 지속적 개선
11.3 인프라 위험
- 위험: 클라우드 비용 초과
- 완화: 무료 티어 한도 모니터링 및 알림 설정
문서 버전: 1.1
작성일: 2025년 9월 02일
수정일: 2025년 9월 04일
Metadata
Metadata
Assignees
Labels
documentationImprovements or additions to documentationImprovements or additions to documentationgood first issueGood for newcomersGood for newcomers