a) 비즈니스 프로세스 선택
현재 ERD를 통해 도출될 수 있는 서비스는 무엇이 있을까? 도메인을 나누어 몇가지 정리해 보있다.
사용자 도메인
•
사용자 가입 및 탈퇴
계좌 도메인
•
계좌 개설 및 해지
•
예수금 입금 및 출금
•
종목 매수 후 보유
주문 도메인
•
주식 주문 요청
체결 도메인
•
매수/매도 호가 등록
•
체결 시 체결 결과 전달
•
미체결 시 장 마감 후 일괄 처리
•
미체결 결과 전달
종목 도메인
•
종목 상장 및 상장폐지
•
종목 별 재무 업데이트
•
종목 별 리포트 업데이트
이런 서비스들 중 비즈니스 성과에 대한 지표가 될 수 있는 프로세스를 선택하였다.
사용자 도메인
•
사용자 가입 및 탈퇴
어떤 사용자 혹체결 시 체결 결과 전달은 특정 유형의 사용자가 서비스에 가입하는 것을 성과 지표로 사용할 수 있다.
계좌 도메인
•
계좌 개설
어떤 계좌 혹은 특정 유형의 계좌가 개설되는 것을 성과 지표로 사용할 수 있다.
•
예수금 입금 및 출금
특정 유형의 계좌에 고액의 예수금을 입금하고 출금하는 것을 성과 지표로 사용할 수 있다.
주문 도메인
•
주식 주문
주문량의 증감을 성과 지표로 사용할 수 있다.
체결 도메인
•
체결 시 체결 결과 전달
체결 시 청구되는 수수료를 성과 지표로 사용할 수 있다.
비즈니스 성과 산출에 당장 필요하진 않지만, 차후 분석에 도움될 수 있는 프로세스는 다음과 같다.
체결 도메인
•
매수/매도 호가 등록
•
미체결 시 장 마감 후 일괄 처리
•
미체결 결과 전달
시스템 장애 혹은 악의적인 사용을 인지하고 방지할 수 있다.
종목 도메인
•
종목 상장 및 상장폐지
•
종목 별 재무 업데이트
•
종목 별 리포트 업데이트
데이터 분석 혹은 머신러닝을 통해 시장 동향에 대해 인사이트를 얻을 수 있다.
종목 데이터 오픈 API를 제공하여 부수적인 수입원을 만들 수 있다.
각 비즈니스 프로세스의 속성은 다음과 같이 정리된다. 설계할 팩트 유형을 굵은 글씨로 표시하였다.
분석 예시 | 관련 부서 | 테이블 변화 | 가능한 팩트 유형 | 주기 | |
사용자 가입 | 사용자 유형 분류,
프로모션 성과 측정 | 고객 관리,
홍보 | 고객 테이블 행 insert | 트랜잭션,
스냅샷,
누적 스냅샷 | 가입 활동,
매일,
일, 주, 월별 |
계좌 개설 | 개설 계좌 유형 분류,
프로모션 성과 측정 | 고객 관리,
홍보 | 계좌 테이블 행 insert,
계좌 테이블 행 update | 트랜잭션,
스냅샷,
누적 스냅샷 | 계좌 개설 활동,
매일,
일, 주, 월별 |
예수금 입출금 | 주요 사용자 분류,
재무 계획 참고,
투자 상품 성과 측정 | 고객 관리,
홍보,
재무 | 계좌 테이블 행 update | 트랜잭션 | 매 잔액 변동 |
주식 주문 | 주요 사용자 분류,
첫 주문 추적
거래소 성과 측정,
시스템 이상 감지 | 고객 관리,
홍보,
경영,
시스템 운영 관리 | 주문 테이블 행 insert | 트랜잭션,
스냅샷,
누적 스냅샷 | 매 주문
장 마감 후
일, 주, 월 별 |
체결 및 결과 전달 | 재무 정산,
거래소 성과 측정,
시스템 이상 감지 | 재무,
경영,
시스템 운영 관리 | 체결 테이블 행 insert | 트랜잭션,
스냅샷,
누적 스냅샷 | 매 체결
장 마감 후
일, 주, 월 별 |
b) 그레인 정의
하나의 비즈니스 프로세스 당 하나의 그레인을 정의한다. 물리적으로 가능한 선에서 최대한 자세하게 정의하는것이 좋다.
사용자 가입 및 탈퇴
계좌 개설
속성 | 도메인 | 타입 |
고객번호 | 고객 | str |
비밀번호 | 고객 | str |
고객상태 | 고객 | code |
고객유형 | 고객 | code |
이메일 | 고객 | str |
전화번호 | 고객 | str |
성별 | 고객 | code |
나이 | 고객 | num |
생일 | 고객 | date |
수입 | 고객 | num |
투자성향 | 고객 | code |
데이터생성일시 | 고객 | timestamp |
데이터변경일시 | 고객 | timestamp |
예수금 입금 및 출금
속성 | 도메인 | 타입 |
고객번호 | 고객 | str |
비밀번호 | 고객 | str |
고객상태 | 고객 | code |
고객유형 | 고객 | code |
이메일 | 고객 | str |
전화번호 | 고객 | str |
성별 | 고객 | code |
나이 | 고객 | num |
생일 | 고객 | date |
수입 | 고객 | num |
투자성향 | 고객 | code |
데이터생성일시 | 고객 | timestamp |
데이터변경일시 | 고객 | timestamp |
계좌번호 | 계좌 | str |
계좌상태 | 계좌 | code |
계좌유형 | 계좌 | code |
계좌명 | 계좌 | str |
계좌비밀번호 | 계좌 | str |
개설일자 | 계좌 | date |
해지일자 | 계좌 | date |
출금가능금액 | 계좌 | num |
예수금 | 계좌 | num |
데이터생성일시 | 계좌 | timestamp |
데이터변경일시 | 계좌 | timestamp |
종목티커 | 보유 | str |
보유개수 | 보유 | num |
총매수가격 | 보유 | num |
데이터생성일시 | 보유 | timestamp |
데이터변경일시 | 보유 | timestamp |
입출금 구분 | 입출금 | code |
금액 | 입출금 | num |
체결 시 체결 결과 전달
속성 | 도메인 | 타입 |
고객번호 | 고객 | str |
비밀번호 | 고객 | str |
고객상태 | 고객 | code |
고객유형 | 고객 | code |
이메일 | 고객 | str |
전화번호 | 고객 | str |
성별 | 고객 | code |
나이 | 고객 | num |
생일 | 고객 | date |
수입 | 고객 | num |
투자성향 | 고객 | code |
데이터생성일시 | 고객 | timestamp |
데이터변경일시 | 고객 | timestamp |
계좌번호 | 계좌 | str |
계좌상태 | 계좌 | code |
계좌유형 | 계좌 | code |
계좌명 | 계좌 | str |
계좌비밀번호 | 계좌 | str |
개설일자 | 계좌 | date |
해지일자 | 계좌 | date |
출금가능금액 | 계좌 | num |
예수금 | 계좌 | num |
데이터생성일시 | 계좌 | timestamp |
데이터변경일시 | 계좌 | timestamp |
종목티커 | 보유 | str |
보유개수 | 보유 | num |
총매수가격 | 보유 | num |
데이터생성일시 | 보유 | timestamp |
데이터변경일시 | 보유 | timestamp |
종목티커 | 종목 | str |
거래소코드 | 종목 | str |
종목상태 | 종목 | code |
종목명 | 종목 | str |
종목설명 | 종목 | str |
종목섹터 | 종목 | code |
상장일자 | 종목 | date |
데이터생성일시 | 종목 | timestamp |
데이터변경일시 | 종목 | timestamp |
분기 | 재무 | str |
수익 | 재무 | num |
운영비 | 재무 | num |
순이익 | 재무 | num |
순이익률 | 재무 | num |
EBITDA | 재무 | num |
데이터생성일시 | 재무 | timestamp |
데이터변경일시 | 재무 | timestamp |
전일종가 | 현황 | num |
시가 | 현황 | num |
고가 | 현황 | num |
저가 | 현황 | num |
거래량 | 현황 | num |
데이터생성일시 | 현황 | timestamp |
데이터변경일시 | 현황 | timestamp |
주문일련번호 | 주문 | str |
주문일자 | 주문 | date |
매도매수구분 | 주문 | code |
체결일련번호 | 체결 | str |
체결일자 | 체결 | date |
구매계좌 | 체결 | str |
판매계좌 | 체결 | str |
체결수량 | 체결 | num |
체결금액 | 체결 | num |
수수료 | 체결 | num |
데이터생성일시 | 체결 | timestamp |
데이터변경일시 | 체결 | timestamp |
속성 | 도메인 | 타입 |
고객번호 | 고객 | str |
비밀번호 | 고객 | str |
고객상태 | 고객 | code |
고객유형 | 고객 | code |
이메일 | 고객 | str |
전화번호 | 고객 | str |
성별 | 고객 | code |
나이 | 고객 | num |
생일 | 고객 | date |
수입 | 고객 | num |
투자성향 | 고객 | code |
데이터생성일시 | 고객 | timestamp |
데이터변경일시 | 고객 | timestamp |
계좌번호 | 계좌 | str |
계좌상태 | 계좌 | code |
계좌유형 | 계좌 | code |
계좌명 | 계좌 | str |
계좌비밀번호 | 계좌 | str |
개설일자 | 계좌 | date |
해지일자 | 계좌 | date |
데이터생성일시 | 계좌 | timestamp |
데이터변경일시 | 계좌 | timestamp |
주식 주문
속성 | 도메인 | 타입 |
고객번호 | 고객 | str |
비밀번호 | 고객 | str |
고객상태 | 고객 | code |
고객유형 | 고객 | code |
이메일 | 고객 | str |
전화번호 | 고객 | str |
성별 | 고객 | code |
나이 | 고객 | num |
생일 | 고객 | date |
수입 | 고객 | num |
투자성향 | 고객 | code |
데이터생성일시 | 고객 | timestamp |
데이터변경일시 | 고객 | timestamp |
계좌번호 | 계좌 | str |
계좌상태 | 계좌 | code |
계좌유형 | 계좌 | code |
계좌명 | 계좌 | str |
계좌비밀번호 | 계좌 | str |
개설일자 | 계좌 | date |
해지일자 | 계좌 | date |
출금가능금액 | 계좌 | num |
예수금 | 계좌 | num |
데이터생성일시 | 계좌 | timestamp |
데이터변경일시 | 계좌 | timestamp |
종목티커 | 보유 | str |
보유개수 | 보유 | num |
총매수가격 | 보유 | num |
데이터생성일시 | 보유 | timestamp |
데이터변경일시 | 보유 | timestamp |
종목티커 | 종목 | str |
거래소코드 | 종목 | str |
종목상태 | 종목 | code |
종목명 | 종목 | str |
종목설명 | 종목 | str |
종목섹터 | 종목 | code |
상장일자 | 종목 | date |
데이터생성일시 | 종목 | timestamp |
데이터변경일시 | 종목 | timestamp |
분기 | 재무 | str |
수익 | 재무 | num |
운영비 | 재무 | num |
순이익 | 재무 | num |
순이익률 | 재무 | num |
EBITDA | 재무 | num |
데이터생성일시 | 재무 | timestamp |
데이터변경일시 | 재무 | timestamp |
전일종가 | 현황 | num |
시가 | 현황 | num |
고가 | 현황 | num |
저가 | 현황 | num |
거래량 | 현황 | num |
데이터생성일시 | 현황 | timestamp |
데이터변경일시 | 현황 | timestamp |
주문일련번호 | 주문 | str |
주문일자 | 주문 | date |
주문상태 | 주문 | code |
매도매수구분 | 주문 | code |
주문수량 | 주문 | num |
주문가격 | 주문 | num |
데이터생성일시 | 주문 | timestamp |
데이터변경일시 | 주문 | timestamp |
c) 차원 테이블 식별
여러개의 팩트 테이블을 가지는 차원 모델에서 통일된 차원 테이블의 식별은 좋은 선택이다. 차원 테이블을 하나씩 정의해 나가면서 전사적으로 통일된 버스 아키텍쳐를 그려본다.
1. 날짜 차원
시계열로 생성되는 비즈니스 측정지표를 나타내는 차원 모델은 날짜 차원이 필수적이다.
속성 | 타입 | 역할 |
날짜 키 | num | PK |
날짜 | str | |
날짜 상세 | str | |
요일 | str | |
일 | str | |
일 수 | num | |
주차 | str | |
월 | str | |
월 수 | num | |
월 이름 | str | |
년도 | num | |
분기 | str | |
분기 수 | num | |
월말일 구분 | str | |
공휴일 구분 | str | |
주말 구분 | str | |
Date 포맷 | date |
공휴일과 주말의 분류 값을 평일/공휴일, 평일/주말의 자연어 형태로 테이블에 저장하도록 하였다.
BI 애플리케이션에서 플래그 값을 디코딩 하는것 보다 데이터 베이스 자체에 자연스러운 분류 값을 두는것이 차원 모델링의 목적에 더욱 부합한다.
영업사원부터 DBA까지 DW를 사용하는 모든 부서와 사용자들이 데이터를 사용할 때 일치성을 보장받을 수 있기 때문이다.
버스 아키텍쳐 - 날짜 차원
날짜 차원 | |
사용자 가입 | 가입 날짜 |
계좌 개설/해지 | 개설/해지 날짜 |
예수금 입출금 | 입/출금 날짜 |
주식 주문 | 주문 날짜 |
체결 및 결과 전달 | 체결 날짜 |
2. 사용자 차원
사용자 차원은 CRM 측면에서 매우 중요한 차원이다. 고객의 첫 구매, 누적 구매한 금액, 주문 빈도 등 다양한 분석 요구사항에 따라 그 컬럼이 수백개가 될 수도 있다. 아웃리거 차원과 메저를 적절하게 사용한다면 분석 부하를 방지하고 사용자 친화적인 차원 모델을 설계할 수 있다.
사용자 차원이 커버하는 분석 시나리오는 다음과 같은 시나리오 등이 있다.
•
사용자 나이 별 투자 성향
•
사용자 성별 별 수입 분포
•
…
속성 | 타입 | 역할 |
고객 키 | num | PK |
고객번호 | str | NK |
고객상태 | code | |
고객유형 | code | |
이메일 | str | |
전화번호 | str | |
성별 | code | |
나이 | code | |
생일 | date | |
수입 | code | |
투자성향 | code | |
데이터유효일시 | timestamp | SCD2 |
데이터만기일시 | timestamp | SCD2 |
데이터유효성 | boolean | SCD2 |
비밀번호와 같은 민감성 데이터는 차원 테이블에서 삭제하였다.
SCD Type 2를 적용하여 변경 이력을 관리하였다.
데이터유효일시는 고객이 최초로 서비스에 등록한 시간으로, SQL 쿼리 시 BETWEEN 쿼리 좌변의 기준 일자로 활용된다.
데이터만기일시는 스냅샷 기록 시의 데이터최종변경일시 값을 사용한다.
데이터유효성은 해당 사용자의 최신의 데이터가 삽입되면(ETL 작업에서, 과거 스냅샷의 데이터유효일시가 최신 스냅샷의 데이터유효일시보다 과거라면) 이전에 삽입된 행의 데이터유효성 값이 false로 갱신된다.
버스 아키텍쳐 - 사용자 차원
날짜 차원 | 사용자 차원 | |
사용자 가입 | 가입 날짜 | 가입한 사용자 |
계좌 개설/해지 | 개설/해지 날짜 | 계좌 주 |
예수금 입출금 | 입/출금 날짜 | 계좌 주 |
주식 주문 | 주문 날짜 | 주문자 |
체결 및 결과 전달 | 체결 날짜 | 주문자 |
3. 계좌 차원
계좌 차원에서는 보유 종목이 1:N 관계로 계좌 차원과 연결되어있다. 이 관계를 브릿징을 통해 나타내어본다.
계좌가 보유한 종목의 포트폴리오를 분석할 때 브리지 테이블이 도움될 수 있다. 하지만 복잡한 분석쿼리와 ETL의 난이도를 고려한다면 그다지 좋은 선택이 아닐 수 있다.
예컨데 보유하고있는 종목들 중 가장 많은 금액을 가진 종목의 산업 섹터를 선택하거나, 특정 섹터의 종목 보유율 구간 분석을 진행한다면 데이터의 카디널리티를 낮추고 희소성(sparsity)을 높일 수 있다.이렇게 한다면 하나의 아웃리거 차원이나 미니 차원 테이블을 통해 유의미한 분석을 진행할 수 있을것이다.
계좌 차원이 커버하는 분석 시나리오는 다음과 같은 시나리오 등이 있다.
•
계좌 잔액에 따른 보유 섹터 경향
•
사용자 유형에 따른 보유 종목 포트폴리오 분석
•
…
속성 | 타입 | 유형 |
계좌 키 | num | PK |
계좌번호 | str | NK |
계좌상태 | code | |
계좌유형 | code | |
계좌명 | str | |
개설일자 | date | |
해지일자 | date | |
출금가능금액 | num | |
예수금 | num | |
데이터유효일시 | timestamp | SCD2 |
데이터만기일시 | timestamp | SCD2 |
데이터유효성 | boolean | SCD2 |
계좌 브리지
속성 | 타입 | 유형 |
계좌 키 | num | FK |
보유종목 키 | num | FK |
데이터유효일시 | timestamp | SCD2 |
데이터만기일시 | timestamp | SCD2 |
데이터유효성 | boolean | SCD2 |
보유 종목 차원
속성 | 타입 | 유형 |
보유종목 키 | num | PK |
종목티커 | str | |
보유개수 | num | |
총매수가격 | num | |
데이터유효일시 | timestamp | SCD2 |
데이터만기일시 | timestamp | SCD2 |
데이터유효성 | boolean | SCD2 |
버스 아키텍쳐 - 계좌 차원
날짜 차원 | 사용자 차원 | 계좌 차원 | |
사용자 가입 | 가입 날짜 | 가입한 사용자 | X |
계좌 개설/해지 | 개설/해지 날짜 | 계좌 주 | 계좌 정보 |
예수금 입출금 | 입/출금 날짜 | 계좌 주 | 계좌 정보, 보유 종목 |
주식 주문 | 주문 날짜 | 주문자 | 주문 계좌, 보유 종목 |
체결 및 결과 전달 | 체결 날짜 | 주문자 | 주문 계좌, 보유 종목 |
4. 종목 차원
종목 데이터는 재무와 현황, 두 갈래의 계층구조로 이루어져있다. 분기마다 갱신되는 재무 데이터는 SCD Type 3을 적용하여 1, 2, 3, 4분기, 1년, 2년, 3년 전의 재무 속성 값을 종목 데이터가 가지도록 하였다. 매일마다 갱신되는 현황 데이터는 다른 차원으로 따로 빼내어 SCD Type 2를 적용하였다.
현황 데이터가 데이터 분석에 큰 의미가 없다고 판단한다면 DW가 아닌 DL에 스냅샷을 적재해도 될 것 같다.
종목 차원이 커버하는 분석 시나리오는 다음과 같은 시나리오 등이 있다.
•
종목 주문 시 사용자 투자 성향에 따른 재무 특징
•
계좌 잔액에 따른 우상향/우하향 종목 주문 경향
•
…
속성 | 타입 | 유형 |
종목 키 | num | PK |
종목티커 | str | NK |
거래소코드 | str | |
종목상태 | code | |
종목명 | str | |
종목설명 | str | |
종목섹터 | code | |
상장일자 | date | |
1Q 전 수익 | num | SCD3 |
1Q 전 운영비 | num | SCD3 |
… | … | … |
2Q 전 수익 | num | SCD3 |
2Q 전 운영비 | num | SCD3 |
… | … | … |
3Y 전 EBITDA | num | SCD3 |
종목 현황 차원
속성 | 타입 | 유형 |
종목 현황 키 | num | PK |
종목티커 | str | NK |
전일종가 | num | |
시가 | num | |
고가 | num | |
저가 | num | |
거래량 | num | |
데이터유효일시 | timestamp | SCD2 |
데이터만기일시 | timestamp | SCD2 |
데이터유효성 | boolean | SCD2 |
버스 아키텍쳐 - 종목 차원
날짜 차원 | 사용자 차원 | 계좌 차원 | 종목 차원 | 종목 현황 차원 | |
사용자 가입 | 가입 날짜 | 가입한 사용자 | X | X | X |
계좌 개설/해지 | 개설/해지 날짜 | 계좌 주 | 계좌 정보 | X | X |
예수금 입출금 | 입/출금 날짜 | 계좌 주 | 계좌 정보, 보유 종목 | X | X |
주식 주문 | 주문 날짜 | 주문자 | 주문 계좌, 보유 종목 | 주문 종목 | 주문 종목 현황 |
체결 및 결과 전달 | 체결 날짜 | 주문자 | 주문 계좌, 보유 종목 | 주문 종목 | X |
d) 팩트 테이블 식별
1. 사용자 가입
그레인에서 차원 테이블에 속한 속성을 제하면 다음이 남는다.
속성 |
데이터생성일시 |
데이터변경일시 |
팩트 테이블
데이터생성일시를 날짜 차원으로 이관하고 필요하지 않은 데이터변경일시를 제한 팩트 테이블은 다음과 같다.
속성 | 타입 | 역할 | 차원 | 비고 |
가입일자 키 | num | FK | 날짜 | |
사용자 키 | num | FK | 사용자 |
2. 계좌 개설
그레인에서 차원 테이블에 속한 속성을 제하면 다음이 남는다.
속성 |
데이터생성일시 |
데이터변경일시 |
팩트 테이블
속성 | 타입 | 역할 | 차원 | 비고 |
개설일자 키 | num | FK | 날짜 | |
사용자 키 | num | FK | 사용자 | |
계좌 키 | num | FK | 계좌 |
3. 예수금 입출금
그레인에서 차원 테이블에 속한 속성을 제하면 다음이 남는다.
속성 |
입출금 구분 |
금액 |
데이터생성일시 |
데이터변경일시 |
팩트 테이블
속성 | 타입 | 역할 | 차원 | 비고 |
입출금일자 키 | num | FK | 날짜 | |
사용자 키 | num | FK | 사용자 | |
계좌 키 | num | FK | 계좌, 보유종목 | |
입출금 구분 | num | |||
금액 | num | measure |
4. 주식 주문
그레인에서 차원 테이블에 속한 속성을 제하면 다음이 남는다.
속성 | 도메인 | 타입 |
주문일련번호 | 주문 | str |
주문일자 | 주문 | date |
주문상태 | 주문 | code |
매도매수구분 | 주문 | code |
주문수량 | 주문 | num |
주문가격 | 주문 | num |
데이터생성일시 | 주문 | timestamp |
데이터변경일시 | 주문 | timestamp |
팩트 테이블
속성 | 타입 | 역할 | 차원 | 비고 |
주문일자 키 | num | FK | 날짜 | |
주문자 키 | num | FK | 사용자 | |
주문계좌 키 | num | FK | 계좌, 보유종목 | |
주문종목 키 | num | FK | 종목 | |
종목현황 키 | num | FK | 종목 현황 | |
주문일련번호 | str | NK | 퇴화차원 | |
주문상태 | code | |||
매도매수구분 | code | |||
주문수량 | num | measure | ||
주문가격 | num | measure |
5. 체결 및 결과 전달
그레인에서 차원 테이블에 속한 속성을 제하면 다음이 남는다.
속성 | 도메인 | 타입 |
주문일련번호 | 주문 | str |
주문일자 | 주문 | date |
주문상태 | 주문 | code |
매도매수구분 | 주문 | code |
주문수량 | 주문 | num |
주문가격 | 주문 | num |
체결일련번호 | 체결 | str |
체결일자 | 체결 | date |
구매계좌 | 체결 | str |
판매계좌 | 체결 | str |
체결수량 | 체결 | num |
체결금액 | 체결 | num |
수수료 | 체결 | num |
데이터생성일시 | 체결 | timestamp |
데이터변경일시 | 체결 | timestamp |
팩트 테이블
체결 일자와 주문 일자는 거의 같지만, 장외 거래와 같이 아닌 경우도 고려하기 위해 두개의 차원 뷰를 롤플레잉 차원으로 설계하였다.
ETL을 통해 구매계좌와 판매계좌를 식별할 수 있으므로 이 또한 롤플레잉 차원으로 설계하였다.
속성 | 타입 | 역할 | 차원 | 비고 |
체결일자 키 | num | FK | 체결날짜 | 롤플레잉 |
주문일자 | num | FK | 주문날짜 | 롤플레잉 |
주문자 키 | num | FK | 사용자 | |
주문계좌 키 | num | FK | 주문계좌, 보유종목 | 롤플레잉 |
상대계좌 | num | FK | 상대계좌 | 롤플레잉 |
주문종목 키 | num | FK | 종목 | |
주문일련번호 | str | NK | 퇴화차원 | |
체결일련번호 | str | NK | 퇴화차원 | |
매도매수구분 | code | |||
체결수량 | num | measure | ||
체결금액 | num | measure | ||
수수료 | num | measure |