개발 개요
기간
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 인스턴스 생성
- 도메인 구매하여 프론트, 백 연결
- 인증/인가
-
커뮤니케이션
- GitHubFlow
- GitProject 사용하여 이슈 및 커밋 관리
- 프론트와 협업