# "자리:Bean" - 카페 위치 탐색 및 예약 서비스
![](https://hackmd.io/_uploads/HykQw6Nsh.png)
카페 매장과 손님을 연결해주는 매칭 서비스로 손님들은 원하는 카페를 쉽게 찾을 수 있고, 카페는 예약과 주문을 받아 더욱 효율적인 운영이 가능해진다.
### 🙆♂️[~~배포 페이지~~]🙆
## 프로젝트 개요
### 소프트웨어 마에스트로 14기 - 팀 99℃ 의 프로젝트
- **자리:Bean - 카페 예약 및 매칭 서비스**
- 개발 기간 : 2023.6.20 ~ 진행중
- 🗄 [ 기획서](https://lineno2.notion.site/d4f2664412df48b6b9412e57b21bf90a?pvs=4)
- 👩💻 [ 소개 노션 페이지](https://lineno2.notion.site/99-e3ec59eb3ab64b56a647f53837307cac?pvs=4)
### 카페의 자리를 잡기 위해 시간을 낭비하고 계신가요?
- 🔥 걸어서 10분 거리 카페와의 **매칭**을 통해 카페를 찾을 수 있어요
- 📒 **예약**을 통해 카페의 자리를 확보할 수 있어요
## 사용된 기술 스택 및 아키텍처
### AWS 아키텍처
![image](https://github.com/SWM-99-degree/.github/assets/84831081/3b9c613d-111b-4c0c-8255-969087cc6cd4)
- 배포된 상태가 그렇다는 것이지, 차후 AZ 넓혀서 확장할 예정
### Backend 아키텍처
![image](https://github.com/SWM-99-degree/.github/assets/84831081/0d050e8a-d558-4805-b417-8e914260e3fc)
### 활용한 스택
#### 🪃 Backend
- Spring Boot
- fastAPI
- EC2, ELB, SQS, Elasticache, API gateway, Open Search, S3, CloudFront
- Redis
- MongoDB
- ElasticSearch
- Komoran
- JPA
- Github actions
- docker
- FCM
#### 🏈 Frontend
- flutter
- vue.js
- FCM
- Oauth2
- kakao API
#### 👥 협업 툴
- discord
- git issue
- notion
## 프로젝트 기능 소개
| 로그인 |
| - |
| ![](https://hackmd.io/_uploads/HJjUjp4i2.png)|
| - **KAKAO**, **GOOGLE**, **APPLE** 의 OAuath2 기능을 이용하여 로그인 기능을 구현하였습니다. |
| 매칭 기능 |
| - |
|![matching](https://hackmd.io/_uploads/BJsA5TEsh.png)|
| - 주변에 있는 카페에 **매칭요청**을 보내요!
- 원하는 인원을 기입해서 매칭 요청을 보낼 수 있어요!
- **`RedisSet`** 과 **`FCM`** 을 통해서 매칭을 수락하고 거절할 수 있어요!
- **`SSE`** 를 활용해서 카페에 오는 매칭을 어떠한 조작 없이 실시간으로 받을 수 있어요!
- **`RedisQueue`** 를 지속적으로 오고가는 통신을 일정한 기간을 두고 가져올 수 있어요!
- 카카오맵 API를 가져와 길찾기 기능을 얻을 수 있어요!|
| 예약 기능 |
| - |
| ![image](https://github.com/SWM-99-degree/.github/assets/84831081/908a71f1-6659-4cf7-9a2f-97269bd02556) |
| - 원하는 위치, 원하는 조건, 원하는 시간에 **`좌석 예약`** 을 해 보세요!
- **`elasticsearch`** 를 활용하여 검색 속도를 높였어요!
**`MongoDB`** 를 통해서 원하는 조건에 따라 카페를 조회할 수 있어요!
- **`특별한 알고리즘`** 을 통해서 앞뒤로 30분 예약이 되어 있더라도 예약 창을 볼 수 있어요! |
| 점주 웹 사이트 |
| - |
| ![image](https://github.com/SWM-99-degree/.github/assets/84831081/edc6c7a4-eced-4621-9c40-f77879cdc2a4) |
| - 점주 웹페이지에 가입할 수 있어요! 이 웹은 자체 로그인만 가능해요.
- **`vue.js`** 를 활용하여 만들었어요!
- 점주 웹을 통해서 당일 예약된 상황을 볼 수 있어요!
- 점주 웹을 통해서 매칭을 거절하거나 수락할 수 있어요!
- 수락 또는 완료를 누를 수 있어요! |
## 기술적 고민
- 🕐 [**`Redis Pub/Sub`**, 어떻게 쓰는거죠?](https://psy-choi.tistory.com/40)
- 🎨 [**`Elasticsearch`** 와 **`mongoSearch`** 중 어떤 것이 성능적으로 빠를까?](https://psy-choi.tistory.com/33)
- 🔏 [로그인 중 토큰을 탈취 당하지 않으려면 어떻게 해야 할까?]()
- 🚶 [**`MongoDB`** 와 **`PostSQL`** 중 어떤 DB를 활용하는 것이 좋을까? ]()
- ⚙️ [**`SSE`** 와 **`FCM`** , 무엇을 실시간 통신을 위해 사용해야 할까?](https://psy-choi.tistory.com/47)
- ✍️ [MSA를 굳이 활용할 필요가 있었을까? **`fastAPI`** 를 쓴 이유!]()
- 🌀 [**`SQS`** 를 통한 전송보장, 어떻게 할까요?](https://psy-choi.tistory.com/44)
- 🎫 [**`Issue`** 관리와 **`Commit Message`** 를 어떻게 쓸까?](https://psy-choi.tistory.com/45)
- ✍️ [**`CICD`** 구축을 위한 우당탕탕 **`Github actions`** 일기](https://psy-choi.tistory.com/28)
- 🎆 [**이미지 업로드 과정 개선**](https://velog.io/@isayaksh/Spring-Pre-signed-URL)
- ⚜️ [확장성을 고려한 **디자인 패턴** 적용](https://velog.io/@isayaksh/Design-Pattern-OAuth-%EA%B8%B0%EB%8A%A5%EC%97%90-%EB%94%94%EC%9E%90%EC%9D%B8-%ED%8C%A8%ED%84%B4-%EC%A0%81%EC%9A%A9)
- 🤔 [API 호출 방법에 대한 고민](https://velog.io/@isayaksh/Architecture-API-%ED%98%B8%EC%B6%9C%EC%9D%98-%EB%B0%A9%EB%B2%95)
- 📒 [HTTP Status Code 204에 대한 개념과 사용 방법](https://velog.io/@isayaksh/CS-Http-Status-code-204%EC%97%90-%EB%8C%80%ED%95%9C-%EA%B0%9C%EB%85%90%EA%B3%BC-%EC%82%AC%EC%9A%A9%EB%B0%A9%EB%B2%95)
## ERD
![SWM-jariBean (2)](https://github.com/SWM-99-degree/jariBean/assets/85926257/5dd25374-7443-4c90-8997-a04bf7fa27c5)
### 팀원 소개
|최기성|김상현|이호선|
|:---:|:---:|:---:|
|![%EC%B5%9C%EA%B8%B0%EC%84%B1%20%ED%94%84%EB%A1%9C%ED%95%84](https://github.com/SWM-99-degree/.github/assets/84831081/de57e7ef-c40a-4041-8063-a99d50b82e2a?width=50)|![Untitled](https://github.com/SWM-99-degree/.github/assets/84831081/35c44282-1dbb-4cec-b843-c0686b6db237)|![Untitled-2](https://github.com/SWM-99-degree/.github/assets/84831081/6a060570-3ee8-4d14-87b6-d0ba90bbc5eb)|
|[@psy-choi](https://github.com/psy-choi)|[@isayaksh](https://github.com/isayaksh)|[@LineNo2](https://github.com/LineNo2)|[@high2092](https://github.com/high2092)|