Payment Service 에 필요한 데이터를 설계해보자.
이전에 간략하게 다뤘던 데이터들은 크게 Payment Event 와 Payment Order 이 있다.
이외에도 결제 승인에 문제가 발생했을 때 해결하기 위한 Audit Log 와 같은 데이터가 필요해보인다. 결제 주문의 상태를 추적할 수 있도록 하는 Payment Order History 라는 데이터도 만들자.
| name | type | description |
|---|---|---|
| id | PK, BIG INT, AUTO INCREMENT | 결제 이벤트 고유 식별자 |
| buyer_id | BIG INT | 구매자 식별자 |
| is_payment_done | BOOLEAN | 결제가 완료되었는지 여부 |
| payment_key | VARCHAR, UNIQUE | PSP 애서 생성한 결제 식별자 |
| order_id | VARCHAR, UNIQUE | 결제를 구분해주는 주문 식별자 |
| type | ENUM | 결제 유형. (e.g 일반 결제, 자동 결제 등) |
| order_name | VARCHAR | 결제 주문 이름 |
| method | ENUM | 결제 방법 (e.g 카드 결제, 간편 결제, 휴대폰 등) |
| psp_raw_data | JSON | PSP 로 부터 받은 원시 데이터 |
| created_at | DATETIME | 생성된 시각 |
| updated_at | DATETIME | 업데이트 된 시각 |
| approved_at | DATETIME | 결제 승인된 시각 |
| name | type | description |
|---|---|---|
| id | PK, BIG INT, AUTO INCREMENT | 결제 주문 고유 식별자 |
| payment_event_id | FK, BIG INT | Payment Event 를 참조하는 식별자 |
| seller_id | BIG INT | 판매자 식별자 |
| product_id | BIG INT | 제품 식별자 |
| order_id | VARCHAR | 결제를 구분해주는 주문 식별자 |
| amount | DECIMAL | 결제 금액 |
| payment_order_status | ENUM | 결제 주문 상태 (e.g NOT_STARTED, EXECUTING, SUCCESS 등) |
| ledger_updated | BOOLEAN | 장부 업데이트 여부 |
| wallet_updated | BOOLEAN | 지갑 업데이트 여부 |
| failed_count | TINYINT | 결제 실패 카운트 |
| threshold | TINYINT | 결제 실패 허용 임계값 |
| created_at | DATETIME | 생성된 시각 |
| updated_at | DATETIME | 업데이트 된 시각 |
| name | type | description |
|---|---|---|
| id | PK, BIG INT, AUTO INCREMENT | 결제 주문 변경 이력 고유 식별자 |
| payment_order_id | FK, BIG INT | Payment Order 를 참조하는 식별자 |
| previous_status | ENUM | 변경 전 결제 상태 |
| new_status | ENUM | 변경 후 결제 상태 |
| created_at | DATETIME | 생성된 시각 |
| changed_by | VARCHAR | 변경을 수행한 사용자 또는 시스템 식별자 |
| reason | VARCHAR | 상태 변경의 이유 |