프로젝트

[리액트+스프링부트] Delivery Oracle 동작 설명 / 후기

ari0930 2024. 7. 24. 01:58

[리액트+스프링부트] Delivery Oracle 동작 설명 / 후기 

동작 설명

유저 회원가입/로그인

회원가입 시 이메일 중복확인과 사용자 닉네임 비밀 번호를 작성하여 회원가입을 할 수 있다.

 

로그인은 위의 회원가입으로부터 작성한 이메일과 비밀번호를 이용한 로그인과 카카오 계정을 이용한 로그인을 이용할 수 있다,

 

소비자 페이지

소비자 메인 페이지

 

 

마이페이지

마이페이지 에서 주문내역/ 리뷰관리/계좌의 포인트 충전할 수 있다.

포인트 주문할때 사용하는 재화이다.

등급이라는 것이 존재하는데 이는 주문 금액에 총액에 따른 등급제이다 

등급 총액
Bronze 0
Silver 10000<=X
Gold 50000<=X
Platinum 100000<=X

 

주문하기

소비자 메인 페이지에 음식 카테고리를 클릭하거나 검색하면 위와 같이 나온다 이때 

운영 중인 거하고 운영종료라고 나타나는 거는 현재 업체가 로그인되어 있어야지 운영 중이라고 나타난다.

자기가 원하는 음식점에 들어가서 음식제 페이지가 나타난다.

메뉴/댓글/매장 소개를 확인할 수 있다.

 

원하는 음식 주문하기

원하는 음식을 클릭하면 장바구니에 담을 수 있고 결제하기 버튼을 누르면 위와 같이 나타난다.

이때 마이페이지에서 충전한 결제하는 금액보다 커야지만 주문이 가능하다.

 

주문 완료

음식점 주인의 동작에따라 주문을 확인하기전에는 음식점 주문확인중 

주문 확인후에는 조리중,  라이더 배정중에는 라이더 배정중 ,라이더 배달중에는 배달중 으로 나타난다.

 

모든 배달이 완료되고 난 후 리뷰를 작성할 수 있다.

리뷰는 평점과 댓글 내용을 작성할수 있다.

리뷰 관리 페이지에서 리뷰를 수정할 수 있고 삭제할 수도 있다.

 

업체 신고하기

신고하고자 하는 주문 내역에서 신고하기 버튼을 클릭해서 신고할 수 있다 이는 후에 관리자에서 일정수 이상의 신고를 받은 업체에 제재를 가할 수 있다,

 

업체

업체 메인 페이지

업체 페이지의 기능을 이용하기 위해서는 업체 쪽에서의 회원가입을 해야 한다 그러지 않으면 로그인이 불가하다.

업체등록하기

카카오 주소 api를 이용하여 주소지를 검색할 수 있다.

등록한 후 관리자로부터 승인을 받아야지 업체 기능을 이용할 수 있다.

 

메뉴등록

 

주문 들어왔을 경우 

현재 주문 상태에서 주문이 들어오면 이렇게 확인할 수 있다. 

조리하기와 거절하기가 가능하면 이는 웹소켓을 이용하여 실시간으로 반영한다.

 

조리하기를 누르면 라이더 배정하기 버튼을 누를 수 있도록 변경된다.

라이더 배정하기 버튼을 누르면 라이더 배정중으로 변경된다.

답글 작성

 

답글 잡성하기 버튼을 누르면 답글 작성 팝업이 나타나 답글 작성할 수 있다. 또한 수정 삭제도 가능하다.

주문 내역 확인

매출 그래프

 

업체 관리 

업체 내용 수정 하거나 업체를 내릴 수 있다.

 

라이더 페이지

라이더 메인 페이지

카카오 맵 api를 이용하여 현재 라이더의 위치를 확인할 수  있다.


콜 받기 

이때 콜받기 보면 현재 내 위치에서의 가게까지 와의 거리와 가게에서의 주문자의 거리를 알 수 있으면 이 거리에 따라 배달 가격이 책정된단.

            if(dStore+dUser<1.5){
                price=3000;
            }
            else if ((dStore+dUser)<2){
                price=3500;
            }
            else if((dStore+dUser)<3){
                price=4000;
            }
            else{
                price=4500;
            }

1.5킬로 이내에서는 3천 원 2킬로 이하는 3천5백 원 3킬로 이하는 4천 원 그 외에는 4천5백 원이다.

진행 중인 배달

진행중인 배달을 클릭하면 이렇게 나타나면서 총 3개의 마커가 나타난다 별표 모양은 가게와 주문의 위치고 파란색은 나의 현재 위치를 나타낸다.

완료내역

매출 그래프

 

 

관리자 페이지

관리자 메인 페이지

관리자 페이지로 들어가면 메인에서는 오늘 현재까지 접속한 총 사용자수와 주문자수 앱의 전체 매출이 나타난다.

 

업체 승인하기

엡체를 등록하면 관리자에서 승인해 줘야지 업체의 권한이 부여된다.

 

악덕 업체 퇴출

신고된 상세 내역을 확인할 수 있다.

악성 이용자 차단

 

각각 업체를 내리거나 유저를 블락했을 때

업체족에서 업체의 권한을 내리면 모든 권한이 박탈되어 모든 기능을 이용하수 없게 된다.

 

유저가 블락되었을 경우에는 로그인 시도 시 로그인 자체가 안된다.

 

주문내역/매출 내역을 앞의 라이더와 업체와 동일하게 나타난다.

 

 

AI 주문 추천 시스템

구글 AI 제미나이를 이용하여 음식 추천 시스템을 만들었다

이 시스템은 기본적으로 계절 기반의 선호 음식 데이트를 바탕을 추천해 주며 여기서 한 발 더 나아가 현재 날씨와 기온 정보를 반영하여 AI 가 추천할 음식을 선별한다.

또한 현 이용자의 주문내역이 존재할 경우 주문내역 또한 반영하여 더 맞춤화된 음식을 추천합니다.

 

이 시스템을 평가하기 위해 테스트를 주문 내역이 있는 경우와 없는 경우 각각 40회씩 총 3회를 걸쳐 진행하여 테스트를 해보았다.

주문내역이 없는 경우 계절 기반과 날씨 기반으로 추천할 확률이 

1회 차 84.67%

2회 차 83.95%

3회 차 79.36%

 

주문 내역이 있을 경우

회차 계절 기반과 날씨 기반 주문내역 기반
1회차 6612% 28%
2회차 61.86% 18.36%
3회차 60.98% 19.52%

 

이 결과로 알 수 있는 점은 계절과 날씨에 따른 음식을 추천하지만 사용자의 주문 내역이 있으면 이를 반영하여 더 맞춤화된 추천을 제공할 있다는 것 을 알 수 있다.

 

후기 

6주간의 프로젝트에서 팀원 3명과 함께 비전공자로 구성된 팀으로 프로젝트를 진행했습니다. 제가 어릴 때부터 게임 개발을 하면서 개발 공부를 조금 한 경험이 있어, 팀장 역할을 맡지는 않았지만, 프로젝트의 전반적인 계획과 필요한 기능들을 제가 틀을 잡고 시작했습니다. 프로젝트는 사용자 페이지, 업체 페이지, 관리자 페이지, 라이더 페이지로 구성되어 있으며, JWT를 이용한 권한 분리도 구현했습니다.

주요 역할과 기여

프로젝트에서 제가 맡은 주요 항목은 다음과 같습니다:

  • 유저 페이지: 유저 페이지, 업체 목록 조회, 업체 검색, 음식 주문, 유저 계좌 잔액 충전, 업체 신고하기, 카카오 로그인, 구글 AI로 메뉴 추천
  • 업체 페이지: 업체 등록, 메뉴 등록, 댓글 관리, 현재 주문 상태 확인, 유저 신고하기, 메뉴 수정/삭제
  • 관리자 페이지: 신고받은 유저 차단하기, 신고받은 업체 차단하기
  • 라이더 페이지: 라이더 메인 페이지, 주문받기, 배달 등록하기, 배달 완료하기
  • 공통: JWT를 이용한 권한 나누기 및 로그인 시 적용

프로젝트의 프런트엔드와 백엔드 대부분의 코드와 틀을 제가 맡아 진행했습니다.

 

이렇게 많은 역할을 하게 된 이유에서 팀원 두 분은 프로젝트를 처음 경험하고 코딩을 접한 지 3개월 된 상황이었습니다. 처음에는 이분들이 전체 작업량의 40%를 담당하기로 했으나, 코드 작성에 익숙하지 않아 작업이 매우 느리게 진행되었습니다. 그래서 제가 그들의 작업까지 맡게 되었고, 대부분의 백엔드 코드와 프론트엔드 틀 잡는 작업을 제가 하게 되었습니다.

이 과정에서 다음과 같은 트러블이 발생했습니다:

  1. 팀원들의 자존심 문제: 제가 많은 작업을 맡게 되면서, 팀원들의 작업을 제가 대신하는 상황이 빈번해졌습니다. 이는 팀원들의 자존심에 영향을 미쳐, 일부 갈등이 발생했습니다.
  2. 업무 배분 문제: 팀원들이 맡은 작업을 기한 내에 완성하지 못하자, 작업 분담에 대한 불만과 책임 소재에 대한 논의가 필요하게 되었습니다.

이를 해결하기 위해서 

 

  • 커뮤니케이션 강화: 팀원들과의 원활한 소통을 위해 주기적으로 미팅을 열어 진행 상황을 공유하고, 서로의 어려움을 이해하려고 노력했습니다. 특히, 제가 많은 작업을 맡게 된 이유와 팀원들의 성장과 학습을 돕기 위한 제 역할을 설명했습니다.
  • 역할 분담 재조정: 각 팀원의 역량에 맞게 역할을 다시 분담했습니다. 코딩에 익숙하지 않은 팀원들에게는 문서 작업, 테스트, 디버깅 등의 업무를 맡기고, 비교적 간단한 기능 구현을 하도록 유도했습니다. 이렇게 팀원들이 단계적으로 실력을 향상할 수 있도록 하였습니다.

 

이러한 조치 덕분에 팀원들 고의 갈등을 해소하고 팀원들 또한 처음에는 기능 하나 만드는데 1주 정도 걸리던 팀원들이 2일에서 3일 만에 기능 하나씩 만들 수 있을 정도록 성장하면서 프로젝트를 성공적으로 마무리할 수 있었습니다.

 

반응형