- Catch-Ping은 사용자 맞춤형 식당 추천과 효율적인 예약 및 알림 서비스를 제공하는 스마트 다이닝 플랫폼입니다.
- AI 추천 시스템과 성능 최적화를 통해 고객에게 최고의 사용자 경험을 제공합니다.
- 식당 예약 서비스인 캐치테이블 클론 프로젝트입니다.
- 주요 기능
- 식당 검색 및 예약: 원하는 키워드로 쉽고 빠르게 식당 검색 및 예약 가능
- 개인화된 AI 추천: 사용자 선호도와 식당 특성을 반영한 맞춤형 식당 추천
- 알림 시스템: 예약 상태 및 빈자리 발생 시 실시간 알림 발송
이름 | 역할 | 담당 R&R |
---|---|---|
김민철 | 팀장, Backend | 알림 기능, 온보딩 기능 |
이민우 | Backend | 예약 기능, 데이터 삽입 |
신우성 | Backend | 검색 기능, 식당 관련 기능 |
한주리 | Frontend | 홈화면, 식당 상세 + 예약 페이지 |
정채헌 | Frontend | 회원 기능, 온보딩, 검색 화면, 알림기능 |
김대현 | Cloud/AI | 인프라 설계 & 구축, 식당 추천 기능 |
Category | Tech |
---|---|
Backend |
|
Frontend |
|
Cloud & Infra |
|
AI |
|
- 로그인: 카카오 소셜로그인을 통한 로그인 및 첫 로그인 시 온보딩(성별, 전화번호, 선호 카테고리) 진행
- 마이페이지: 회원 예약 리스트, 빈자리 알림 리스트 반환 및 CRUD
- 예약 선점: 결제 전 6분간 선점 상태 → 좌석 차감 및 예약 우선권 확보
- 예약 선점 취소 & 확정: 선점 상태 취소(뒤로가기, 결제 취소) 및 확정 시 티켓 차감
- 예약 취소: 예약 완료 후 취소 시 티켓 반환 여부 정책 적용
- 티켓/좌석 증감 정책:
구분 좌석 증감 티켓 증감 예약 상태 예약 선점 -1 X IN_PROGRESS 예약 선점 취소 +1 X CANCELED 예약 확정 X -10 COMPLETED 예약 취소 X +10 또는 X CANCELED
자세한 내용은 예약 기능 전체 플로우를 참고하세요.
- 예약 리마인더: 예약 확정 시 이벤트 발행, 매일 08시 및 예약 1시간 전 알림 발송
- 빈자리 알림: 예약 취소 시 빈자리 발생 시 신청자에게 알림 발송
- 티켓 정책: 월별 빈자리 알림 티켓 10개 제공
- 예약 확인/취소 알림: 예약 완료/취소 시 FCM 서버를 통한 알림 전송 및 히스토리 저장
- 추천 정책:
- 사용자 데이터(선호 카테고리, 가격대, 검색, 찜, 예약 내역)와 식당 데이터(평점, 리뷰수, 편의시설 등)를 종합해 개인화된 식당 추천 제공
- 협업필터링 기반 추천 방식(CF)
- 검색 정책:
- 카테고리(한식, 중식, 일식 등 12종) 및 키워드 기반 검색 (식당 이름, 메뉴명 포함)
- 별점순, 가격순(높은/낮은) 정렬 지원
- 최적화 필요 (LIKE 검색 → Full Table Scan 문제 등)
- 테스트 도구: Jest + React Testing Library
- 주요 테스트 케이스:
- 식당 선점 중복 예약 방지
- 예약 가능 좌석 조회 정확도
- 선점 시간 종료 후 예약 취소
- 예약 확정 및 결제 후 예약 리스트 추가 확인
- 빈자리 알림 기능 (푸시 알림 등록 및 제거)
- 식당 리스트 페이지 최적화:
- 반복 컴포넌트 렌더링 최적화 (React.memo, useMemo)
- 이미지 Lazy Loading 적용
- 무한 스크롤 시 디바운스로 API 호출 최적화
- 식당 상세 페이지 최적화:
- 복잡한 컴포넌트 계층 구조 개선
- “좋아요(찜)” 버튼 클릭 시 불필요한 리렌더링 방지 (React.memo, useCallback)
- 상태 관리 라이브러리(Zustand, Recoil, React Query 등) 비교 후 적용
- 성능 분석 도구 활용:
- React Profiler API, why-did-you-render
- Lighthouse & Web Vitals (LCP, FID, CLS 등) 기반 성능 목표 설정
- 예약 선점 시 동시성 문제:
- 동시 예약 충돌 해결을 위해 비관적 락, Redis 분산 락 및 큐 시스템 고려
- 대량의 예약가능 데이터 삽입:
- 매월 66,000건 이상의 데이터 삽입 → DB 파티셔닝 및 배치 처리(JPA Batch, EntityManager.persist() 활용)
- 대량 알림 발송:
- FCM의 sendEachForMulticast 등 비동기 메서드 활용 및 배치 처리
- 알림 데이터 관리를 위해 NoSQL/Redis 캐시, pub/sub 적용
- 식당 조회 및 검색 최적화:
- 서브쿼리, 불필요한 JOIN 연산 제거 및 LIKE 검색 최적화 방안 적용 (Levenshtein, ElasticSearch 등)
- 추천 피드 반환 시간 단축:
- 기존 앙상블 기법 → 회귀 방식 전환 검토 (30초~1분 소요 문제 개선)
- 다양한 Feature 활용:
- 선호 가격대, 검색, 예약/찜 내역 등 추가 변수 도입으로 추천 모델 개선
- Redis 고가용성: Sentinel vs. Cluster 구성 검토
- 성능 모니터링: CloudWatch 또는 Prometheus & Grafana 활용
- 로그 및 데이터 관리: 로그 수집 및 Elastic Search 적용 고려
- 인프라 고가용성: 현재 하나의 가용영역(
ap-northeast-2a
) → 다중 가용영역(ap-northeast-2b
)으로 확장 및 로드밸런서 연결
이 프로젝트는 MIT 라이선스를 따릅니다.