고객의 메뉴 탐색, 장바구니, 주문, 결제, 픽업 알림과
점주의 가게 운영, 주문 승인, 리뷰 관리를 위한 API를 제공합니다.
Groupeat은 모임, 행사, 회의처럼 여러 사람이 함께 먹을 음식을 더 쉽게 준비할 수 있도록 돕는 단체 주문 기반 푸드 픽업 서비스입니다.
사용자는 주변 가게의 메뉴와 픽업 가능 시간을 확인하고 원하는 메뉴를 미리 주문할 수 있습니다. 점주는 단체 주문을 효율적으로 접수하고 승인하며, 픽업 전까지 필요한 안내를 제공해 주문 준비 과정을 편리하게 운영할 수 있습니다.
- 소셜 로그인 및 JWT 인증 - Google, Kakao, Naver OAuth2 로그인과 Access/Refresh Token 재발급, 로그아웃을 처리합니다.
- 회원가입 및 사용자 관리 - 고객/사업자 회원가입, 마이페이지, 알림 설정, 약관 동의, 회원 탈퇴 기능을 제공합니다.
- 사업자 검증 - 국세청 API 기반 사업자 진위 확인과 관리자 승인 프로세스를 지원합니다.
- 가게 및 메뉴 관리 - 점주의 가게 정보, 영업/주문 가능 일정, 메뉴, 옵션 그룹, 옵션을 관리합니다.
- 검색과 추천 - 매장 검색, 평점 기반 추천, 할인율 기반 추천 API를 제공합니다.
- 장바구니와 주문 - 메뉴 옵션을 포함한 장바구니 계산, 주문 생성, 주문 목록/상세 조회, 취소 흐름을 제공합니다.
- 점주 주문 처리 - 신규 주문 조회, 주문 승인/거절, 픽업 완료 처리와 자동 거절 스케줄러를 지원합니다.
- 결제 및 정산 기반 - Toss Payments 결제 승인/취소 흐름과 정산 수수료 계산 기반을 포함합니다.
- 리뷰와 답글 - 고객 리뷰 작성/삭제/조회와 점주 답글, 리뷰 요약 정보를 제공합니다.
- 푸시 알림 - Firebase FCM 토큰 등록, 알림 목록/읽음 처리, RabbitMQ 기반 비동기 알림 발송을 처리합니다.
- 파일 업로드 - AWS S3 Presigned URL 기반 이미지 및 사업자 서류 업로드를 지원합니다.
- 공통 API 응답과 예외 처리 - 도메인별 에러 코드와 일관된 응답 포맷을 제공합니다.
- 운영 모니터링 - Actuator, Prometheus, Grafana, Loki, Grafana Alloy 기반 메트릭/로그 수집 구성을 포함합니다.
| Category | Technologies |
|---|---|
| Language & Framework | Java 21, Spring Boot 3.5 |
| Database | PostgreSQL, Spring Data JPA, QueryDSL, Flyway |
| Security | Spring Security, OAuth2, JWT |
| Infra & Messaging | Redis, RabbitMQ, Docker, GitHub Actions |
| External Integration | Toss Payments, NTS Business API, AWS S3, Firebase FCM |
| API Docs | Springdoc OpenAPI |
Client
├── Customer Web
└── Owner Web
│
▼
Groupeat Backend API
├── Auth / Signup / Terms
├── Store / Menu / Search / Recommendation
├── Cart / Order / Payment
├── Review / Notification
└── Admin / Business Verification
│
├── PostgreSQL / Redis
├── RabbitMQ -> Firebase FCM
├── AWS S3
├── Toss Payments
└── NTS Business API
Observability
├── Prometheus <- Actuator
└── Grafana Alloy -> Loki -> Grafana
Groupeat Backend는 고객 웹과 점주 웹의 요청을 하나의 API 서버에서 처리하며, 주문/결제/가게/알림 등 기능별 도메인으로 책임을 나눕니다.
주요 데이터는 PostgreSQL에 저장하고, Redis와 RabbitMQ는 캐시·상태 관리·비동기 알림 처리에 사용합니다. 결제, 사업자 검증, 파일 업로드, 푸시 알림은 각각 Toss Payments, NTS Business API, AWS S3, Firebase FCM과 연동합니다.
com.groupeat
├── domain
│ ├── store / cart / orders / payment
│ ├── member / owner / auth / signup / terms
│ ├── business / admin / settlement
│ ├── search / recommendation / review
│ └── notification / verification
└── global
├── apiPayload / exception / security
├── config / logging / upload
└── entity / dto / util
비즈니스 기능을 기준으로 패키지를 나누는 도메인 중심 패키지 구조를 사용합니다. 주문, 결제, 가게, 리뷰처럼 변경 이유가 같은 코드를 하나의 도메인 안에 모으고, 각 도메인은 필요한 경우 controller, service, repository, entity, dto, converter, exception 계층을 내부에 둡니다.
인증 필터, 공통 응답, 예외 처리, 설정, 업로드, 로깅처럼 여러 도메인에서 함께 사용하는 횡단 관심사는 global 패키지로 분리합니다.
main브랜치 push 시 GitHub Actions CD 워크플로가 실행됩니다.- Gradle로
bootJar를 생성한 뒤 Docker Hub에groupeat-server:latest이미지를 push합니다. - EC2 서버에
docker-compose.yml과monitoring/설정을 복사하고docker compose up -d로 서비스를 갱신합니다. - 운영 프로필에서는 PostgreSQL URL과 인증 정보는 환경 변수로 주입하며, Flyway migration을 활성화합니다.
- Prometheus는
/actuator/prometheus를 scrape하고, Grafana Alloy는 Docker 컨테이너 로그를 Loki로 전달합니다.
함께 먹는 시간을 더 쉽게 준비하는 단체 주문 플랫폼, Groupeat
