
K-FreeMarket 프로젝트는 상품을 판매하는 웹 서비스를 목표로 혼자서 개발하게 되었습니다.
기본적인 기능은 상품 조회 및 판매, 유저의 장바구니와 결제, 주문 처리 등이며,
동시 접속자 수는 약 100명 내외를 예상하고 있습니다.
본 문서에서는 웹 서비스의 서버 구축에 앞서 가장 기초가 되는 ERD 설계 과정을 단계별로 소개하겠습니다.
ERDCloud 사이트를 활용해 작성했습니다.
우선 서비스를 구성하는 주요 데이터 단위를 식별합니다. 아래는 도출한 핵심 엔티티입니다.
| 엔티티 | 설명 |
|---|---|
| User (유저) | 개인 정보 및 계정 정보를 담당 |
| CartItem (장바구니) | 유저가 담은 상품 정보 담당 |
| Order (주문) | 결제 후 주문의 상태 및 정보 관리 |
| OrderItem (주문 상세) | 주문에 포함된 각 상품의 상세 정보 담당 |
| Payment (결제 내역) | 결제 수단, 상태, 결제 일시 등 관리 |
| Product (상품) | 상품 기본 정보 관리 |
| ProductImage (상품 이미지) | 상품에 연결된 이미지 관리 |
| Review (리뷰) | 유저가 남긴 상품 리뷰 담당 |
| Question (질문) | 상품에 대해 유저가 남긴 질문 담당 |
| Answer (답변) | 질문에 대한 관리자 또는 판매자의 응답 |
| ErrorLog (로그) | 시스템 이벤트, 에러, 행동 기록 등 수집 독립적인 엔티티 |
| Banner (배너) | 이벤트, 상품 홍보 등 메인 화면 배너 관리 |
📌 ERD 엔티티:

💡
Error_Log는 시스템 전반의 에러를 기록하기 위한 독립적인 엔티티입니다.
다른 엔티티와 직접적인 관계를 맺지 않고도 시스템 전체의 예외 상황을 추적할 수 있도록 구성합니다.
엔티티 간의 관계를 도식화하기 전에, 핵심 엔티티를 중심으로 배치합니다.
보통 서비스 구조상 중요한 엔티티는 왼쪽 상단에 배치하는 것이 좋습니다.
이 단계가 ERD 설계의 핵심입니다. 각 엔티티 간의 관계를 다음과 같이 정의합니다:
1:1, 1:N, N:M 관계를 명확하게 설정합니다.
N:N 관계는 중간 테이블(엔티티)을 두어 1:N - N:1로 분해합니다.
식별관계 vs 비식별관계
📸 관계 도식화

아래는 관계 및 제약 조건까지 고려한 최종 ERD 구성입니다.
(많은 수정을 거쳤습니다. 또한 많은 수정을 할 예정입니다.)

ERD 설계는 단순히 테이블을 나열하는 것이 아니라, 비즈니스 로직과 데이터 흐름을 정제된 구조로 표현하는 과정입니다.