Skip to content

reeruryu/smartorder

Repository files navigation

🥤 smartorder

스마트 오더 (간편 주문) 시스템

⛳ 프로젝트 기획 배경

카페를 자주가는 고객으로서 가장 많이 사용하는 서비스는 ‘스타벅스 사이렌 오더’와 같은 스마트 오더 서비스입니다. 이 외에도 일상에서 다양한 스마트 오더 서비스를 통해 쉽고 빠르게 주문을 할 수 있습니다. 이러한 경험을 바탕으로 고객의 입장은 물론 점주 입장에서도 이용하는 데에 편리한 서비스를 고안해 보고자 프로젝트 기획을 하게 되었습니다.

🔎 프로젝트 기획 목적

  • 대량의 데이터를 자주 조회할 때 캐시를 통해 응답 속도를 향상시킬 수 있는 방법과, 시스템 대용량의 일괄 처리를 할 때 Spring Batch를 통해 운영이 간편하고 수동으로 처리하지 않는 방법을 학습해 보려 합니다.
  • 결제 프로세스가 있는 서비스에서 어떻게 테이블 구성하면 좋을지 생각하고, 실제 결제를 구현해 보려 합니다.

🛠 활용 기술

  • Spring boot 2.7.6 (JDK1.8)
  • Spring Security
  • JSON Web Token
  • Spring Batch
  • MariaDB
  • Redis
  • JPA
  • MyBatis
  • Gradle
  • Junit5
  • Mockito

🖼 ERD

smartorderERD_최종

✅ API

➡️ auth

  • 회원가입
  • 로그인
  • 이메일 인증

➡️ admin

  • 카테고리 관리
    • 카테고리 등록, 조회, 수정, 삭제
  • 메뉴 관리
    • 메뉴 등록, 조회, 수정, 삭제
  • 회원 관리
    • 회원 조회
    • 회원 권한 변경
  • 매장 관리
    • 매장 등록, 조회, 수정, 삭제

➡️ smartorder

  • 점주 - 매장 영업 관리
    • 매장 영업 요일, 시간, 임시 중지 변경
  • 점주 - 매장 메뉴 관리
    • 매장 메뉴 품절, 숨김 여부 지정
    • 매장 조회
  • 고객 - 위치
    • 현재 위치 등록 및 변경
    • 현재 위치 2km 반경 내 가까운 매장 10곳을 조회
  • 고객 -장바구니
    • 메뉴 담기 및 추가, 수량 변경, 삭제
    • 장바구니 메뉴 주문하기
  • 점주, 고객 - 주문
    • 주문 내역 기간 별 조회
    • 주문 취소(결제 후면 결제 취소 진행)
  • 점주 - 주문
    • 현재 주문 상태 변경

➡️ pay

  • 결제
    • 주문 결제
  • 간편 페이
    • 간편 페이 충전, 잔액 조회
  • 포인트
    • 포인트 조회
  • 거래
    • 간편 페이, 포인트 거래 내역 조회

🌟 주요 기능

  • Redis를 사용하여 거리 계산과 정렬을 수행하는 부분을 캐싱 처리하여, '2km 반경 내 매장 검색' 기능의 응답 속도를 높이도록 구현
  • Spring Batch를 이용하여 대량의 매장 상품 데이터의 품절 여부를 일괄 처리하고 자동화된 스케줄링을 구현

💭 아쉬운 점/개선할 점

  1. 처음으로 git rule(commit, PR 등)을 다뤄보다보니 미숙한 부분이 많았고, 모두 적용하지 못한 점이 아쉽습니다.
  2. if 문이 중첩되는 코드를 리팩토링하지 못한 점이 아쉽습니다.
  3. 장바구니 메뉴를 삭제할 때, 현재의 구현에서는 cartMenuList의 크기만큼 delete query가 전송됩니다. 이를 deleteAll과 같이 하나의 쿼리로 변경하는 것이 좋을 것 같습니다.
  4. save 메서드도 리스트 개수만큼 save query가 반복적으로 발생하는데, saveAll 메서드를 사용하면 더 효율적일 것 같습니다.
  5. pay 메서드의 가독성을 높이기 위해 요청 상태, 잔액 체크, 결제 내역 저장 부분을 분리하는 것이 좋을 것 같습니다. 또는 결제 방법 별로 메서드를 분리하는 것도 좋은 방법일 것 같습니다.
  6. 포인트와 간편페이(convpay)는 전체적인 흐름이 같지만 수단에 따라 조금씩 차이가 있습니다. 이 경우 추상화하여 공통된 부분은 상속된 클래스에 두고 다른 부분만 하위 클래스에 둔다면 결제 방법 자체를 클래스화하여 구조화할 수 있을 것 같습니다.

About

Smart Order Services API for customers and store owners

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages