쇼핑몰·SNS·예약 — 도메인이 바뀌어도
부모-자식 패턴은 그대로입니다
지금까지는 shop 한 도메인으로만 모델링을 봤습니다. 오늘은 완전히 다른 비즈니스 세 개의 ERD를 나란히 놓고 비교합니다. 쇼핑몰, SNS, 예약 시스템 — 서로 전혀 다른 서비스인데, 데이터 모델의 뼈대는 거의 같다는 걸 직접 확인하는 시간입니다.
이번 섹션의 여정
완료 ✓
완료 ✓
완료 ✓
지금 여기
직접 ERD 그리기
AI 협업 SQL 작성법
이번 강의는 직접 치는 SQL이 없는 읽는 강의입니다. 대신 앞에서 배운 도구를 전부 꺼내 씁니다 — ERD 3장을 같은 사고법으로 분석하면서, “모델링 사고법 하나로 모든 도메인을 다룰 수 있다” 는 걸 눈으로 확인할 거예요.
도메인 1 — 쇼핑몰: 이미 아는 그림 (복습)
이미 익숙한 우리 shop부터 빠르게 복습합니다. 5테이블, 부모-자식 4쌍.
부모-자식 관계를 한 줄로 요약하면 이렇습니다.
| 패턴 | shop 에서의 적용 |
|---|---|
| 1:N | members→orders · categories→products · orders→order_items · products→order_items |
| N:M (중간 테이블) | orders ↔ products — order_items 가 풀어줌 |
“운영자가 카테고리·상품을 등록하고 → 회원이 가입하고 → 주문하면 → 주문상세가 기록된다.” — 4-5에서 배운 대로, ERD는 결국 비즈니스가 흘러가는 순서입니다.
도메인 2 — SNS: 새 패턴 두 개가 나옵니다
이번엔 SNS입니다. 인스타그램이나 X(트위터) 같은 서비스를 떠올리면 돼요. 사용자가 글을 쓰고, 댓글을 달고, 좋아요를 누르고, 서로 팔로우합니다.
뼈대는 익숙합니다 — users→posts, posts→comments 전부 1:N. 그런데 여기서 새로운 패턴 두 개가 등장합니다.
패턴 ① — 자기참조 N:M (팔로우). “한 사용자가 여러 사용자를 팔로우하고, 한 사용자가 여러 사용자에게 팔로우당한다.” — users 한 테이블이 자기 자신과 N:M 관계입니다. N:M이니 당연히 중간 테이블이 필요한데, 그 follows 테이블의 두 FK가 둘 다 users 를 가리키는 게 포인트예요.
패턴 ② — 좋아요 (users ↔ posts 의 N:M). 이건 사실 새 패턴이 아닙니다. shop에서 이미 본 형태예요.
모델은 새 게 아닙니다 — 같은 패턴이 다른 옷을 입은 것. 좋아요는 주문상세와, 팔로우는 중간 테이블과 같은 구조입니다.
도메인 3 — 예약 시스템: 드디어 1:1 의 실전 등장
마지막은 예약 시스템 — 호텔이나 에어비앤비 같은 서비스입니다.
users→reservations, rooms→reservations 는 익숙한 1:N. 그런데 reservations 와 payments 사이 — “한 예약은 결제 한 건, 한 결제는 예약 한 건.” 4-3에서 “드물게 쓰인다” 고 했던 1:1 관계가 드디어 실전에 나왔습니다.
그런데 한 건씩 짝을 이룬다면, 그냥 예약 테이블에 결제 컬럼을 넣으면 안 될까요?
민감 정보가 매번 딸려 나옵니다
카드번호·영수증ID 같은 민감 정보가 예약을 조회할 때마다 같이
노출됩니다. 게다가 결제 전 예약은 결제 컬럼이 전부 NULL —
자주 보지도 않는 정보가 테이블만 무겁게 만들어요.
보안 격리 + 시점 분리
민감 정보는 별도 테이블에 격리해 접근 권한을 따로 관리하고, 결제 행은 예약이 확정된 시점에만 생성합니다. 예약 테이블은 가볍게 유지되고, 결제가 필요할 때만 JOIN하면 됩니다.
보안 · 격리 · 시점 분리. “하나에 하나” 라고 무조건 쪼개는 게 아니라 — 분리할 이유가 있을 때만 1:1 로 뺍니다. 이유가 없으면 그냥 한 테이블이 맞아요.
세 도메인 비교 — 같은 패턴이 다른 옷
자, 세 도메인을 한눈에 놓고 비교해 봅시다. 이 표가 오늘 강의의 결론입니다.
| 패턴 | 쇼핑몰 | SNS | 예약 |
|---|---|---|---|
| 부모-자식 | members→orders | users→posts | users→reservations |
| 1:N | 모든 직접 관계 | 모든 직접 관계 | users→reservations · rooms→reservations |
| N:M (중간 테이블) | order_items | likes · follows | (없음) |
| 자기참조 N:M | (없음) | follows ⭐ | (없음) |
| 1:1 | (없음) | (없음) | payments ⭐ |
| 공통점 | 부모-자식이 출발점 | 동일 | 동일 |
쇼핑몰·SNS·예약 — 비즈니스는 전혀 다른데, 모든 도메인에서 부모-자식 패턴이 데이터 모델의 출발점입니다. 1:N, N:M, 1:1, 자기참조… 전부 부모-자식의 변형일 뿐이에요.
“부모-자식만 알면, AI 가 모든 도메인의 SQL 을 만들어준다.” — 4-2에서 드린 약속이 빈말이 아니었다는 걸, 세 도메인이 직접 보여줬습니다.
처음 보는 도메인을 만나도 됩니다
회사에 가면 — 우리 강의에서 안 다룬 도메인의 ERD를 받게 될 거예요. 의료, 금융, 물류, 게임, 콘텐츠 플랫폼… 걱정하지 마세요. 분석 순서는 항상 같습니다.
| 단계 | 할 일 | 강의에서 배운 도구 |
|---|---|---|
| 1 | 마스터(부모) 테이블부터 찾기 | 4-5 ERD 읽기 5단계 |
| 2 | 부모-자식 관계 식별 | 4-2 부모/자식 테이블 |
| 3 | 관계 종류 판단 (1:N / N:M / 1:1) | 4-3 식별 질문 |
| 4 | 빈틈·잘못된 설계 진단 | 4-6 두 직관 |
도메인이 바뀌어도 부모-자식 사고법은 그대로입니다. 병원의 환자→진료, 은행의 고객→계좌→거래, 게임의 유저→캐릭터→아이템 — 전부 오늘 본 패턴의 변형이에요.
자주 헷갈리는 지점
follows 의 follower_id 와 following_id 가 둘 다 users 를 가리키는 게
어색하게 느껴질 수 있어요. 역할이 다른 두 개의 관계일 뿐입니다.
1:1 을 배우고 나면 모든 걸 쪼개고 싶어지는데, 1:1 은 어디까지나 예외적인 패턴입니다.
같은 사용자가 같은 글에 좋아요를 두 번 누르는 걸 막는 역할도 복합 PK가 합니다.
order_items 도 (order_id, product_id) 복합 PK였죠.AI에게 “우리 회사 ERD 분석해줘” 라고 시키는 날이 반드시 옵니다. 그때 여러분이 직접 분석해본 경험이 있어야 AI의 답을 검증할 수 있어요. 본인 회사나 관심 있는 도메인의 ERD 한 장을 골라, 위의 4단계로 직접 분석해보세요.
세 도메인을 하나의 사고법으로 읽어냈다면 — 이제 모델링의 마지막 단계만 남았습니다. 다음 강의는 비즈니스 요구사항을 받아 직접 ERD를 그리는 종합 실습입니다.