Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[4.5주차 과제] 화면 분석 #15

Open
choyeongju opened this issue Nov 7, 2024 · 0 comments
Open

[4.5주차 과제] 화면 분석 #15

choyeongju opened this issue Nov 7, 2024 · 0 comments
Assignees

Comments

@choyeongju
Copy link
Member

choyeongju commented Nov 7, 2024

image

 

image

 

어떤 데이터가 내려가면 좋을까?

어디까지 서버의 영역일까?

✅  밑그림 그리기

  • User 는 1명만 있다고 가정했음
  • 주문(Order)은 현재 보여지는 화면만 생각했을 때는 고려하지 않아도 되는 요소라 생각함
  • 치킨, 중식, 피자 … 등 음식 카테고리 분류
  • 정렬 순서 - 기본 순, 주문 많은 순, 별점 높은 순, 찜 많은 순 ..
  • 음식 - 가게 이름, 최소주문, 별점, 신규 여부, 배달 도착 예정 시간, 배달팁 (범위 지정 가능), 쿠폰 존재 여부, 배달방식

 

✅ ERD

처음 구성했던 ERD

image

  • Category 클릭 시, Store 가 존재할 수도 있고 없을 수도 있다. (Optional)
  • 하나의 Store 는 1개 이상의 Category 를 반드시 가진다. (Mandatory)
  • Store 은 반드시 1개 이상의 Food 를 가진다 (Mandatory)
  • Food 는 각 Store 들의 고유한 메뉴이다. (Identifying)
    • 즉, 같은 떡볶이라도 다름

 

고민 !

1️⃣ Category 랑 Store_Category 의 연결 관계가 Optional 이고, Store_Category 랑 Store 은 Mandatory 인데 이게 적절한가?

처음에 카테고리를 눌렀을 때는 가게가 존재하지 않을 수도 있다고 생각했었기에 옵셔널로 하였고, 모든 가게들은 하나의 카테고리를 반드시 가져야 하니 때문에 필수 관계로 두었다.

 

2️⃣ 어느 정도 범위까지 따로 테이블을 만들어서 관리하는 게 좋을까?

  • 고정된 카테고리라면 Enum으로 처리하는 게 좋을 것 같다.
  • 사용자가 새로운 카테고리를 추가하는 등 데이터가 동적으로 변경될 가능성이 많은 경우라면 테이블로 관리하는 것이 좋을 것 같다.

→ 카테고리 테이블 빼고 enum 으로 변경해서 다시 만들어야겠다

→ 배달방식도 enum 으로 변경해야 겠다 (배달, 포장의 고정된 값)

 

3️⃣ 중간 테이블(Store_Category)의 필요성?

  • 배민 잘 모르겠지만.. Store 는 항상 하나의 Category 만 가진다고 생각하면, 그냥 Store 테이블에 category_id를 외래키로 포함시키면 될 것 같당
  • But, 하나의 Store가 여러 Category 를 가질 수 있고, 하나의 Category에 여러 Store가 속할 수 있는 경우에는 처음 구성했던 것처럼 중간 테이블이 필요하겠다.

 

4️⃣ rating(별점)

현재 화면에서는 단순하게 평균 별점을 보여주고 있기 때문에 그냥 column 으로 해도 괜찮을 것 같다. 사용자 리뷰 같은 것도 저장할 일이 있다면 Review 테이블 만들어서 Store 이나 Food 랑 연결하면 될 듯!

 

(if) Store 는 항상 하나의 Category 만 가짐 & 카테고리 변경 가능성이 많음

image

테이블로 따로 Category를 관리하고, Category 를 변경하거나 삭제해도 Store 의 존재에는 영향이 없으므로 비식별 관계로 둘 수 있겠다.

하지만, 배민에서는 카테고리를 사용자가 추가하는 등의 변경 가능성이 아예 없기 때문에 그냥 enum 으로 관리하는 것으로 하는 것이 좋겠다!

 

최종 ERD

image

Category 는 사용자가 추가하는 게 아니라 배민 자체에서 그냥 고정되어서 알려주는거기 때문에 Enum으로 처리했다.

 

✅ API

image

 

API Description

카테고리(분식, 족발/보쌈, 중식..) 를 선택하면 해당하는 음식점 리스트를 반환하는 API 입니다.

메인 화면에서 카테고리를 선택하는 경우와 카테고리 별 가게 리스트가 반환되어 있는 화면에서 다른 옵션들을 선택하는 경우를 합쳤습니다.

 

Request ✔️

image

 

  • GET, DELETE와 같은 Http 통신 방법에는 Http  Body가 없기 때문에 @RequestBody 어노테이션을 사용할 수 없습니다.
    → 따라서 Request Param 으로 필요한 값을 받아오도록 했습니다.
  • 필요한 요청 파라미터 값을 선택해서 사용할 수 있습니다.
image

 

Response ✔️

  • 22,900원 과 같은 금액값의 경우, 클라이언트에서 편리하게 처리할 수 있도록 String 으로 변환하여 쉼표까지 포함해서 반환해 주도록 했습니다.
image
{
  "stores": [
    {
      "store_id": 1,
      "store_name": "운정김밥 야당본점",
      "rating": 4.7,
      "delivery_fee": "무료",
      "min_order": "15,000",
      "is_new": false,
      "food": [
        {
          "food_id": 101,
          "food_name": "운정김밥",
          "price": "4,000",
          "image_url": "https://example.com/image1.jpg"
        },
        {
          "food_id": 102,
          "food_name": "참치김밥",
          "price": "5,000",
          "image_url": "https://example.com/image2.jpg"
        },
        {
          "food_id": 103,
          "food_name": "치즈김밥",
          "price": "5,000",
          "image_url": "https://example.com/image3.jpg"
        }
      ]
    },
    {
      "store_id": 2,
      "store_name": "칠봉통닭 탄현마을점",
      "rating": 5.0,
      "delivery_fee": "0~1,700",
      "min_order": "5,000",
      "is_new": false,
      "food": [
        {
          "food_id": 201,
          "food_name": "한마리 반반",
          "price": "22,900",
          "image_url": "https://example.com/image4.jpg"
        },
        {
          "food_id": 202,
          "food_name": "소금치킨",
          "price": "21,900",
          "image_url": "https://example.com/image5.jpg"
        }
      ]
    }
  ]
}
@choyeongju choyeongju self-assigned this Nov 7, 2024
@choyeongju choyeongju changed the title [4주차 과제] 서버 인프라 [4주차 과제] 팀별 토론 과제 Nov 8, 2024
@choyeongju choyeongju changed the title [4주차 과제] 팀별 토론 과제 [4.5주차 과제] 화면 분석 Nov 8, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant