패스트캠퍼스 백엔드 7기 부트캠프_미니 프로젝트 minibnb

강서진·2024년 4월 2일

개발 개요

기간

2024.03.18~2024.04.05

소개

한국관광공사가 제공하는 OpenAPI(TourAPI 4.0)를 사용한 숙박 예약 서비스

환경

JDK: 17
Spring Boot : 3.2.3
Gradle: 7.x
Spring Security: 6
JUnit : 5
DB: MySQL (AWS RDS)
배포: Docker, EC2

순서

DB설계 -> OpenAPI에서 데이터 가져오기 -> 기능 구현(숙소정보조회, 회원가입+로그인, 예약, 장바구니 순으로 구현) -> 배포 -> 프론트와 연결

역할분담

이름역할
강서진기능구현+Security
나도윤기능구현+배포
박하은기능구현+테스트코드

ERD

  • member:
    • 이메일, 비밀번호, 이름 등 필요한 정보
    • 회원탈퇴를 고려한 status, 권한 추가를 고려한 type
    • 프로필 이미지 (보류)
    • 생성 날짜와 수정 날짜
    • oauth 정보 칼럼 (보류)
  • refresh_token
    • 로그인할 때 발급되는 refresh token 저장
    • 로그아웃 시 삭제
  • accommodations:
    • TourAPI에서 가져온 숙소 정보
    • 주소, 사진, 분류, 전화번호, 위도, 경도 등
  • room:
    • 임의로 생성한 수용인원, 가격 정보
    • 최대수용인원(max_capacity)로 방 형태 구분
    • 예약 날짜로 방 재고 구별
  • cart:
    • 장바구니
    • 숙소 개별정보 창에서 선택한 옵션(날짜, 인원)이 저장됨
    • 장바구니에서 결제가 완료될 시 status가 false로 변경
  • reservation:
    • 결제가 끝나면 저장되는 주문 정보
    • cart와 동일

요구사항

  • 회원가입
    • 이메일 주소와, 비밀번호, 이름으로 회원가입
  • 회원 로그인 기능
    • 이메일과 비밀번호로 로그인
    • DB에 저장된 정보와 비교, 일치하면 JWT 발급
    • 상품 조회(전체, 개별), 회원 가입은 로그인 없이 사용 가능
  • 전체 상품 목록 조회
    • 데이터베이스에서 전체 상품 목록을 가져옵니다.
    • 이미지, 상품명, 상품가격을 기본으로 출력
    • 페이징 단위: 20개
  • 개별 상품 조회
    • 이미지, 상품명, 상품가격, 상품 상세 소개 (1줄 이상)을 기본으로 출력
    • (품절 처리)이미 예약된 날짜는 예약 불가능으로 표시
  • 상품 옵션 선택
    • 상품 상세 소개 페이지에서 상품 옵션(날짜, 숙박 인원)을 선택
  • 결제하기
    • 주문 페이지에서 결제하기 버튼 클릭 시 결제절차 없이 주문 정보를 DB에 저장
  • 주문 결과 확인
    • 결제 처리 시, 주문한 상품에 대한 주문 결과를 출력

선택구현사항

  • 카테고리별 상품 목록 조회
    • 한국관광공사 TourAPI의 소분류에 따라 카테고리별로 조회 가능
  • 장바구니 담기
    • 장바구니에 담긴 상품, 옵션 데이터에 따른 합계 금액 출력.
    • 장바구니 삭제 가능
    • 주문하기 버튼을 통해 주문/결제 화면으로 이동
  • 주문 내역 확인
    • 마이페이지에서 예약내역 출력

유즈케이스 다이어그램

최종 사용 스택

아쉬운 점/보완할 부분

  • JPA 연관관계
    • 처음에 FK나 JPA 연관관계를 설정하지 않고 설계하여 나중에 Accommodation에서 room 정보가 필요하거나 할 때 불필요한 쿼리를 날리거나 새로운 response를 만드는 등 난관에 부딪혔다.
    • KPT 기간동안 좀 더 공부해서 n+1 문제 등 db 쿼리를 더 효율적으로 사용하도록 개선할 예정
  • 소셜 로그인 미구현
  • 테스트 코드
  • CI/CD
    • 프론트와 연결을 테스트하기 위해서는 배포가 필수였는데, CI/CD가 익숙하지 않아 수정사항이 생길 때마다 수동으로 이미지를 빌드하고 서버에 새로 띄워야 해서 번거로웠고, 그 뒤로는 코드를 수정하기도 조금 부담이 되었다.
    • KPT 기간에 CI/CD로 배포를 자동화할 계획이다.
  • 기타 편의 기능 구현
    • 회원정보 수정, 프로필 이미지 처리 등 추가하고자 하였으나 시간 상의 이유로 완성하지 못한 기능들이 있었다.

발전한 점

  • 기술

    • 배포
      • Docker로 이미지 빌드
      • EC2 인스턴스 생성
      • 도메인 구매하여 프론트, 백 연결
    • 인증/인가
      • JWT 발급하여 Stateless로 구현
  • 커뮤니케이션

    • GitHubFlow
      • GitProject 사용하여 이슈 및 커밋 관리
    • 프론트와 협업
      • 매일 오전, 오후 스크럼 미팅

0개의 댓글