MSA-1. ERD 설계 및 작성

ERD

새로운 프로젝트에 대한 명세는 아래와 같다.

  • 기본적인 E-commerce 서비스를 위한 회원 플랫폼
  • 사용자는 플랫폼을 통해 회원가입, 로그인, 로그아웃, 마이페이지 등의 기본적인 유저 관리 기능을 편리하게 이용
  • 커머스를 이용하기 위한 핵심 요소인 WishList, 주문내역, 주문상태 조회 등의 기능을 제공하여 사용자가 원하는 물품의 구매 및 진행 상태를 원할하게 인지
  • 올바른 주문 및 결제/환불 등을 처리하기 위해선 회원의 개인정보가 저장되어야 함

위와 같은 명세를 충족하기 위해 아래와 같이 ERD를 설계했다.

주요 entity

  1. Users (사용자)
    • email (PK, 이메일)
    • user_name (사용자 이름)
    • password (비밀번호)
    • phone (전화번호)
    • address (주소)
  2. Orders (주문)
    • orderKey (PK, 주문 키)
    • email (FK, 이메일)
    • orderStatus (주문 상태)
    • orderAt (주문 날짜)
  3. OrderDetail (주문 상세)
    • orderDetailKey (PK, 주문 상세 키)
    • orderKey (FK, 주문 키)
    • productID (FK, 제품 ID)
    • orderPrice (주문 가격)
    • productCount (제품 수량)
  4. Products (제품)
    • productID (PK, 제품 ID)
    • productName (제품 이름)
    • price (가격)
    • stock (재고)
  5. WishList (위시리스트)
    • wishID (PK, 위시리스트 ID)
    • email (FK, 이메일)
    • productID (FK, 제품 ID)
    • addAt (추가 날짜)

관계

  • Users < Orders
    • 한 명의 사용자가 여러 개의 주문을 할 수 있음
  • Users < WishList
    • 한 명의 사용자가 여러 개의 위시리스트 항목을 가질 수 있음
  • Orders < OrderDetail
    • 하나의 주문이 여러 개의 주문 상세를 가질 수 있음
  • Products < OrderDetail
    • 하나의 제품이 여러 개의 주문 상세에 포함될 수 있음
  • Products < WishList
    • 하나의 제품이 여러 사용자의 위시리스트에 포함될 수 있음

n+1 문제에 대한 해결방안 모색

  • n+1 문제가 뭔지 정확히 이해하기
    • 연관 관계에서 발생하는 이슈로 연관 관계가 설정된 엔티티를 조회할 경우에 조회된 데이터 갯수(n) 만큼 연관관계의 조회 쿼리가 추가로 발생하여 데이터를 읽어오게 된다.

해결 방법

  1. Eager Loading (즉시 로딩)
    • N+1 문제를 해결하는 일반적인 방법은 즉시 로딩을 사용하는 것이다. 즉시 로딩을 사용하면, 관련된 데이터를 한 번의 조인 쿼리로 가져올 수 있다.
  2. Batch Loading (배치 로딩)
    • ORM 도구에 따라 배치 로딩이라는 기법도 사용될 수 있다. 배치 로딩은 필요한 데이터를 여러 번의 적은 수의 쿼리로 나누어 가져오는 방법 중 하나다.

내가 설계한 ERD는 N+1 문제가 발생할 여지가 없어 보여서 우선 이렇게 설계를 했다. ERD를 제대로 설계해야 모든 데이터의 흐름을 내가 컨트롤 할 수 있기 때문에 ERD 설계는 정말 중요한 부분 중 하나이다.

judy

About judy

junior BE

Comments

comments powered by Disqus