3.7 KiB
3.7 KiB
직장인 점심 추천 미니앱 구현 계획
1. 기술 스택 제안
- MiniApp Frontend: Apps in Toss + Granite RN
- Backend API: Node.js (NestJS/Express) or Java Spring Boot
- DB: PostgreSQL
- Cache: Redis (선택)
- 지도/장소 데이터: Kakao/Google/Naver Place API 중 1개 선택
2. 프론트엔드 디렉터리 구조 제안
template/src/
_app.tsx
pages/
index.tsx # 홈/목록
restaurants/[id].tsx # 식당 상세
reviews/edit.tsx # 리뷰 작성/수정
me/reviews.tsx # 내 리뷰
_404.tsx
features/
location/
useCurrentLocation.ts
restaurants/
api.ts
models.ts
hooks.ts
reviews/
api.ts
hooks.ts
likes/
api.ts
components/
RestaurantCard.tsx
CategoryFilter.tsx
SortSelector.tsx
RatingStars.tsx
EmptyState.tsx
lib/
httpClient.ts
queryClient.ts
error.ts
constants/
category.ts
sort.ts
3. 백엔드 모듈 구조 제안
- auth
- 토스 사용자 식별자 검증/매핑
- restaurants
- 주변 조회, 상세 조회
- reviews
- 리뷰 upsert/delete/list
- likes
- 좋아요 토글
- users
- 내 리뷰 조회
- integrations
- 장소 API 클라이언트, 카테고리 매핑
4. 핵심 유스케이스별 처리
4.1 주변 식당 조회
- FE가 현재 좌표(lat,lng) 획득
- GET /v1/restaurants/nearby 호출
- BE는 내부 캐시 우선 조회
- 캐시 미스 시 장소 API 호출 + 표준 카테고리 매핑 + DB upsert
- 통계(join restaurant_stat) 결합 후 반환
4.2 리뷰 작성/수정
- FE가 rating/content 전송
- BE가 (restaurant_id, user_id) unique 기준 upsert
- refresh_restaurant_stat(restaurant_id) 호출
- 최신 리뷰/평점 반환
4.3 좋아요 토글
- row 존재 여부 확인
- 있으면 delete, 없으면 insert
- refresh_restaurant_stat 호출
- liked 상태와 like_count 반환
5. API 에러 규약
- 공통 포맷
{
"code": "INVALID_INPUT",
"message": "rating must be between 1 and 5",
"traceId": "..."
}
- 주요 코드
- UNAUTHORIZED
- FORBIDDEN
- NOT_FOUND
- INVALID_INPUT
- RATE_LIMITED
- INTERNAL_ERROR
6. 보안/악용 방지
- 리뷰/좋아요 API 인증 필수
- 리뷰 작성 rate limit (예: 사용자당 분당 5회)
- 욕설 필터(간단 키워드 + 신고 플래그)
- SQL injection/XSS 대비(파라미터 바인딩, escaping)
7. QA 체크리스트
- 위치 권한 허용/거부 둘 다 정상 동작
- 권한 거부 시 수동 지역 선택 제공
- 0개 결과(empty state) UI
- 느린 네트워크에서 skeleton/loading 표시
- 리뷰 저장 후 목록/평점 즉시 반영
- 좋아요 토글 연타 시 데이터 일관성 확인
- 앱 백그라운드 전환 후 복귀 시 상태 복원
8. 출시 전 운영 준비
- 개인정보처리방침/이용약관 페이지
- 고객 문의 채널(이메일/채팅 URL)
- 모니터링 대시보드
- API 성공률
- p95 latency
- 에러율
- 장애 대응 runbook
9. 개발 일정(예시, 2주)
Day 1-2
- 프로젝트 구조 확장
- 공통 HTTP 클라이언트/에러 처리
Day 3-5
- 식당 목록/상세 API + 화면
- 위치 권한/좌표 처리
Day 6-8
- 리뷰 CRUD + 좋아요 토글
- 통계 반영
Day 9-10
- 내 활동 화면
- QA/버그 수정
Day 11-12
- 성능/로그 점검
- 검수 대응 문서 정리
10. 바로 시작할 개발 순서
granite.config.ts의 appName/brand 값 실서비스 값으로 변경- 홈 목록 화면에 위치 권한 + nearby API 연결
- 식당 상세와 리뷰 작성 페이지 연결
- 리뷰/좋아요 API 붙이고 optimistic update 적용
- 검수 체크리스트 기준 점검 후 배포