주요 개발 수행 지침
1. 아키텍처 원칙
- 백엔드는 DDD + 헥사고날 구조다. 기능은
clover/apps/{fridge, auth, weather, ...}바운디드 컨텍스트(스포크)로 나눈다. - 스포크끼리 직접 import하지 않는다. 외부 연동(OCR, 이미지 저장소, 날씨)은 포트/어댑터로 감싼다.
- 외부 API는 실패를 전제로 설계한다. 날씨는 OpenWeather → Open-Meteo → 서울, 레시피는 Gemini → 준비된 레시피 순으로 폴백한다.
2. 하네스 — 코드 작성 후 필수 실행
린터 에러는 무시하지 않는다. 수정한 뒤에 완료로 본다.
| 영역 | 명령 |
|---|---|
Flutter (fortune/) | flutter analyze --fatal-infos · dart format --set-exit-if-changed . |
Python (clover/) | ruff check . --fix · ruff format . · mypy . |
Next.js (lucky/) | npm run lint · npx prettier --write . |
3. 설계 문서
기능마다 설계(design)와 구현 계획(plan)을 먼저 쓰고 구현한다. 저장소 _docs/에 있다.
| 기능 | 핵심 결정 | 작성 |
|---|---|---|
| 식재료 카탈로그 둘러보기 | 앱 시작하기가 동작하지 않던 문제 → 인증 없는 공개 카탈로그, 멱등 시드 스크립트 | 8.2 |
| 위치 기반 날씨 | 위젯 탭 시 위치 권한 요청, 한글 지명, /weather는 항상 200, lat/lon 한쪽만 오면 422 | 8.1 |
| 영수증 → 재고 | OCR·이미지 리더 포트 분리, 사용자 확인 후 저장, DB 저장·알림은 범위 밖 | 8.4 |
| 소셜 로그인 사전가입 | "로그인이 곧 가입"을 막음, provider 일치 필수, 우회 라우터 제거 | 8.2 |