Skip to content

prgrms-web-devcourse-final-project/WEB5_7_500M-BTN_BE

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🚀 5억년 버튼 (500 Million Years Button) - 백엔드

5억년 버튼 로고



Java Spring Boot MySQL JPA WebSocket


Docker Gradle OAuth2 Swagger



🎯 프로그래머스 클라우드 기반 백엔드 엔지니어링 데브코스 5기 7회차 최종 프로젝트

식당 예약과 맛집 파티 모임을 위한 실시간 플랫폼의 백엔드 시스템




## 🌐 배포 및 데모

🔗 서비스 링크

🌟 메인 서비스


실제 서비스 체험하기

📖 API 문서


API 명세 및 테스트

🎨 프론트엔드


프론트엔드 저장소

🏗️ 배포 환경

AWS EC2 RDS GitHub Actions




📋 프로젝트 개요

🎯 프로젝트 목표

사용자들이 식당을 검색하고 예약할 수 있으며, 맛집 탐험 파티를 통해 새로운 사람들과 만나 함께 식사할 수 있는 소셜 다이닝 플랫폼의 안정적이고 확장 가능한 백엔드 시스템 개발

⏱️ 개발 기간

2025.06.30 ~ 2025.07.31 (5주)

👥 팀 구성

  • 백엔드: 5명
  • 프론트엔드: 1명

🛠️ 핵심 기술

  • Architecture: Layered Architecture
  • Security: Spring Security + OAuth2
  • Real-time: WebSocket (채팅)
  • Database: MySQL,MariaDB
  • Documentation: Swagger/OpenAPI
  • Build Tool: Gradle

📊 주요 성과

  • 실시간 파티 채팅 시스템 구현
  • 동시 예약 처리를 위한 동시성 제어
  • RESTful API 설계 및 문서화



✨ 핵심 기능

🔍 식당 검색

위치 기반 식당 검색
다양한 필터링 옵션

📅 식당 예약

실시간 예약 시스템
예약 상태 관리

⚡ 맛집 탐험 파티

즉석 모임 생성
자동 매칭 시스템

💬 파티별 채팅방

WebSocket 실시간 채팅
파티원간 소통

🔧 상세 기능

  • 🔍 식당 검색 & 필터링

    • 지역별, 음식 종류별 검색
    • 가격대, 평점, 거리 기반 필터링
    • 실시간 검색 결과 업데이트
  • 📅 예약 시스템

    • 실시간 예약 가능 시간 확인
    • 예약 승인/거절 프로세스
    • 예약 변경 및 취소 기능
  • ⚡ 맛집 탐험 파티 시스템

    • 파티 생성 및 참여
    • 자동 예약 연동 기능
  • 💬 실시간 채팅

    • 파티별 전용 채팅방
    • WebSocket 기반 실시간 메시징
    • 채팅 히스토리 관리



🎨 서비스 화면

📱 주요 화면

🏠 메인 페이지

메인 페이지

🔍 식당 검색 결과

식당 검색

📅 예약 프로세스

예약 프로세스

⚡ 맛집 파티 모임 (파티)

맛집 파티 모임

💬 실시간 채팅

실시간 채팅



🚀 주요 특징 및 기술적 도전

💡 기술적 특징

🔥 성능 최적화

  • 동시성 제어: 낙관적 락 방식의 동시성 제어 처리
  • DB 인덱싱: 검색 성능 향상을 위한 최적화

🛡️ 보안 및 인증

  • OAuth2 소셜 로그인: 구글, 카카오, 네이버 연동
  • JWT 토큰: 무상태 인증 시스템 구현
  • API 보안: CORS 설정
  • 데이터 검증: Validation을 통한 입력값 검증

🌐 실시간 통신

  • WebSocket: 파티별 실시간 채팅 구현
  • STOMP 프로토콜: 메시지 브로커를 통한 효율적 통신
  • 이벤트 기반: 고객센터 및 상점 등록 신청시 실시간 알림

🏗️ 아키텍처 설계

  • 계층형 아키텍처: 관심사 분리를 통한 유지보수성 향상
  • 도메인 분리: Shop, Reservation, Party, Chat 모듈화
  • 예외 처리: 전역 예외 처리를 통한 일관된 에러 응답
  • API 문서화: Swagger를 통한 자동 문서 생성

🎯 해결한 기술적 과제

⚡ 동시 예약 처리 문제 해결
// 낙관적 락을 활용한 동시성 제어
@Version
private int version;

@Retryable(
    retryFor = DataAccessException.class,
    maxAttemptsExpression = MAX_ATTEMPTS,
    backoff = @Backoff(
        delayExpression = MAX_DELAY, multiplierExpression = MULTIPLIER, random = true
    )
)
@Transactional
public void joinParty(Long partyId, long userId) {
    // 파티 참가 로직
}
💬 확장 가능한 채팅 시스템
// WebSocket 기반 실시간 채팅
@MessageMapping("/chat.send")
public void sendMessage(@Payload ChatMessageRequest message,
    StompPrincipal user) {
    // 채팅 관련 로직
}



🏛️ 시스템 아키텍처

Image

📂 프로젝트 구조

📁 디렉토리 구조 펼치기/접기
📦 matjalalzz/
├── 🌐 src/main/java/shop/matjalalzz/
│   ├── 🔧 global/                    # 공통 설정 및 유틸리티
│   │   ├── config/                  # Spring 설정 클래스
│   │   ├── exception/               # 전역 예외 처리
│   │   ├── security/                # 보안 설정
│   │   └── utils/                   # 유틸리티 클래스
│   ├── 👤 user/                     # 사용자 관리 모듈
│   │   ├── api/                     # REST 컨트롤러
│   │   ├── app/                     # 비즈니스 로직
│   │   ├── dao/                     # 데이터 접근 계층
│   │   └── domain/                  # 엔티티 및 DTO
│   ├── 🏪 shop/                    # 식당 관리
│   │   ├── api/                     # 식당 검색, 조회 API
│   │   ├── app/                     # 식당 서비스 로직
│   │   ├── dao/                     # 식당 데이터 접근
│   │   └── domain/                  # 식당 엔티티
│   ├── 📅 reservation/              # 예약 시스템
│   │   ├── api/                     # 예약 생성, 관리 API
│   │   ├── app/                     # 예약 비즈니스 로직
│   │   ├── dao/                     # 예약 데이터 접근
│   │   └── domain/                  # 예약 엔티티
│   ├── ⚡ party/                    # 맛집 파티 모임 시스템
│   │   ├── api/                     # 파티 생성, 참여 API
│   │   ├── app/                     # 파티 매칭 로직
│   │   ├── dao/                     # 파티 데이터 접근
│   │   └── domain/                  # 파티 엔티티
│   ├── 💬 chat/                    # 채팅 시스템
│   │   ├── api/                     # 채팅 API
│   │   ├── app/                     # 채팅 서비스 로직
│   │   ├── dao/                     # 채팅 데이터 접근
│   │   └── domain/                  # 채팅 메시지 엔티티
│   ├── 💬 comment/                  # 댓글 관리 (리뷰 댓글)
│   ├── 🎆 image/                    # 이미지 관리
│   ├── 📝 inquiry/                  # 문의 관리
│   ├── 💸 tosspay/                  # 결제 관리
│   └── ⭐ review/                   # 리뷰 시스템
├── 📋 src/main/resources/
│   ├── application.yml              # 환경 설정
│   └── logback.xml                 # 로깅 설정
└── 📂 src/test/                    # 테스트 코드



🛠️ 기술 스택 상세

🖥️ 백엔드 기술

분야 기술 버전 선택 이유
Language Java 21 최신 LTS 버전, 향상된 성능
Framework Spring Boot 3.3.1 빠른 개발, 자동 설정
Database MySQL, MariaDB 8.0, 12.x.x 안정적인 관계형 데이터베이스
Security Spring Security 6.x 강력한 보안 프레임워크
Real-time WebSocket - 실시간 양방향 통신



주요 API 엔드포인트

🏪 식당 관련

  • GET /shops - 식당 검색 및 목록 조회
  • GET /shops/{shopId} - 식당 상세 정보 조회
  • GET /shops/search - 조건별 식당 검색

📅 예약 관련

  • POST /reservations - 예약 생성
  • GET /reservations - 예약 목록 조회
  • PUT /reservations/{reservationId}/status - 예약 상태 변경

파티 관련

  • POST /parties - 파티 생성
  • POST /parties/{partyId}/join - 파티 참여
  • GET /parties - 파티 목록 조회

💬 채팅 관련

  • WebSocket /chat.send/ - 파티별 실시간 채팅
  • GET /parties/{partyId}/chat/restore - 채팅 히스토리 조회



👨‍💻 개발진



전민서
PO & 백엔드
@dev1


김승중
백엔드 팀장
@dev2


남지은
백엔드
@dev3


안필온
백엔드
@dev4


임예성
백엔드
@dev5


조영재
프론트엔드
@dev6



🌟 포트폴리오 프로젝트

이 프로젝트는 개발자로서의 성장을 보여주는 포트폴리오 작품입니다.
실무에서 사용되는 최신 기술 스택과 베스트 프랙티스를 적용하여 개발되었습니다.


📅 2025년 프로그래머스 백엔드 기반 백엔드 엔지니어링 데브코스 5기 7회차 최종 프로젝트


Made with ❤️ Java Spring Boot

About

데브코스 7회차 최종 프로젝트 5억년 버튼의 백엔드 레포지토리

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 6