SAMILJUL은 사용자가 선택한 테마, 위치, 시간에 따라 최적의 데이트 코스를 추천해주는 서비스입니다.
React, Node.js, Firebase를 사용하여 동적으로 개인화된 추천을 제공합니다.
-
테마 기반 추천
- 카페, 음식점, 관광명소 등 사용자가 선택한 테마에 따라 코스를 제공합니다.
-
지역 맞춤형 추천
- 서울 내 지역을 기반으로 한 지역별 맞춤형 추천.
-
실시간 별점 정보 통합
- 크롤링을 통해 Firebase에 최신 별점 데이터를 저장하고 이를 활용.
-
사용자 지정 시간 설정
- 시작 및 종료 시간을 설정해 스케줄에 맞춘 코스를 제공합니다.
-
직관적인 사용자 경험
- React 기반 인터페이스로 모바일과 데스크톱 환경 모두 지원.
- 프론트엔드: React, Styled-Components
- 백엔드: Node.js, Express.js
- 데이터베이스: Firebase Firestore
- 크롤링: Puppeteer
- 외부 API: Kakao Map API
samiljul/
├── server/ # 백엔드 서버 코드
│ ├── api/ # API 통합 파일
│ │ └── kakaoApi.js # Kakao Map API 함수
│ ├── crawler/ # 웹 크롤링 스크립트
│ │ ├── placeCrawler.js # Puppeteer 기반 크롤링 로직
│ │ └── crawler.js # 크롤링 배치 처리
│ ├── index.js # Node.js 서버 진입점
│ └── serviceAccountKey.json # Firebase 서비스 계정 키
├── client/ # 프론트엔드 React 앱
│ ├── src/ # React 앱 소스 코드
│ │ ├── components/ # React 컴포넌트
│ │ ├── pages/ # 주요 앱 페이지
│ │ └── App.js # 루트 React 컴포넌트
│ └── public/ # 정적 자산
├── .gitignore # Git에서 제외할 파일 및 디렉토리
├── package.json # 프로젝트 종속성
└── README.md # 프로젝트 문서
- Node.js (v14 이상 권장)
- Firebase 계정 및 Firestore 활성화
- Kakao Developers API 키
git clone https://github.com/pataegonia/samiljul.git
cd samiljul# 클라이언트와 서버 각각 설치
npm installserver/serviceAccountKey.json에 Firebase 서비스 계정 키 추가.- Firestore 데이터베이스 구조는
FD6,CE7,AT4,CT1와 같은 컬렉션이 필요.
server/api/kakaoApi.js에서<your_kakao_api_key>를 Kakao REST API 키로 대체.
npm run devhttp://localhost:5000에서 애플리케이션을 실행.
- Method:
POST - 설명: 테마, 시간, 위치를 기반으로 추천 코스를 생성합니다.
- 요청 본문:
{ "theme": ["FD6", "CE7", "AT4"], "date": "2024-11-13", "time": { "start": 9, "end": 18 }, "location": { "name": "강남구", "position": [37.49037, 127.06203] } } - 응답:
{ "course": { "FD6": [{ "place_name": "Sample Restaurant", "rating": "4.2" }], "CE7": [{ "place_name": "Sample Cafe", "rating": "4.5" }] } }
- Method:
POST - 설명: 장소 정보를 크롤링하여 별점 데이터를 Firestore에 업데이트합니다.
- Method:
POST - 설명: 특정 장소의 크롤링을 즉시 실행합니다.
-
장소 데이터 가져오기
Kakao Map API를 사용하여 사용자가 선택한 테마와 위치를 기반으로 장소 데이터를 가져옵니다. -
웹 크롤링
Puppeteer를 사용하여 장소의 별점과 리뷰 데이터를 크롤링합니다. -
Firestore 통합
크롤링된 데이터를 Firebase Firestore에 저장하여 효율적인 데이터 조회를 지원합니다. -
추천 코스 생성
별점과 사용자 선호도를 기반으로 필터링 및 정렬된 추천 코스를 제공합니다.
- 민감 데이터:
서비스 계정 키와 API 키는.gitignore에 포함되어 외부에 노출되지 않습니다. - 요청 제한:
Kakao Map API 및 크롤링 작업에는 적절한 딜레이를 적용해 과도한 요청을 방지합니다.
- 사용자 인증 기능 추가 (즐겨찾기 저장 지원).
- 시간대 별 추천 기능
- 이미지 지원
- 웹 배포 예정