프로젝트 기간 : 2023. 09. 27 ~ 2023. 11. 21
"망고플레이터"의 서비스 종료를 앞두고, 이를 대체하는 대학가 맛집 공유 웹앱 프로젝트입니다.
-
회원 관리
카카오 기반 OAuth를 활용하여 회원 관리
-
식당 관리
식당 태그 / 카테고리 별 목록 조회
식당 상세 조회(메뉴, 카카오맵, 식당 연락처 등)
식당 정보 관리
식당 스크랩하여 마이페이지에서 조회하기
식당 리뷰 등록하기
해당 프로젝트에서는 MongoDB를 사용하여 데이터를 저장하고, Mongoose를 통해 데이터 모델을 정의했습니다.
| 필드명 | 타입 | 설명 | 필수 여부 | 기본값 |
|---|---|---|---|---|
name |
String |
사용자 이름 | ✅ | 없음 |
profileImage |
String |
프로필 이미지 경로 | ❌ | default.jpg |
email |
String |
사용자 이메일 | ❌ | 없음 |
bookmarkedRestaurants |
ObjectId[] |
즐겨찾기한 식당 목록 (Restaurant 참조) | ❌ | 없음 |
active |
Boolean |
활성 상태 여부 (비활성 사용자는 제외) | ❌ | true |
bookmarks:bookmarkedRestaurants필드와Restaurant컬렉션의 관계를 참조합니다.
- 쿼리 미들웨어: 모든
find쿼리에서active가false인 사용자는 자동으로 제외됩니다.
userSchema.pre(/^find/, function (next) {
this.find({ active: { $ne: false } });
next();
});| 필드명 | 타입 | 설명 | 필수 여부 | 기본값 |
|---|---|---|---|---|
name |
String |
식당 이름 | ✅ | 없음 |
typeOfFood |
String |
식당 카테고리 | ✅ | 없음 |
address |
String |
주소 | ✅ | 없음 |
menu |
Array |
메뉴 목록 (name, price 필드 포함) |
❌ | 없음 |
images |
String[] |
식당 이미지 경로 배열 | ❌ | 없음 |
tags |
String[] |
식당 태그 | ❌ | 없음 |
active |
Boolean |
활성 상태 여부 | ❌ | true |
reviews:Restaurant과Review컬렉션의 관계를 참조합니다.
| 필드명 | 타입 | 설명 | 필수 여부 | 기본값 |
|---|---|---|---|---|
restaurant |
ObjectId |
리뷰 대상 식당 (Restaurant 참조) | ✅ | 없음 |
user |
ObjectId |
리뷰 작성자 (User 참조) | ✅ | 없음 |
content |
String |
리뷰 내용 | ✅ | 없음 |
rating |
Number |
평점 | ✅ | 없음 |
createdAt |
Date |
리뷰 작성 시간 | ❌ | 현재 시간 (Date.now) |
- 쿼리 미들웨어:
find쿼리 실행 시user필드의name만 자동으로 포함되도록 설정됩니다.
reviewSchema.pre(/^find/, function (next) {
this.populate({
path: 'user',
select: 'name',
});
next();
});-
User ↔ Restaurant
- 사용자는 즐겨찾기한 식당 목록을 관리 (
bookmarkedRestaurants)합니다. bookmarks가상 필드를 통해Restaurant와의 관계를 참조합니다.
- 사용자는 즐겨찾기한 식당 목록을 관리 (
-
Restaurant ↔ Review
- 식당은 리뷰 목록 (
reviews)을 가집니다. reviews가상 필드를 통해Review와의 관계를 참조합니다.
- 식당은 리뷰 목록 (
-
Review ↔ User
- 리뷰 작성자는
user필드를 통해User를 참조합니다.
- 리뷰 작성자는



