콘텐츠로 이동

데이터 통합 모델

외부 채널 데이터를 포용하는 통합 DB 스키마(ERD) 설계


graph LR
    subgraph ASIS["AS-IS: 분산된 데이터"]
        A1["CS DB<br/>MSSQL"]
        A2["자사몰 DB"]
        A3["외부몰<br/>API"]
    end
    
    ETL["ETL/동기화"]
    
    subgraph TOBE["TO-BE: 통합 데이터"]
        B1["통합 DB<br/>PostgreSQL"]
        B2["• 고객 마스터"]
        B3["• 주문 통합"]
        B4["• CS 이력"]
        B5["• 구독 정보"]
    end
    
    A1 --> ETL
    A2 --> ETL
    A3 --> ETL
    ETL --> B1
    B1 --> B2
    B1 --> B3
    B1 --> B4
    B1 --> B5

graph LR
    subgraph Customer_Domain["고객 도메인"]
        Customer["Customer<br/>고객<br/>---<br/>PK: id<br/>이름, 연락처<br/>이메일, 등급<br/>채널"]
        Subscription["Subscription<br/>구독<br/>---<br/>PK: id<br/>FK: 고객id<br/>시작일, 종료일<br/>상태, 채널"]
        CmsAccess["CmsAccess<br/>CMS권한<br/>---<br/>PK: id<br/>FK: 구독id<br/>상태<br/>활성화일, 만료일"]
    end
    
    subgraph Order_Domain["주문 도메인"]
        Order["Order<br/>주문<br/>---<br/>PK: id<br/>FK: 고객id<br/>주문일시<br/>채널, 금액<br/>결제/배송상태"]
        OrderItem["OrderItem<br/>주문상세<br/>---<br/>PK: id<br/>FK: 주문id<br/>상품명, 수량<br/>금액"]
    end
    
    subgraph CS_Domain["CS 도메인"]
        CsTicket["CsTicket<br/>CS문의<br/>---<br/>PK: id<br/>FK: 고객id<br/>유형, 제목<br/>상태, 담당자"]
        CsHistory["CsHistory<br/>처리이력<br/>---<br/>PK: id<br/>FK: 티켓id<br/>처리자, 내용<br/>처리일시"]
    end
    
    Customer <--> Subscription
    Subscription <--> CmsAccess
    Customer <--> Order
    Order <--> OrderItem
    Customer <--> CsTicket
    CsTicket <--> CsHistory

컬럼명타입필수설명
idBIGSERIALPK고객 ID
customer_codeVARCHAR(20)UK고객 코드
nameVARCHAR(100)Y이름
phoneVARCHAR(20)Y연락처
emailVARCHAR(100)이메일
addressTEXT주소
gradeVARCHAR(20)등급
primary_channelVARCHAR(20)최초 유입 채널
created_atTIMESTAMPY생성일시
updated_atTIMESTAMPY수정일시
컬럼명타입필수설명
idBIGSERIALPK구독 ID
customer_idBIGINTFK고객 ID
product_typeVARCHAR(50)Y상품 유형
start_dateDATEY시작일
end_dateDATEY종료일
statusVARCHAR(20)Y상태
channelVARCHAR(20)Y가입 채널
created_atTIMESTAMPY생성일시
컬럼명타입필수설명
idBIGSERIALPK주문 ID
order_codeVARCHAR(30)UK주문 코드
customer_idBIGINTFK고객 ID
channelVARCHAR(20)Y주문 채널
order_dateTIMESTAMPY주문일시
total_amountDECIMAL(12,2)Y총금액
payment_statusVARCHAR(20)Y결제상태
delivery_statusVARCHAR(20)배송상태
external_order_idVARCHAR(50)외부 주문번호
created_atTIMESTAMPY생성일시

도메인코드
주문채널CHANNELOWN_MALL, NAVER, COUPANG, SPONSOR
결제상태PAY_STATUSPENDING, PAID, REFUNDED, CANCELLED
배송상태DELIV_STATUSREADY, SHIPPED, DELIVERED
구독상태SUBS_STATUSACTIVE, EXPIRED, CANCELLED
CS유형CS_TYPEINQUIRY, COMPLAINT, REFUND, ETC
항목규칙
연락처숫자만, 11자리 (010XXXXXXXX)
이메일소문자 변환, 유효성 검증
이름공백 제거, 특수문자 제거
주소우편번호 분리 저장

graph LR
    A["자사몰 DB"]
    B["API/DB Link"]
    C["동기화 서비스"]
    D["변경 이벤트 발행"]
    E["통합 DB"]
    
    A -->|API/DB Link| B
    B --> C
    C --> D
    D --> E
graph LR
    A["네이버"]
    B["쿠팡"]
    C["11번가"]
    D["API 수집"]
    E["수집 서비스"]
    F["주기적 폴링/<br/>Webhook"]
    G["통합 DB"]
    
    A -->|API 수집| D
    B -->|API 수집| D
    C -->|API 수집| D
    D --> E
    E --> F
    F --> G
graph LR
    A["통합 DB"]
    B["권한 변경"]
    C["CMS API"]
    D["CMS DB"]
    E["상태 동기화"]
    
    A -->|권한 변경| B
    B --> C
    C --> D
    D -->|상태 동기화| E
    E --> A

AS-IS (MSSQL)TO-BE (PostgreSQL)변환 규칙
(분석 후 작성)customer
subscription
order
  • 고객: 연락처 + 이름 기준 매칭
  • 주문: 외부 주문번호 기준 중복 체크

날짜작성자변경 내용
YYYY-MM-DD-초안 작성