과제: ERD 작성 연습
오늘의 과제는 배달의 민족, 당근마켓, 직방, 토스, 마켓컬리 등 실제로 존재하고 많은 사람들이 사용하는 서비스를 레퍼런스 삼아 가상으로 DB를 설계하고 ERD를 작성하는 연습해보는 것이다. 나는 dbdiagram.io 라는 사이트로 설계했고, dbdiagram.io에서 작성한 코드를 ChatGPT에게 ERD로 변환해달라고 부탁했다.
1.배달의 민족 스타일 음식 배달 서비스 DB 설계

1-1. 👤 사용자 관련 테이블
✅ User
- 사용자 정보를 저장
- 주요 컬럼:
- user_id: 사용자 고유 ID (PK)
- user_name, email, phone_number: 사용자 기본 정보
✅ User_Addresses
- 사용자별 복수 주소 등록 가능
- 주요 컬럼:
- address_id: 주소 고유 ID (PK)
- user_id: 어떤 사용자에 속하는 주소인지 나타냄 (FK)
- is_default: 기본 배송지 여부
1-2. 🍽️ 음식점 관련 테이블
✅ Restaurant
- 음식점 정보 및 영업시간 저장
- 주요 컬럼:
- restaurant_id: 음식점 ID (PK)
- category_id: 음식점 분류 ID (FK)
- location, open_time, close_time
✅ RestaurantCategory
- 음식점 분류 (한식, 중식 등)
- 예: 한식, 중식, 분식, 디저트 등
1-3. 🧾 메뉴 및 옵션
✅ Menu
- 음식점별 메뉴 구성
- 주요 컬럼:
- menu_id: 메뉴 고유 ID (PK)
- restaurant_id: 어느 음식점 소속인지 (FK)
- has_multiple_option: 토핑/사이즈 등 옵션 존재 여부
✅ MenuOptionGroup
- 옵션 그룹 정보 (토핑, 사이드 등)
- 예: “토핑 선택”, “사이즈 선택”과 같은 옵션 그룹 이름을 저장
✅ MenuOption
- 실제 옵션 항목 정보
- 예: 치즈 추가, 곱빼기, 콜라 추가 등
- option_group_id로 어떤 그룹에 속하는지 연결됨
1-4. 📦 주문 관련 테이블
✅ Order
- 사용자 주문 정보
- 주요 컬럼:
- order_id: 주문 고유 번호
- order_address: 배달지
- user_id, rider_id, payment_id: 사용자, 배달원, 결제와 연결
✅ OrderStatus
- 주문 상태 관리
- 예: “준비 중”, “배달 중”, “배달 완료”
✅ OrderItem
- 주문 메뉴 상세 내역
- 한 주문에 여러 개의 메뉴가 있을 수 있음
✅ SelectedOption
- 주문한 메뉴의 옵션 선택 내역
- 예: 떡볶이에 “치즈 추가 1개”, “곱빼기 1개” 등
1-5. 💳 결제 관련 테이블
✅ Payment
- 결제 기록
- 주문과 결제는 1:1 매핑
✅ PaymentMethod
- 결제 방식 정보
- 예: 카드, 카카오페이, 배민페이 등
1-6. 🛵 라이더
✅ Rider
- 배달 기사 정보
- 주문과 연결되어 있음
🥕 2. 당근마켓 스타일 중고거래 서비스 DB 설계 해석

👤 2-1. 사용자 및 지역
✅ User
- 회원 정보 저장
- 주요 컬럼:
- user_id: 사용자 고유 ID (PK)
- town_id: 사용자의 거주 지역 (동) (FK)
- profile_image_url: 프로필 이미지 (선택 사항)
✅ 지역 주소 체계
- 시 → 구 → 동 구조로 구성됨
| 테이블명 | 설명 | 주요 컬럼 |
| Province | 시/도 | province_name (예: 서울특별시) |
| District | 구 | district_name, province_id |
| Town | 동 | town_name, district_id |
🛍️ 2-2. 중고거래 게시글
✅ Item
- 판매 게시글 정보
- 주요 컬럼:
- item_id: 상품 고유 ID (PK)
- user_id: 판매자 ID (FK)
- category_id, item_status_id: 카테고리/상태 정보 (FK)
- item_title, item_price, item_reg_datetime
✅ ItemCategory
- 상품 분류 (가전, 의류, 도서 등)
✅ ItemStatus
- 판매 상태 관리
- 예: 판매중, 예약중, 거래완료 등
💬 2-3. 채팅 시스템
✅ ChatRoom
- 1:1 채팅방 생성
- 주요 컬럼:
- item_id: 어떤 상품 관련 채팅인지
- user_id_sender, user_id_receiver: 참여자 IDs
✅ ChatMessage
- 실제 메시지 내역
- 주요 컬럼:
- chat_room_id: 어떤 방의 채팅인지
- send_datetime, content: 메시지 시간과 내용
🤝 2-4. 거래 및 리뷰
✅ Deal
- 성사된 거래 정보
- 주요 컬럼:
- item_id: 어떤 상품을 거래했는지
- user_id_buyer, user_id_seller
- deal_price, deal_datetime, deal_place
✅ Review
- 거래 후 평가 정보
- 주요 컬럼:
- review_type_id: 구매자→판매자 or 판매자→구매자
- deal_id: 어떤 거래에 대한 리뷰인지
- user_id_reviewer, user_id_reviewed: 평가 주체 및 대상
✅ ReviewType
- 리뷰 유형 정의
- 예: “판매자에 대한 평가”, “구매자에 대한 평가”
🏠 3. 직방 스타일 부동산 중개 서비스 DB 설계 해석

👤 3-1. 사용자 및 관심정보
✅ User
- 사용자 기본 정보 저장
- 주요 컬럼:
- user_id: 사용자 고유 ID
- user_name, phone_number, email
✅ InterestedTown
- 관심 지역(동)을 저장
- 사용자는 여러 동을 관심지역으로 등록 가능
✅ InterestedProperty
- 관심 매물 정보 저장
- 사용자가 즐겨찾기한 매물 목록 관리
📍 주소 체계 (시/구/동)
- 시 → 구 → 동 구조의 계층적 주소 체계
| 테이블 | 설명 | 주요 컬럼 |
| Province | 시/도 | province_name |
| District | 구 | district_name, province_id |
| Town | 동 | town_name, district_id |
🏢 3-2. 매물 정보
✅ Property
- 중개 대상 부동산 정보
- 주요 컬럼:
- property_id: 매물 고유 ID
- property_name, property_price, property_size
- property_type: 아파트, 오피스텔 등 (FK)
- town_id: 위치한 동 (FK)
- realtor_id: 담당 중개사 (FK)
- latitude, longitude: 지도 표시를 위한 위치정보
✅ PropertyType
- 매물 유형 관리 (예: 아파트, 원룸, 오피스텔 등)
✅ PropertyImage
- 매물 사진 저장
- is_main: 대표 이미지 여부
👨💼 3-3. 중개사
✅ Realtor
- 부동산 중개사 정보
- 주요 컬럼:
- realtor_id: 중개사 ID
- realtor_name, phone_number
- office_name, office_address
💡 실무에서는 realtor_id 대신 “중개사 등록번호”로 대체하는 것도 고려해봤다.
📩 3-4. 문의 시스템
✅ Inquiry
- 사용자의 매물 문의 정보
- 주요 컬럼:
- user_id, property_id: 누가 어떤 매물에 대해 문의했는지
- inquiry_contents, response_contents: 질문 & 답변
- desired_date_of_visit: 방문 희망 일정
- inquiry_status_id: 답변 여부
✅ InquiryStatus
- 문의글 상태 관리
- 예: “미답변”, “답변 완료”
📩 3-5. 예약 시스템
✅ Reservation
- 방문 예약 요청 정보
- 주요 컬럼:
- user_id, property_id, realtor_id: 예약 주체 및 대상
- reservation_created_at
- reservation_status_id: 예약 상태 구분
✅ ReservationStatus
- 예약 진행 상황 관리
- 예: 요청, 승인, 거절, 방문 완료 등
💸 4. 토스 스타일 간편 금융 서비스 DB 설계 해석

👤 4-1. 사용자 및 인증 정보
✅ User
- 회원 정보 및 가입일 저장
- 주요 컬럼:
- user_id: 사용자 고유 ID
- user_name, phone_number, email
- registered_at: 가입일자
✅ AuthInfo
- 본인 인증 기록 저장
- 예: 공동인증서, 휴대폰 본인확인 등
- 주요 컬럼:
- user_id: 어떤 사용자의 인증인지
- auth_method: 인증 방식
- auth_reg_date: 인증 등록 시점
🏦 4-2. 은행 계좌 및 송금
✅ Account
- 사용자의 은행 계좌
- 주요 컬럼:
- account_number: 계좌번호 (고유)
- bank_name, balance, bank_opened_at
- user_id: 소유자
✅ Transfer
- 계좌 간 송금 기록
- 주요 컬럼:
- sender_account_id → 출금 계좌 (FK)
- receiver_account_id → 입금 계좌 (FK)
- amount, transferred_at, memo
- transfer_status_id: 송금 결과
✅ TransferStatus
- 송금 처리 상태
- 예: "완료", "실패", "보류"
💰 4-3. 금융상품 관련 테이블
✅ FinancialProduct
- 금융상품 마스터 정보
- 예: 예금, 채권, 펀드 등
- 주요 컬럼:
- product_type_id: 상품 유형 (FK)
- min_invest_amount, interest_rate, duration_months
- product_status_id: 상태 (판매 중/종료)
✅ ProductType
- 금융상품 유형 정의
- 예: 예금, 적금, 펀드, 채권 등
✅ ProductStatus
- 금융상품의 현재 상태
- 예: 판매 중, 종료 등
📈 4-4. 상품 가입/투자 내역
✅ ProductSubscription
- 사용자의 투자/가입 기록
- 주요 컬럼:
- user_id: 투자자 (FK)
- product_id: 어떤 상품인지 (FK)
- subscribed_at, invested_amount
- expected_return_rate: 예상 수익률
- current_valuation, valutation_datetime: 현재 평가액과 기준 시점
🥬 5. 마켓컬리 스타일 새벽배송 서비스 DB 설계 해석

👤 5-1. 사용자 정보
✅ User
- 사용자 기본 정보와 가입일 관리
- 주요 컬럼: user_id, user_name, phone_number, email, registered_at
✅ UserAddress
- 복수 배송지 등록 가능
- 주요 컬럼:
- user_id: 사용자 ID
- address_detail: 상세 주소
- is_default: 기본 배송지 여부
🛍️ 5-2. 상품 및 분류
✅ Product
- 판매 상품 정보 저장
- 주요 컬럼:
- product_id, product_name, unit_price, stock_quantity, expiration_date
- description: 상품 상세
- category_id: 카테고리 FK
✅ ProductCategory
- 상품 분류 (예: 채소, 육류, 생필품 등)
🛒 5-3. 장바구니
✅ Cart
- 사용자별 장바구니 (하나의 장바구니 = 여러 상품)
- user_id, created_at
✅ CartItem
- 장바구니에 담긴 개별 상품 항목
- product_id, quantity, added_at
📦 5-4. 주문 및 주문 상세
✅ Order
- 주문 마스터 정보
- 주요 컬럼:
- cart_id: 장바구니 기반 주문 (nullable)
- user_id, address_id, delivery_id, order_status_id
- order_created_at, total_amount
✅ OrderItem
- 주문한 각 상품 정보 (1:N)
- product_id, unit_price, quantity
🧂5-5. 주문 옵션 (예: 손질 여부)
✅ OrderItemOption
- 주문 항목에 따른 선택 옵션 정보
- 예: 손질, 소분 여부
✅ Option
- 옵션 종류와 금액 저장
🚚 5-6. 배송 정보
✅ Delivery
- 배송 일정/유형
- delivery_type_id, estimated_delivery_date
✅ DeliveryType
- 배송 유형 정의
- 예: 샛별배송, 일반배송
📦 5-7. 주문 상태
✅ OrderStatus
- 주문 처리 상태 관리
- 예: “주문 접수”, “배송 중”, “배송 완료” 등
💳 5-8. 결제 시스템
✅ Payment
- 주문에 대한 결제 기록
- order_id, amount, paid_at
- payment_method_id, payment_status_id
✅ PaymentStatus
- 결제 처리 결과 (예: 성공, 실패)
✅ PaymentMethod
- 결제 방식 (카드, 간편결제 등)
본 후기는 [카카오엔터프라이즈x스나이퍼팩토리] 카카오클라우드로 배우는 AIaaS 마스터 클래스 (B-log) 리뷰로 작성 되었습니다.
'학습일지 > K-Digital Traing' 카테고리의 다른 글
| [KDT] AIaaS 마스터클래스 5주차 - 리눅스 실습 (1) | 2025.04.23 |
|---|---|
| [KDT] AIaaS 마스터클래스 4주차 - 리눅스에 대해 (0) | 2025.04.18 |
| [KDT] AIaaS 마스터클래스 3주차 - Prometheus & Grafana 모니터링 실습 (0) | 2025.04.11 |
| [KDT] AIaaS 마스터클래스 3주차 - 클라우드 어플리케이션 배포 실습 (0) | 2025.04.10 |
| [KDT] AIaaS 마스터클래스 3주차 - 쿠버네티스 실습 (0) | 2025.04.09 |