안녕하세요, 와플 토이프로젝트 팀 6조입니다.
WaffleBnB는 Airbnb
의 클론 코딩을 주제로 진행한 프로젝트입니다 !
🚀 WaffleBnB 팀 6조
- 🏡 김민수
- 🚀 박준병
- 🔑 최승민
- 🫧 인소윤
- 🖍️ 최서현
- 📍 윤시헌
- 완성도 있는 Airbnb 서비스의 클론 코딩
- 기존 Airbnb 서비스의 디자인을 유지하되, 유저 친화적인 서비스 구현
- Spring boot 활용 실무형 백엔드 서비스 개발
- CI/CD 구축 및 AWS 인프라 활용
- 깃허브 컨벤션과 노션 칸반, 대면/비대면 하이브리드를 통한 협업 경험
사용자가 초기에 회원가입을 할 수 있는 페이지입니다.
소셜 로그인으로 접근 할 경우, 프로필 사진 선택부터 별명 입력, 자기소개를 입력할 수 있습니다.
- BE API
POST /api/auth/register
: 회원 가입 API- 소셜 로그인 시에는
POST /api/v1/profile
: 프로필 생성 API
![]() |
![]() |
![]() |
![]() |
![]() |
조건에 맞는 숙소 검색 및 핫플레이스를 제공하는 메인 페이지입니다.
- 여행지 주소, 예약 가능 날짜, 게스트 인원에 맞춰서 검색 가능
- 필터바를 통해 아이콘에 따라 숙소 유형으로 필터링
- 정렬 모달을 통해 가격, 이름, 등록, 평점 순으로 정렬 가능
- 필터 모달을 통해 가격 범위, 시설 정보, 편의 시설, 별점으로 필터링 가능
- 숙소 카드 내 하트 버튼을 통해 위시리스트 추가 및 삭제 기능 제공
- 로그인하지 않은 유저도 메인 화면 접근과 검색 가능
- 핫플 기능: 주어진 기간 내 예약이 가장 많은 숙소들을 큐레이팅하는 추가 기능 구현
BE API
GET /api/v1/rooms/main
: 페이지네이션이 적용된 전체 숙소 리스트 제공GET /api/v1/rooms/search
: 조건에 맞는 방 검색 (가격, 주소, 평점, 예약 가능 날짜 등 필터 적용)
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
|
![]() |
사용자가 직접 호스팅할 숙소를 등록할 수 있는 페이지입니다.
숙소 등록을 4단계로 나눠서 진행할 수 있도록 하였습니다. 상단에 프로그레스 바를 구현하여 진행 단계를 알 수 있도록 하였습니다. 각 단계에서 넣는 정보는 다음과 같습니다
-
단계별 정보 입력
- 1단계: 숙소 타입, 숙소 주소
- 2단계: 숙소 이름, 숙소 설명, 숙소 시설, 시설 정보, 숙소 이미지
- 3단계: 숙소 요금, 최대 수용 인원
- 4단계: 최종 검토
-
API
POST /api/v1/rooms
: 숙소 생성 API- 결과로 이미지 업로드를 위한 Presigned URL 리스트 리턴
- 프론트에서는 Presigned URL을 이용해 image PUT 요청으로 이미지 업로드 진행
![]() |
![]() |
![]() |
![]() |
![]() |
- API
GET /api/v1/rooms/{roomId}
: 메인 페이지에서 숙소 클릭 시 상세 정보 조회
숙소 상세 페이지에서는 다음의 정보를 확인할 수 있습니다:
- POST Room 시 등록한 정보
- 호스트 이름
- 리뷰 조회
- 예약 가능 여부
- 이미지 등
- RoomDetails의 Response로 이미지 조회 URL 리스트 제공
- 이미지 조회는 S3 버킷과 연결된 CloudFront 도메인 주소 + key path로 구성
- 이미지 접근은 Public으로 설정
- API
GET /api/v1/reviews/room/{roomId}
: 특정 방에 대한 리뷰 조회 (페이지네이션 적용, 최신 순/별점 순 정렬 가능)
- 참고: 평균 별점 정보 반영 (별점 개수는 시간적 요인으로 하드 코딩)
- API
POST /api/v1/reservations
: 예약 생성GET /api/v1/reservations/availability/{roomId}
: 해당 월의 예약 가능 날짜 조회
- 프론트와 백엔드 모두 과거 날짜 예약 불가 설정
사용자 닉네임, 프로필 bio, 생성한 예약, 작성한 후기, 위시리스트를 조회할 수 있습니다.
다른 유저에게 본인의 정보를 공개할지, 비공개 할지도 설정 가능.
- API
GET /api/v1/profile
: 프로필 조회GET /api/v1/reservations/user/{userId}
: 사용자의 예약 조회GET /api/v1/reviews/user/{userId}
: 사용자가 남긴 리뷰 조회PUT /api/v1/profile
: 프로필 정보 변경 (회원 가입 시 이미지 업로드를 스킵하고, 이후 업로드 가능)
- 프로필 수정 시 자신의 이전 여행지(예약 내역)와 작성한 후기를 공개 여부 선택 가능
- 위시리스트 공개 여부 설정 가능
- API
PUT /api/v1/reservations/{reservationId}
: 예약 변경 APIDELETE /api/v1/reservations/{reservationId}
: 예약 취소 API
- 예약 변경 시 체크인-체크아웃 날짜와 게스트 인원 수정 가능
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
기술 | 버전 |
---|---|
OpenJDK(Temurin) |
17.0.12 |
MySQL |
8.0.40-0ubuntu0.24.04.1 |
Spring Boot |
3.4.1 |
Swagger |
2.7.0 |
Spring Security |
6.4.2 |
Java JWT |
0.11.5 |
AWS S3 SDK |
2.20.32 |
ktlint |
11.5.1 |
docker/build-push-action |
v6 |
- 숙소 검색 및 필터링 : 다양한 조건으로 숙소 검색 가능
- 숙소 등록 및 예약 : 사용자 등록 및 예약 기능
- 이미지 관리 : AWS S3 + CloudFront를 이용한 이미지 배포
- 소셜 로그인/일반 로그인 : OAuth, Spring Security 기반 로그인 시스템 구현
- 유저 기능 : 위시리스트, 프로필 관리(여행 기록, 후기 모아보기/공개, 비공개 설정) 등 추가 기능 제공
- Room API 구현
- 다중 조건 검색 구현 (JPA Specifications)
- Image API 리팩토링 (Presigned + CloudFront)
- Response DTO 구조 수정 (일관성 유지)
- Room Entity 세부 설계 (Embedded, unique constraints 기준 설정)
- 페이지네이션 (Pageable 활용, 정렬 기준 적용)
- Global Exception handler 및 Domain Exception 관리
- 6조 팀장
- ReadME 관리 / Git 컨벤션 / 노션 칸반 관리
- ERD 설계
- AWS EC2, S3, CloudFront, Docker Hub 관리
- 이미지 업로드 및 관리 서비스 API 구현 (Presigned URL 배포 + S3 버킷 설정)
- Review / Reservation 서비스 설계 및 API 구현
- 서비스 로직 Integration Test Code 작성
- 유저 생성 위시리스트, 숙소 리스트 등 추가 기능 API 구현
- CI/CD 스크립트 작성
- 로그인, 소셜 로그인, Spring Security 설정 및 CloudFront Origin Policy 설정
- 접근 권한 관련 구현
- 프로필 API 구현
- Room/Reservation 동시성 및 멱등성 처리
- 테스트 데이터 생성기 및 일부 테스트 코드 작성
- DB 리셋 후 초기 데이터 업로드 스크립트 구현
- 노션 API 문서 작성