Skip to content

Additional Feature Design

WinterHana edited this page May 19, 2024 · 32 revisions

0. 참고한 레퍼런스

1. 데이터 모델링

1. 개수 상호작용에 대한 설계

1) 개수 관리에 대한 필요 기능

  • ProductVO, PurchaseVO에 개수 설정 추가
  • (UI) 구입 시 개수 설정 가능, 리스트에서 개수 확인 가능, 구매 시 개수 확인 가능
  • UPDATE 시 개수 설정 추가, SELECT 시 개수 확인 추가
  • 개수만큼 구입하면 총 개수에 반영할 수 있도록 하기 - UPDATE
  • (UI) 개수 구입 시 유효성 확인은 javascript alert로 바로 확인하기
  • 매진이 됐다면 상세 보기 까지만 되고, 구매는 막는다.

2) 개수와 관련된 구매에 대한 필요 기능

  • left Layer 정리하기 - 0
  1. not login : 상품 검색 / 최근 본 상품
  2. user : 개인정보 조회 / 상품 검색 / 구매 이력 조회 / 구매 이력 조회 / 최근 본 상품
  3. admin : 개인정보 조회, 회원정보 조회 / 상품 검색 / 판매 상품 등록, 판매 상품 관리 / 최근 본 상품
  • (관리자) 상품 리스트와 구매 관리의 분리 필요
    • 관리자가 구매 이력을 검색하는 SQL에 대하여 새로 구성해야 함
    • (사용자 View) 구매 이력 : 구매 번호, 제품 이름, 제품 수량, 배송 상태
    • (관리자 View) 판매 이력 : 구매 번호, 회원 ID, 회원명, 전화 번호, 제품 이름, 개수, 배송 상태
  • (관리자) 구매 관리에 대한 배송 상태를 컨트롤할 수 있어야 함
  • (사용자) 소비자는 제품 받기 확인, 배송 전 구매 수정까지만 가능해야 한다.
  • 구매 내역 확인 시, 제품 번호 대신 제품 이름으로 출력.

3) DB 구조

image

  • Transaction에 prod_count, Product에 count column을 추가함
  • 장바구니 설계를 위해 테이블 간의 관계는 나중에 바꿀 예정

2. 편의 기능 추가

참고한 레퍼런스 - 1

참고한 레퍼런스 - 2

1) DB 설계

ERD ver 1 2

  • Product의 image_file에 대한 내용을 productImage Table로 옮기기
  • product의 manufacture_day를 VARCHAR(2)에서 DATE로 변경
  • product의 image_file column 삭제

2) 필요 기능

  • 이미지 업로드가 가능하도록 하기
    • 이미지 업로드한 결과가 바로 반영되도록 하기 참고한 레퍼런스
    • 다중 이미지 업로드 구현
  • 최근 본 상품 5개가 왼쪽 레이아웃에 바로 반영되도록 하기
  • 유저, 제품, 구매목록에 대한 삭제 추가

3. 마일리지를 이용한 구입, 장바구니 설계

1) DB 설계

ERD ver 1 3#

1. mileage

  • Users Table에 mileage Column 추가

2. 찜하기, 장바구니

  • Transaction의 prod_no 삭제
  • Transaction의 prod_count 삭제 (더 이상 필요 없음)
  • Transaction의 total_price 추가 (총 금액 계산 및 매출 계산)
  • Transaction의 tran_name 추가 (이름 짓기 가능)
  • TransactionList 추가 : 하나의 구매 목록에 다양한 제품 내용을 반영하고자 함.
  • Cart 추가 : 장바구니 역할을 할 테이블 추가

2) 필요 기능

1. 마일리지를 이용한 구입 알고리즘

DB 변경 : mileage 추가, total_price 추가

  • 유저마다 마일리지를 부여한다.
    • admin 계정은 유저마다 마일리지를 부여할 수 있게 한다. (유저 정보 수정에서 가능)
  • 유저가 가지고 있는 마일리지에 따라 상품을 구매할 수 있다.
    • 잔액 부족 등 유효성 체크도 겸한다.
    • 마일리지는 소모되어야 하고, 소모된 마일리지는 따로 관리해 매출 관련 통계를 낼 수 있도록 한다.
    • 상품을 반품할 시, 마일리지 다시 제공, 매출에서 제외 등의 로직이 들어가야 한다.

마일리지가 변동되는 시점 : admin의 유저 추가 및 수정, 상품 구매 및 반품 -> Purchase Service에서 이뤄진다.

2. 장바구니 (Cart)

  1. 장바구니 넣기
  • 장바구니에 제품을 넣을 수 있다. 이때, 장바구니는 따로 Table을 통해 관리한다. -> Cart Table 사용
  1. 장바구니 내 구입
  • 장바구니의 전체 내용을 한 번에 구매 후 하나의 판매(transaction)로 관리해야 한다.
  1. 바로 구입
  • 바로 구입 시, 1.2ver의 구입처럼 바로 구입 후, 판매로 관리할 수 있도록 한다.
  1. 구매 내역 상세 보기
  • 구매 내역을 확인 시 구매한 제품 리스트들을 확인할 수 있어야 한다.

찜하기를 이용한 구입 알고리즘은 다음과 같다

  1. 먼저 addPurchase를 통해 구입 정보를 DB에 저장한다. 이때, 이제 prod_no, prod_count는 쓰지 않으므로 이에 대한 SQL 수정이 필요하다.
  2. 그리고 지정된 form 동시 제출을 사용하여 addTransactionList에 각 제품에 대한 내용을 DB에 저장한다. 바로 주문을 누르면 찜하기 없이 바로 위와 같은 과정을 거친다.

4. API를 이용한 추천 시스템 - 날씨 / 제품 추천 시스템 - 제품의 태그 기반

태그에 대한 레퍼런스

https://velog.io/@korea3611/Spring-Boot-%ED%95%B4%EC%8B%9C%ED%83%9C%EA%B7%B8-%EA%B8%B0%EB%8A%A5%EC%9D%84-%EA%B0%80%EC%A7%80%EA%B3%A0-%EC%9E%88%EB%8A%94-%EA%B2%8C%EC%8B%9C%ED%8C%90-%EB%A7%8C%EB%93%A4%EC%96%B4%EB%B3%B4%EA%B8%B0

https://velog.io/@silverbi99/jQuery-%ED%95%B4%EC%8B%9C%ED%83%9C%EA%B7%B8-%EA%B5%AC%ED%98%84%ED%95%98%EA%B8%B0

https://s7won.tistory.com/3

https://data-marketing-bk.tistory.com/entry/SQL-JOIN-%ED%95%9C-%EB%B0%A9%EC%97%90-%EC%A0%95%EB%A6%AC-%EA%B0%9C%EB%85%90%EB%B6%80%ED%84%B0-%EC%BD%94%EB%93%9C%EA%B9%8C%EC%A7%80-%EC%9D%B4%EA%B2%83%EB%A7%8C-%EB%B3%B4%EC%9E%90#google_vignette

https://bmangrok.tistory.com/entry/Mybatis-%ED%95%B4%EC%89%AC%ED%83%9C%EA%B7%B8-%EA%B2%80%EC%83%89-%EC%BF%BC%EB%A6%AC-%EC%A7%9C%EA%B8%B0

1) DB 설계

ERD ver 1 4

2) 기본 목표

  • 제품에 해시태그를 다는 기능 추가
  • 제품 개수 다량 추가 (200개 정도)
  • 날씨 API로 오늘 날씨의 정보를 가져와서 해시태그를 통해 제품 추천하기
    • 날씨 상황은 여러 요인에 따라 맑음, 흐림, 비, 더움, 추움 총 5가지로 나눈다.
  • 찜하기 실행 시 연관 있는 해시태그의 제품 추천하기

날씨 요인에 대한 연구

  1. 기준은 대구로 좌표를 잡는다. : 격자X : 89 / 격자Y : 90
  2. 단기 예보를 기준으로 잡는다.
  3. 하늘 상태(SKY): (단기) 없음(0), 비(1), 비/눈(2), 눈(3), 소나기(4)
  4. 시간 기준 : 0800 (08시) 기준으로 진행

json parsing reference : https://adjh54.tistory.com/375

5. 제품에 대한 통계 시스템 구축

매출, 태그 종류, 유저의 구입 현황 등

  • 매출 관련 통계 : 날짜별 총합 - Line Chart
  • 태그별 제품 개수 - Pie Chart
  • 많이 구매한 제품 순위 - Polar Area Chart

등을 설계해서 한 페이지에 표시하기. 이 페이지는 admin 계정만 확인 가능하다.