Skip to content

NextMarket 데이터베이스 스키마 설계서

Database: MySQL 8.x Character Set: utf8mb4 Collation: utf8mb4_unicode_ci 설계 원칙: StepPay API 응답 구조 기반, 자체 IDX 키 체계 사용 관련 문서: Stored Procedures 가이드 소스 위치: nextmarket-db/ (domain.json 템플릿 변수 방식)


1. ERD 개요

┌─────────────────┐     ┌─────────────────┐
│   NMT_USERS     │────<│  NMT_SHIPPING   │
└─────────────────┘     └─────────────────┘



┌─────────────────┐     ┌─────────────────────┐     ┌─────────────────┐
│   NMT_ORDERS    │────<│  NMT_ORDER_ITEMS    │────>│  NMT_PRODUCTS   │
└─────────────────┘     └─────────────────────┘     └─────────────────┘
        │                                                   │
        │                                                   │
        ▼                                                   ▼
┌─────────────────────┐                            ┌─────────────────┐
│ NMT_SUBSCRIPTIONS   │                            │   NMT_PRICES    │
└─────────────────────┘                            └─────────────────┘

# StepPay 매핑 (07.steppay)
STP_USERS, STP_PRODUCTS, STP_PRICES, STP_ORDERS, STP_SUBSCRIPTIONS, STP_PAYMENTS
→ 로컬 NMT_* 테이블의 IDX ↔ StepPay ID/코드 매핑

2. 공통 데이터 타입 (domain.json)

소스 SQL 파일(.raw.sql)에서 ${TYPE_NAME} 형식으로 참조되는 공통 타입:

변수SQL 타입용도
IDXint일반 정수 ID (AUTO_INCREMENT PK)
BIGIDXbigintStepPay API ID (대용량)
NAMEvarchar(50)이름/상호
CODEvarchar(20)코드
LCODEvarchar(100)긴 코드 (StepPay 코드)
TYPEvarchar(30)타입/상태
STRvarchar(200)일반 문자열
DESCtext긴 텍스트 (설명)
AMTnumeric(12,3)금액
EMAILvarchar(200)이메일
MOBILEvarchar(20)휴대폰
PASSWDvarchar(200)비밀번호
TStimestamp타임스탬프
DTvarchar(10)날짜 (%Y%m%d)
TMvarchar(10)시간 (%H%i%S)
BOOLtinyint불린 (0/1)
CNTint카운트/수량
SEQsmallint정렬 순서
KEYvarchar(50)키 필드
URLvarchar(200)URL
ADDRvarchar(100)주소
ZIPvarchar(10)우편번호
IPvarchar(20)IP 주소
YNchar(1)Y/N 여부

3. 설계 규칙

  • 테이블 접두사: 모든 테이블은 NMT_ 접두사 사용, StepPay 매핑은 STP_ 접두사
  • PK 명명: {약칭}_IDX (int AUTO_INCREMENT) - StepPay ID를 PK로 사용하지 않음
  • StepPay ID/코드 분리: STP_* 매핑 테이블에서 별도 관리 (NMT_* 테이블에 STP 컬럼 없음)
  • 소프트 삭제: DEL_YN char(1) DEFAULT 'N' 컬럼으로 삭제 여부 관리
  • 상태/타입 기본값: '그룹키:값' 형식 (예: 'USR_STAT:NORMAL', 'ORD_TYPE:ONETIME')
  • FK 미사용: 파티션 테이블 호환 및 성능을 위해 FOREIGN KEY 제약 없이 INDEX만 사용
  • 인덱스 명명: IDX_{테이블명}_{순번} 형식
  • 복합 인덱스 우선: 자주 함께 조회되는 컬럼은 복합 인덱스로 구성

4. 테이블 정의

4.1 NMT_USERS (고객)

로컬 사용자 정보 (StepPay 매핑은 STP_USERS 참조)

sql
CREATE TABLE NMT_USERS (
    `USR_IDX`                 int AUTO_INCREMENT NOT NULL COMMENT '회원 IDX',
    `USR_ID`                  varchar(200) NOT NULL COMMENT '고객 아이디 (보통 이메일) StepPay:username',
    `USR_NM`                  varchar(50) NULL COMMENT '고객명',
    `USR_EMAIL`               varchar(200) NULL COMMENT '이메일',
    `USR_PHONE`               varchar(20) NULL COMMENT '전화번호',
    `USR_STATUS`              varchar(30) NOT NULL DEFAULT 'USR_STAT:NORMAL' COMMENT '회원상태',
    `ROLE`                    varchar(30) NOT NULL DEFAULT 'USR_ROLE:USER' COMMENT '사용자 권한',
    `MARKETING_SMS`           tinyint DEFAULT FALSE COMMENT 'SMS 마케팅 수신 동의',
    `MARKETING_EMAIL`         tinyint DEFAULT FALSE COMMENT '이메일 마케팅 수신 동의',
    `MARKETING_KAKAO`         tinyint DEFAULT FALSE COMMENT '카카오 마케팅 수신 동의',
    `ATTRIBUTES`              JSON NULL COMMENT '고객 추가 정보 (커스텀 필드)',
    `COUNTRY_CODE`            varchar(20) DEFAULT 'KR' COMMENT '국가코드',
    `CREATE_TS`               timestamp DEFAULT CURRENT_TIMESTAMP COMMENT '등록일시',
    `MODIFY_TS`               timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '수정일시',
    `DORMANT_TS`              timestamp NULL COMMENT '휴면 전환일시',
    `PASSWORD_HASH`           varchar(200) NULL COMMENT '로컬 인증용',
    `LAST_LOGIN_TS`           timestamp NULL COMMENT '최종 로그인일시',
    `DEL_YN`                  char(1) DEFAULT 'N' COMMENT '삭제여부',

    PRIMARY KEY (`USR_IDX`),
    UNIQUE INDEX `IDX_NMT_USERS_01` (`USR_ID`),
    INDEX `IDX_NMT_USERS_02` (`USR_EMAIL`),
    INDEX `IDX_NMT_USERS_03` (`USR_STATUS`),
    INDEX `IDX_NMT_USERS_04` (`CREATE_TS`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='고객';

컬럼 정의:

컬럼명타입NULL기본값설명
USR_IDXintNOAUTO회원 IDX (PK)
USR_IDvarchar(200)NO-고객 아이디 (이메일)
USR_NMvarchar(50)YESNULL고객명
USR_EMAILvarchar(200)YESNULL이메일
USR_PHONEvarchar(20)YESNULL전화번호
USR_STATUSvarchar(30)NO'USR_STAT:NORMAL'회원상태
ROLEvarchar(30)NO'USR_ROLE:USER'사용자 권한
MARKETING_SMStinyintNOFALSESMS 마케팅 동의
MARKETING_EMAILtinyintNOFALSE이메일 마케팅 동의
MARKETING_KAKAOtinyintNOFALSE카카오 마케팅 동의
ATTRIBUTESJSONYESNULL커스텀 필드
COUNTRY_CODEvarchar(20)NO'KR'국가 코드
CREATE_TStimestampNOCURRENT_TIMESTAMP등록일시
MODIFY_TStimestampNOCURRENT_TIMESTAMP수정일시
DORMANT_TStimestampYESNULL휴면 전환일시
PASSWORD_HASHvarchar(200)YESNULL로컬 인증용 비밀번호
LAST_LOGIN_TStimestampYESNULL최종 로그인일시
DEL_YNchar(1)NO'N'삭제여부

4.2 NMT_SHIPPING (배송지)

StepPay Customer.shipping 구조와 동일

sql
CREATE TABLE NMT_SHIPPING (
    `SHP_IDX`             int NOT NULL AUTO_INCREMENT COMMENT '배송지 IDX',
    `USR_IDX`             bigint NOT NULL COMMENT '회원 IDX',
    `SHP_NM`              varchar(50) NULL COMMENT '수령인',
    `SHP_PHONE`           varchar(20) NULL COMMENT '연락처',
    `POSTCODE`            varchar(10) NULL COMMENT '우편번호',
    `ADDR1`               varchar(200) NULL COMMENT '기본 주소',
    `ADDR2`               varchar(200) NULL COMMENT '상세 주소',
    `CITY`                varchar(100) NULL COMMENT '도시',
    `STATE`               varchar(100) NULL COMMENT '시/도',
    `COUNTRY_CODE`        varchar(20) DEFAULT 'KR' COMMENT '국가코드',
    `IS_DEFAULT`          tinyint DEFAULT FALSE COMMENT '기본 배송지 여부',
    `DEL_YN`              char(1) DEFAULT 'N' COMMENT '삭제여부',
    `CREATE_TS`           timestamp DEFAULT CURRENT_TIMESTAMP COMMENT '등록일시',
    `MODIFY_TS`           timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '수정일시',

    PRIMARY KEY (`SHP_IDX`),
    INDEX `IDX_NMT_SHIPPING_01` (`USR_IDX`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='배송지';

컬럼 정의:

컬럼명타입NULL기본값설명
SHP_IDXintNOAUTO배송지 IDX (PK)
USR_IDXbigintNO-회원 IDX
SHP_NMvarchar(50)YESNULL수령인
SHP_PHONEvarchar(20)YESNULL연락처
POSTCODEvarchar(10)YESNULL우편번호
ADDR1varchar(200)YESNULL기본 주소
ADDR2varchar(200)YESNULL상세 주소
CITYvarchar(100)YESNULL도시
STATEvarchar(100)YESNULL시/도
COUNTRY_CODEvarchar(20)NO'KR'국가 코드
IS_DEFAULTtinyintNOFALSE기본 배송지 여부
DEL_YNchar(1)NO'N'삭제여부
CREATE_TStimestampNOCURRENT_TIMESTAMP등록일시
MODIFY_TStimestampNOCURRENT_TIMESTAMP수정일시

4.3 NMT_PRODUCTS (상품)

로컬 상품 정보 (StepPay 매핑은 STP_PRODUCTS 참조) TYPE: BOX, SOFTWARE, BUNDLE, INVOICE, DRAFT STATUS: SALE, OUT_OF_STOCK, UNSOLD, WAITING_APPROVAL, REJECTED

sql
CREATE TABLE NMT_PRODUCTS (
    `PRD_IDX`                 int AUTO_INCREMENT NOT NULL COMMENT '상품 IDX',
    `TYPE`                    varchar(30) NOT NULL DEFAULT 'PRD_TYPE:SOFTWARE' COMMENT '상품유형',
    `STATUS`                  varchar(30) NOT NULL DEFAULT 'PRD_STATUS:SALE' COMMENT '상품상태',
    `PRD_NM`                  varchar(200) NOT NULL COMMENT '상품명',
    `SUB_TITLE`               varchar(200) NULL COMMENT '부제목',
    `PRD_DESCRIPTION`         text NULL COMMENT '상품 설명',
    `SUMMARY`                 text NULL COMMENT '상품 요약',
    `SKU`                     varchar(50) NULL COMMENT 'SKU 코드',
    `NOTICE`                  text NULL COMMENT '유의사항',
    `FEATURED_IMAGE_URL`      varchar(200) NULL COMMENT '대표 이미지',
    `IMAGE_URLS`              JSON NULL COMMENT '이미지 URL 배열',
    `QUANTITY`                int NULL COMMENT '재고 : null이면 무제한',
    `ENABLED_DEMO`            tinyint DEFAULT FALSE COMMENT '체험판 활성화 여부',
    `DEMO_PERIOD`             int NULL COMMENT '체험 기간',
    `DEMO_PERIOD_UNIT`        varchar(30) NULL COMMENT '체험 기간 단위',
    `USE_COMBINATION`         tinyint DEFAULT FALSE COMMENT '조합형 옵션 사용',
    `OPTION_GROUPS`           JSON NULL COMMENT '옵션 그룹 배열',
    `OPTION_COMBINATIONS`     JSON NULL COMMENT '옵션 조합 배열',
    `COMBINED_PRODUCTS`       JSON NULL COMMENT '번들 구성 상품',
    `CATEGORIES`              JSON NULL COMMENT '카테고리 배열',
    `IS_ONETIME_PURCHASABLE`  tinyint NULL COMMENT '활성 구독 제한',
    `PRODUCT_ORDER`           smallint DEFAULT 0 COMMENT '정렬 순서',
    `EVENT_BADGE`             JSON NULL COMMENT '이벤트 뱃지',
    `USE_WIDGET`              JSON NULL COMMENT '위젯 사용 설정',
    `COUNTRY_SETTING`         JSON NULL COMMENT '국가 설정',
    `AVAILABLE_REGIONS`       JSON NULL COMMENT '판매 가능 지역',
    `VENDOR_UUID`             varchar(50) NULL COMMENT '가맹점 UUID',
    `GROUP_ID`                bigint NULL COMMENT '그룹 ID',
    `REASON_OF_REJECT`        text NULL COMMENT '승인 거절 사유',
    `DEL_YN`                  char(1) DEFAULT 'N' COMMENT '삭제여부',
    `CREATE_TS`               timestamp DEFAULT CURRENT_TIMESTAMP COMMENT '등록일시',
    `MODIFY_TS`               timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '수정일시',

    PRIMARY KEY (`PRD_IDX`),
    INDEX `IDX_NMT_PRODUCTS_01` (`STATUS` ASC, `TYPE` ASC, `PRODUCT_ORDER` ASC, `CREATE_TS` DESC),
    INDEX `IDX_NMT_PRODUCTS_02` (`CREATE_TS` DESC),
    FULLTEXT INDEX `IDX_NMT_PRODUCTS_FT` (`PRD_NM`, `PRD_DESCRIPTION`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='상품';

컬럼 정의:

컬럼명타입NULL기본값설명
PRD_IDXintNOAUTO상품 IDX (PK)
TYPEvarchar(30)NO'PRD_TYPE:SOFTWARE'상품 유형
STATUSvarchar(30)NO'PRD_STATUS:SALE'판매 상태
PRD_NMvarchar(200)NO-상품명
SUB_TITLEvarchar(200)YESNULL부제목
PRD_DESCRIPTIONtextYESNULL상품 설명
SUMMARYtextYESNULL요약
SKUvarchar(50)YESNULLSKU 코드
NOTICEtextYESNULL유의사항
FEATURED_IMAGE_URLvarchar(200)YESNULL대표 이미지
IMAGE_URLSJSONYESNULL이미지 URL 배열
QUANTITYintYESNULL재고 (null=무제한)
ENABLED_DEMOtinyintNOFALSE체험판 활성화
DEMO_PERIODintYESNULL체험 기간
DEMO_PERIOD_UNITvarchar(30)YESNULL체험 기간 단위
USE_COMBINATIONtinyintNOFALSE조합형 옵션 사용
OPTION_GROUPSJSONYESNULL옵션 그룹
OPTION_COMBINATIONSJSONYESNULL옵션 조합
COMBINED_PRODUCTSJSONYESNULL번들 구성 상품
CATEGORIESJSONYESNULL카테고리
IS_ONETIME_PURCHASABLEtinyintYESNULL활성 구독 제한
PRODUCT_ORDERsmallintNO0정렬 순서
EVENT_BADGEJSONYESNULL이벤트 뱃지
USE_WIDGETJSONYESNULL위젯 설정
COUNTRY_SETTINGJSONYESNULL국가 설정
AVAILABLE_REGIONSJSONYESNULL가용 지역
VENDOR_UUIDvarchar(50)YESNULL가맹점 UUID
GROUP_IDbigintYESNULL그룹 ID
REASON_OF_REJECTtextYESNULL승인 거절 사유
DEL_YNchar(1)NO'N'삭제여부
CREATE_TStimestampNOCURRENT_TIMESTAMP등록일시
MODIFY_TStimestampNOCURRENT_TIMESTAMP수정일시

4.4 NMT_PRICES (가격 플랜)

로컬 가격플랜 정보 (StepPay 매핑은 STP_PRICES 참조) TYPE: ONE_TIME, FLAT, RECURRING

sql
CREATE TABLE NMT_PRICES (
    `PRC_IDX`                       int AUTO_INCREMENT NOT NULL COMMENT '가격플랜 IDX',
    `PRD_IDX`                       int NOT NULL COMMENT '상품 IDX (FK)',
    `TYPE`                          varchar(30) NOT NULL DEFAULT 'PRC_TYPE:FLAT' COMMENT '가격유형',
    `PRICE`                         numeric(12,3) NOT NULL COMMENT '가격',
    `CURRENCY_PRICE`                JSON NULL COMMENT '통화별 가격 {"KRW": 30000}',
    `UNIT`                          varchar(30) NULL COMMENT '단위 (건, 개 등)',
    `PRC_NM`                        varchar(200) NULL COMMENT '플랜명',
    `PRC_DESCRIPTION`               text NULL COMMENT '플랜 설명',
    `IS_HIDDEN_FROM_SHOP`           tinyint DEFAULT FALSE COMMENT '상점 비공개 여부',
    `FIRST_SALE`                    JSON NULL COMMENT '첫 구매 할인 정보 {enabled, price, currencyPrice}',
    `CLAIM`                         JSON NULL COMMENT '청구방식 {methodType, whenToClaimType, billingDate}',
    `RECURRING`                     JSON NULL COMMENT '{id, intervalCount, interval}',
    `SETUP_OPTION`                  JSON NULL COMMENT '기본료 설정',
    `MAXIMUM_PURCHASE_QUANTITY`     int DEFAULT 0 COMMENT '최대 구매 수량',
    `EXPIRY_RECURRING_COUNT`        int NULL COMMENT '구독 만료 결제 횟수',
    `SORT_ORDER`                    smallint DEFAULT 0 COMMENT '정렬 순서',
    `DEL_YN`                        char(1) DEFAULT 'N' COMMENT '삭제여부',
    `CREATE_TS`                     timestamp DEFAULT CURRENT_TIMESTAMP COMMENT '등록일시',
    `MODIFY_TS`                     timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '수정일시',

    PRIMARY KEY (`PRC_IDX`),
    INDEX `IDX_NMT_PRICES_01` (`PRD_IDX` ASC, `SORT_ORDER` ASC)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='가격 플랜';

컬럼 정의:

컬럼명타입NULL기본값설명
PRC_IDXintNOAUTO가격플랜 IDX (PK)
PRD_IDXintNO-상품 IDX (FK)
TYPEvarchar(30)NO'PRC_TYPE:FLAT'가격 유형
PRICEnumeric(12,3)NO-가격
CURRENCY_PRICEJSONYESNULL통화별 가격
UNITvarchar(30)YESNULL단위
PRC_NMvarchar(200)YESNULL플랜명
PRC_DESCRIPTIONtextYESNULL플랜 설명
IS_HIDDEN_FROM_SHOPtinyintNOFALSE상점 비공개
FIRST_SALEJSONYESNULL첫 구매 할인
CLAIMJSONYESNULL청구 설정
RECURRINGJSONYESNULL구독 주기
SETUP_OPTIONJSONYESNULL기본료
MAXIMUM_PURCHASE_QUANTITYintNO0최대 구매 수량
EXPIRY_RECURRING_COUNTintYESNULL구독 만료 횟수
SORT_ORDERsmallintNO0정렬 순서
DEL_YNchar(1)NO'N'삭제여부
CREATE_TStimestampNOCURRENT_TIMESTAMP등록일시
MODIFY_TStimestampNOCURRENT_TIMESTAMP수정일시

4.5 NMT_ORDERS (주문)

로컬 주문 정보 (StepPay 매핑은 STP_ORDERS 참조) TYPE: ONETIME, RECURRING_INITIAL, RECURRING 등 UNIX 타임스탬프 기반 연도별 RANGE 파티션 적용

sql
CREATE TABLE IF NOT EXISTS `NMT_ORDERS` (
  `ORD_IDX`               int NOT NULL AUTO_INCREMENT COMMENT '주문 일련번호',
  `UNIX_ORD_DT`           int NOT NULL DEFAULT 0 COMMENT '주문일자(UNIX TIME)',
  `ORD_DT`                varchar(10) NOT NULL COMMENT '주문(영업)일자[%Y%m%d]',
  `ORD_TM`                varchar(10) NOT NULL COMMENT '주문(영업)시간[%H%i%S]',
  `USR_IDX`               int NULL COMMENT '회원 IDX (FK)',
  `USR_NM`                varchar(50) NULL COMMENT '고객명',
  `ORD_TYPE`              varchar(30) NOT NULL DEFAULT 'ORD_TYPE:ONETIME' COMMENT '주문유형',
  `PRODUCT_NAME`          varchar(200) NULL COMMENT '대표 상품명',
  `PRICE`                 numeric(12,3) NULL COMMENT '주문 금액',
  `PAID_AMOUNT`           numeric(12,3) NULL COMMENT '실제 결제 금액',
  `CURRENCY`              varchar(20) DEFAULT 'CURRENCY:KRW' COMMENT '통화 코드',
  `PAYMENT_METHOD`        varchar(50) NULL COMMENT '결제 수단',
  `PAYMENT_DATE`          timestamp NULL COMMENT '결제일시',
  `SHIPPING`              JSON NULL COMMENT '배송지 정보',
  `DEL_YN`                char(1) DEFAULT 'N' COMMENT '삭제여부',
  `CREATE_TS`             timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '등록일시',
  `MODIFY_TS`             timestamp COMMENT '최근 수정일시',
  PRIMARY KEY (`ORD_IDX` ASC, `UNIX_ORD_DT` ASC) USING BTREE,
  INDEX `IDX_NMT_ORDERS_01` (`USR_IDX` ASC, `ORD_TYPE` ASC, `CREATE_TS` DESC) USING BTREE,
  INDEX `IDX_NMT_ORDERS_02` (`PAYMENT_DATE` DESC) USING BTREE,
  INDEX `IDX_NMT_ORDERS_03` (`ORD_TYPE` ASC) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=1 COMMENT='주문'
 PARTITION BY RANGE (`UNIX_ORD_DT`) (
 PARTITION `P_NMT_ORDERS_001` VALUES LESS THAN (1798729200) ENGINE = InnoDB,
 PARTITION `P_NMT_ORDERS_002` VALUES LESS THAN (1830265200) ENGINE = InnoDB,
 PARTITION `P_NMT_ORDERS_003` VALUES LESS THAN (1861887600) ENGINE = InnoDB,
 PARTITION `P_NMT_ORDERS_004` VALUES LESS THAN (1893423600) ENGINE = InnoDB,
 PARTITION `P_NMT_ORDERS_005` VALUES LESS THAN (1924959600) ENGINE = InnoDB,
 PARTITION `P_NMT_ORDERS_006` VALUES LESS THAN (1956495600) ENGINE = InnoDB,
 PARTITION `P_NMT_ORDERS_007` VALUES LESS THAN (1988118000) ENGINE = InnoDB,
 PARTITION `P_NMT_ORDERS_008` VALUES LESS THAN (2019654000) ENGINE = InnoDB,
 PARTITION `P_NMT_ORDERS_009` VALUES LESS THAN (2051190000) ENGINE = InnoDB,
 PARTITION `P_NMT_ORDERS_010` VALUES LESS THAN (2082726000) ENGINE = InnoDB,
 PARTITION `P_NMT_ORDERS_MAX` VALUES LESS THAN MAXVALUE ENGINE = InnoDB
);

컬럼 정의:

컬럼명타입NULL기본값설명
ORD_IDXintNOAUTO주문 일련번호 (PK)
UNIX_ORD_DTintNO0주문일자 UNIX TIME (파티션키, 복합PK)
ORD_DTvarchar(10)NO-주문 영업일자 (%Y%m%d)
ORD_TMvarchar(10)NO-주문 영업시간 (%H%i%S)
USR_IDXintYESNULL회원 IDX (FK)
USR_NMvarchar(50)YESNULL고객명
ORD_TYPEvarchar(30)NO'ORD_TYPE:ONETIME'주문 유형
PRODUCT_NAMEvarchar(200)YESNULL대표 상품명
PRICEnumeric(12,3)YESNULL주문 금액
PAID_AMOUNTnumeric(12,3)YESNULL실제 결제 금액
CURRENCYvarchar(20)NO'CURRENCY:KRW'통화 코드
PAYMENT_METHODvarchar(50)YESNULL결제 수단
PAYMENT_DATEtimestampYESNULL결제일시
SHIPPINGJSONYESNULL배송지 정보
DEL_YNchar(1)NO'N'삭제여부
CREATE_TStimestampNOCURRENT_TIMESTAMP등록일시
MODIFY_TStimestampYESNULL최근 수정일시

파티션 전략:

  • UNIX_ORD_DT 기반 RANGE 파티션 (연도별)
  • 복합 PK: (ORD_IDX, UNIX_ORD_DT) - 파티션 테이블 제약
  • 파티션 테이블이므로 FOREIGN KEY 미사용
  • 주문 항목은 별도 NMT_ORDER_ITEMS 테이블에서 관리

4.6 NMT_ORDER_ITEMS (주문 항목)

주문 항목 정규화 저장용 (StepPay 매핑은 STP_ORDERS 참조) UNIX 타임스탬프 기반 연도별 RANGE 파티션 적용

sql
CREATE TABLE IF NOT EXISTS NMT_ORDER_ITEMS (
    `ORI_IDX`                 int NOT NULL AUTO_INCREMENT COMMENT '주문항목 IDX',
    `UNIX_CREATE_DT`          int NOT NULL DEFAULT 0 COMMENT '등록일자(UNIX TIME)',
    `ORD_IDX`                 int NOT NULL COMMENT '주문 IDX (FK)',
    `PRD_IDX`                 int NULL COMMENT '상품 IDX (FK)',
    `PRC_IDX`                 int NULL COMMENT '가격플랜 IDX (FK)',
    `PRD_NM`                  varchar(200) NULL COMMENT '상품명',
    `PRC_NM`                  varchar(200) NULL COMMENT '가격플랜명',
    `QUANTITY`                int DEFAULT 1 COMMENT '수량',
    `UNIT_PRICE`              numeric(12,3) NULL COMMENT '단가',
    `TOTAL_PRICE`             numeric(12,3) NULL COMMENT '합계',
    `SELECTED_OPTIONS`        JSON NULL COMMENT '선택 옵션',
    `DEL_YN`                  char(1) DEFAULT 'N' COMMENT '삭제여부',
    `CREATE_TS`               timestamp DEFAULT CURRENT_TIMESTAMP COMMENT '등록일시',
    `MODIFY_TS`               timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '수정일시',

    PRIMARY KEY (`ORI_IDX` ASC, `UNIX_CREATE_DT` ASC) USING BTREE,
    INDEX `IDX_NMT_ORDER_ITEMS_01` (`ORD_IDX` ASC) USING BTREE,
    INDEX `IDX_NMT_ORDER_ITEMS_02` (`PRD_IDX` ASC) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=1 COMMENT='주문 항목'
 PARTITION BY RANGE (`UNIX_CREATE_DT`) (
 PARTITION `P_NMT_ORDER_ITEMS_001` VALUES LESS THAN (1798729200) ENGINE = InnoDB,
 PARTITION `P_NMT_ORDER_ITEMS_002` VALUES LESS THAN (1830265200) ENGINE = InnoDB,
 PARTITION `P_NMT_ORDER_ITEMS_003` VALUES LESS THAN (1861887600) ENGINE = InnoDB,
 PARTITION `P_NMT_ORDER_ITEMS_004` VALUES LESS THAN (1893423600) ENGINE = InnoDB,
 PARTITION `P_NMT_ORDER_ITEMS_005` VALUES LESS THAN (1924959600) ENGINE = InnoDB,
 PARTITION `P_NMT_ORDER_ITEMS_006` VALUES LESS THAN (1956495600) ENGINE = InnoDB,
 PARTITION `P_NMT_ORDER_ITEMS_007` VALUES LESS THAN (1988118000) ENGINE = InnoDB,
 PARTITION `P_NMT_ORDER_ITEMS_008` VALUES LESS THAN (2019654000) ENGINE = InnoDB,
 PARTITION `P_NMT_ORDER_ITEMS_009` VALUES LESS THAN (2051190000) ENGINE = InnoDB,
 PARTITION `P_NMT_ORDER_ITEMS_010` VALUES LESS THAN (2082726000) ENGINE = InnoDB,
 PARTITION `P_NMT_ORDER_ITEMS_MAX` VALUES LESS THAN MAXVALUE ENGINE = InnoDB
);

컬럼 정의:

컬럼명타입NULL기본값설명
ORI_IDXintNOAUTO주문항목 IDX (PK)
UNIX_CREATE_DTintNO0등록일자 UNIX TIME (파티션키, 복합PK)
ORD_IDXintNO-주문 IDX (FK)
PRD_IDXintYESNULL상품 IDX (FK)
PRC_IDXintYESNULL가격플랜 IDX (FK)
PRD_NMvarchar(200)YESNULL상품명
PRC_NMvarchar(200)YESNULL가격플랜명
QUANTITYintNO1수량
UNIT_PRICEnumeric(12,3)YESNULL단가
TOTAL_PRICEnumeric(12,3)YESNULL합계
SELECTED_OPTIONSJSONYESNULL선택 옵션
DEL_YNchar(1)NO'N'삭제여부
CREATE_TStimestampNOCURRENT_TIMESTAMP등록일시
MODIFY_TStimestampNOCURRENT_TIMESTAMP수정일시

파티션 전략:

  • UNIX_CREATE_DT 기반 RANGE 파티션 (연도별)
  • 복합 PK: (ORI_IDX, UNIX_CREATE_DT) - 파티션 테이블 제약
  • 로컬 IDX(int)로 주문/상품/가격플랜 참조 (StepPay ID 미사용)

4.7 NMT_SUBSCRIPTIONS (구독)

로컬 구독 정보 (StepPay 매핑은 STP_SUBSCRIPTIONS 참조) STATUS: ACTIVE, PAUSED, CANCELLED 등 UNIX 타임스탬프 기반 연도별 RANGE 파티션 적용

sql
CREATE TABLE IF NOT EXISTS NMT_SUBSCRIPTIONS (
    `SUB_IDX`                 int AUTO_INCREMENT NOT NULL COMMENT '구독 IDX',
    `UNIX_CREATE_DT`          int NOT NULL DEFAULT 0 COMMENT '등록일자(UNIX TIME)',
    `USR_IDX`                 int NULL COMMENT '회원 IDX (FK)',
    `USR_NM`                  varchar(50) NULL COMMENT '회원명',
    `PRD_NM`                  varchar(200) NULL COMMENT '상품명',
    `SUB_STATUS`              varchar(30) NOT NULL DEFAULT 'SUB_STAT:ACTIVE' COMMENT '구독상태',
    `ITEMS`                   JSON NULL COMMENT '구독 항목 배열',
    `RECURRING`               JSON NULL COMMENT '{intervalCount, interval}',
    `CURRENCY`                varchar(20) DEFAULT 'CURRENCY:KRW' COMMENT '통화코드',
    `NEXT_PAYMENT_DATE_TIME`  timestamp NULL COMMENT '다음 결제일시',
    `PAYMENT_METHOD`          JSON NULL COMMENT '결제 수단 정보',
    `START_DATE_TIME`         timestamp NULL COMMENT '구독 시작일시',
    `END_DATE_TIME`           timestamp NULL COMMENT '구독 종료일시',
    `CREATE_TS`               timestamp DEFAULT CURRENT_TIMESTAMP COMMENT '등록일시',
    `MODIFY_TS`               timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '수정일시',

    PRIMARY KEY (`SUB_IDX` ASC, `UNIX_CREATE_DT` ASC) USING BTREE,
    INDEX `IDX_NMT_SUBSCRIPTIONS_01` (`USR_IDX` ASC, `SUB_STATUS` ASC, `CREATE_TS` DESC) USING BTREE,
    INDEX `IDX_NMT_SUBSCRIPTIONS_02` (`NEXT_PAYMENT_DATE_TIME` ASC) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=1 COMMENT='구독'
 PARTITION BY RANGE (`UNIX_CREATE_DT`) (
 PARTITION `P_NMT_SUBSCRIPTIONS_001` VALUES LESS THAN (1798729200) ENGINE = InnoDB,
 PARTITION `P_NMT_SUBSCRIPTIONS_002` VALUES LESS THAN (1830265200) ENGINE = InnoDB,
 PARTITION `P_NMT_SUBSCRIPTIONS_003` VALUES LESS THAN (1861887600) ENGINE = InnoDB,
 PARTITION `P_NMT_SUBSCRIPTIONS_004` VALUES LESS THAN (1893423600) ENGINE = InnoDB,
 PARTITION `P_NMT_SUBSCRIPTIONS_005` VALUES LESS THAN (1924959600) ENGINE = InnoDB,
 PARTITION `P_NMT_SUBSCRIPTIONS_006` VALUES LESS THAN (1956495600) ENGINE = InnoDB,
 PARTITION `P_NMT_SUBSCRIPTIONS_007` VALUES LESS THAN (1988118000) ENGINE = InnoDB,
 PARTITION `P_NMT_SUBSCRIPTIONS_008` VALUES LESS THAN (2019654000) ENGINE = InnoDB,
 PARTITION `P_NMT_SUBSCRIPTIONS_009` VALUES LESS THAN (2051190000) ENGINE = InnoDB,
 PARTITION `P_NMT_SUBSCRIPTIONS_010` VALUES LESS THAN (2082726000) ENGINE = InnoDB,
 PARTITION `P_NMT_SUBSCRIPTIONS_MAX` VALUES LESS THAN MAXVALUE ENGINE = InnoDB
);

컬럼 정의:

컬럼명타입NULL기본값설명
SUB_IDXintNOAUTO구독 IDX (PK)
UNIX_CREATE_DTintNO0등록일자 UNIX TIME (파티션키, 복합PK)
USR_IDXintYESNULL회원 IDX (FK)
USR_NMvarchar(50)YESNULL회원명
PRD_NMvarchar(200)YESNULL상품명
SUB_STATUSvarchar(30)NO'SUB_STAT:ACTIVE'구독 상태
ITEMSJSONYESNULL구독 항목
RECURRINGJSONYESNULL구독 주기
CURRENCYvarchar(20)NO'CURRENCY:KRW'통화
NEXT_PAYMENT_DATE_TIMEtimestampYESNULL다음 결제일
PAYMENT_METHODJSONYESNULL결제 수단
START_DATE_TIMEtimestampYESNULL구독 시작일
END_DATE_TIMEtimestampYESNULL구독 종료일
CREATE_TStimestampNOCURRENT_TIMESTAMP등록일시
MODIFY_TStimestampNOCURRENT_TIMESTAMP수정일시

파티션 전략:

  • UNIX_CREATE_DT 기반 RANGE 파티션 (연도별)
  • 복합 PK: (SUB_IDX, UNIX_CREATE_DT) - 파티션 테이블 제약
  • 복합 인덱스: USR_IDX + SUB_STATUS + CREATE_TS (사용자별 구독 조회 최적화)

4.8 NMT_PAYMENT_METHODS (결제 수단)

로컬 결제수단 정보 (StepPay 매핑은 STP_PAYMENTS 참조)

sql
CREATE TABLE NMT_PAYMENT_METHODS (
    `PMT_IDX`                 int AUTO_INCREMENT NOT NULL COMMENT '결제수단 IDX',
    `USR_IDX`                 int NOT NULL COMMENT '회원 IDX (FK)',
    `PAYMENT_INFO`            JSON NULL COMMENT '카드/계좌 정보',
    `IS_DEFAULT`              tinyint DEFAULT FALSE COMMENT '기본 결제수단 여부',
    `DEL_YN`                  char(1) DEFAULT 'N' COMMENT '삭제여부',
    `CREATE_TS`               timestamp DEFAULT CURRENT_TIMESTAMP COMMENT '등록일시',

    PRIMARY KEY (`PMT_IDX`),
    INDEX `IDX_NMT_PAYMENT_METHODS_01` (`USR_IDX`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='결제 수단';

컬럼 정의:

컬럼명타입NULL기본값설명
PMT_IDXintNOAUTO결제수단 IDX (PK)
USR_IDXintNO-회원 IDX (FK)
PAYMENT_INFOJSONYESNULL카드/계좌 정보
IS_DEFAULTtinyintNOFALSE기본 결제수단 여부
DEL_YNchar(1)NO'N'삭제여부
CREATE_TStimestampNOCURRENT_TIMESTAMP등록일시

4.9 NMT_WEBHOOK_LOGS (웹훅 로그)

StepPay 웹훅 수신 로그 (로컬 전용)

sql
CREATE TABLE NMT_WEBHOOK_LOGS (
    `WHL_IDX`             int NOT NULL AUTO_INCREMENT COMMENT '웹훅 로그 IDX',
    `EVENT_TYPE`          varchar(200) NOT NULL COMMENT '이벤트 유형',
    `PAYLOAD`             JSON NOT NULL COMMENT '웹훅 페이로드',
    `SIGNATURE`           varchar(200) NULL COMMENT '서명값',
    `WHL_STATUS`          varchar(30) NOT NULL DEFAULT 'WHL_STAT:RECEIVED' COMMENT '처리상태',
    `ERROR_MESSAGE`       text NULL COMMENT '오류 메시지',
    `PROCESSED_TS`        timestamp NULL COMMENT '처리일시',
    `IP_ADDRESS`          varchar(20) NULL COMMENT '요청 IP',
    `CREATE_TS`           timestamp DEFAULT CURRENT_TIMESTAMP COMMENT '등록일시',

    PRIMARY KEY (`WHL_IDX`),
    INDEX `IDX_NMT_WEBHOOK_LOGS_01` (`EVENT_TYPE`),
    INDEX `IDX_NMT_WEBHOOK_LOGS_02` (`WHL_STATUS`),
    INDEX `IDX_NMT_WEBHOOK_LOGS_03` (`CREATE_TS`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='웹훅 로그';

컬럼 정의:

컬럼명타입NULL기본값설명
WHL_IDXintNOAUTO웹훅 로그 IDX (PK)
EVENT_TYPEvarchar(200)NO-이벤트 유형
PAYLOADJSONNO-웹훅 페이로드
SIGNATUREvarchar(200)YESNULL서명값
WHL_STATUSvarchar(30)NO'WHL_STAT:RECEIVED'처리 상태
ERROR_MESSAGEtextYESNULL오류 메시지
PROCESSED_TStimestampYESNULL처리 완료 일시
IP_ADDRESSvarchar(20)YESNULL요청 IP
CREATE_TStimestampNOCURRENT_TIMESTAMP등록일시

4.10 NMT_REFRESH_TOKENS (리프레시 토큰)

로컬 JWT 인증용 (로컬 전용)

sql
CREATE TABLE NMT_REFRESH_TOKENS (
    `RTK_IDX`             int NOT NULL AUTO_INCREMENT COMMENT '리프레시 토큰 IDX',
    `USR_IDX`             int NOT NULL COMMENT '회원 IDX',
    `TOKEN_HASH`          varchar(200) NOT NULL COMMENT '토큰 해시값',
    `EXPIRES_TS`          timestamp NOT NULL COMMENT '만료일시',
    `REVOKED_TS`          timestamp NULL COMMENT '폐기일시',
    `CREATE_TS`           timestamp DEFAULT CURRENT_TIMESTAMP COMMENT '등록일시',

    PRIMARY KEY (`RTK_IDX`),
    INDEX `IDX_NMT_REFRESH_TOKENS_01` (`USR_IDX`),
    INDEX `IDX_NMT_REFRESH_TOKENS_02` (`TOKEN_HASH`),
    INDEX `IDX_NMT_REFRESH_TOKENS_03` (`EXPIRES_TS`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='리프레시 토큰';

컬럼 정의:

컬럼명타입NULL기본값설명
RTK_IDXintNOAUTO리프레시 토큰 IDX (PK)
USR_IDXintNO-회원 IDX
TOKEN_HASHvarchar(200)NO-토큰 해시
EXPIRES_TStimestampNO-만료일시
REVOKED_TStimestampYESNULL폐기일시
CREATE_TStimestampNOCURRENT_TIMESTAMP등록일시

5. StepPay 매핑 테이블 (07.steppay)

로컬 엔티티와 StepPay ID를 연결하는 매핑 테이블. 로컬 PK를 기준으로 StepPay ID/코드를 저장합니다. NMT_* 테이블에서 STP 컬럼이 분리되어 독립적인 매핑 테이블로 관리됩니다.

5.1 STP_USERS (사용자 매핑)

sql
CREATE TABLE STP_USERS (
    `USR_IDX`                 int NOT NULL COMMENT '로컬 회원 IDX (FK)',
    `STP_USR_IDX`             bigint NOT NULL COMMENT 'StepPay 고객 ID',
    `STP_USR_CODE`            varchar(100) NOT NULL COMMENT 'StepPay 고객 코드 (USER_xxx)',
    `CREATE_TS`               timestamp DEFAULT CURRENT_TIMESTAMP COMMENT '등록일시',
    `MODIFY_TS`               timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '수정일시',

    PRIMARY KEY (`USR_IDX`),
    UNIQUE INDEX `IDX_STP_USERS_01` (`STP_USR_IDX`),
    UNIQUE INDEX `IDX_STP_USERS_02` (`STP_USR_CODE`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='StepPay 사용자 매핑';

5.2 STP_PRODUCTS (상품 매핑)

sql
CREATE TABLE STP_PRODUCTS (
    `PRD_IDX`                 int NOT NULL COMMENT '로컬 상품 IDX (FK)',
    `STP_PRD_IDX`             bigint NOT NULL COMMENT 'StepPay 상품 ID',
    `STP_PRD_CODE`            varchar(100) NOT NULL COMMENT 'StepPay 상품 코드 (product_xxx)',
    `CREATE_TS`               timestamp DEFAULT CURRENT_TIMESTAMP COMMENT '등록일시',
    `MODIFY_TS`               timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '수정일시',

    PRIMARY KEY (`PRD_IDX`),
    UNIQUE INDEX `IDX_STP_PRODUCTS_01` (`STP_PRD_IDX`),
    UNIQUE INDEX `IDX_STP_PRODUCTS_02` (`STP_PRD_CODE`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='StepPay 상품 매핑';

5.3 STP_PRICES (가격플랜 매핑)

sql
CREATE TABLE STP_PRICES (
    `PRC_IDX`                 int NOT NULL COMMENT '로컬 가격플랜 IDX (FK)',
    `STP_PRC_IDX`             bigint NOT NULL COMMENT 'StepPay 가격플랜 ID',
    `STP_PRC_CODE`            varchar(100) NOT NULL COMMENT 'StepPay 가격 코드 (price_xxx)',
    `STP_PRD_IDX`             bigint NOT NULL COMMENT 'StepPay 상품 ID (참조용)',
    `CREATE_TS`               timestamp DEFAULT CURRENT_TIMESTAMP COMMENT '등록일시',
    `MODIFY_TS`               timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '수정일시',

    PRIMARY KEY (`PRC_IDX`),
    UNIQUE INDEX `IDX_STP_PRICES_01` (`STP_PRC_IDX`),
    UNIQUE INDEX `IDX_STP_PRICES_02` (`STP_PRC_CODE`),
    INDEX `IDX_STP_PRICES_03` (`STP_PRD_IDX`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='StepPay 가격플랜 매핑';

5.4 STP_ORDERS (주문 매핑)

sql
CREATE TABLE STP_ORDERS (
    `ORD_IDX`                 int NOT NULL COMMENT '로컬 주문 IDX (FK)',
    `STP_ORD_IDX`             bigint NOT NULL COMMENT 'StepPay 주문 ID',
    `STP_ORD_CODE`            varchar(100) NOT NULL COMMENT 'StepPay 주문 코드 (order_xxx)',
    `CREATE_TS`               timestamp DEFAULT CURRENT_TIMESTAMP COMMENT '등록일시',
    `MODIFY_TS`               timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '수정일시',

    PRIMARY KEY (`ORD_IDX`),
    UNIQUE INDEX `IDX_STP_ORDERS_01` (`STP_ORD_IDX`),
    UNIQUE INDEX `IDX_STP_ORDERS_02` (`STP_ORD_CODE`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='StepPay 주문 매핑';

5.5 STP_SUBSCRIPTIONS (구독 매핑)

sql
CREATE TABLE STP_SUBSCRIPTIONS (
    `SUB_IDX`                 int NOT NULL COMMENT '로컬 구독 IDX (FK)',
    `STP_SUB_IDX`             bigint NOT NULL COMMENT 'StepPay 구독 ID',
    `STP_SUB_CODE`            varchar(100) NOT NULL COMMENT 'StepPay 구독 코드 (subscription_xxx)',
    `STP_USR_IDX`             bigint NULL COMMENT 'StepPay 고객 ID (참조용)',
    `CREATE_TS`               timestamp DEFAULT CURRENT_TIMESTAMP COMMENT '등록일시',
    `MODIFY_TS`               timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '수정일시',

    PRIMARY KEY (`SUB_IDX`),
    UNIQUE INDEX `IDX_STP_SUBSCRIPTIONS_01` (`STP_SUB_IDX`),
    UNIQUE INDEX `IDX_STP_SUBSCRIPTIONS_02` (`STP_SUB_CODE`),
    INDEX `IDX_STP_SUBSCRIPTIONS_03` (`STP_USR_IDX`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='StepPay 구독 매핑';

5.6 STP_PAYMENTS (결제수단 매핑)

sql
CREATE TABLE STP_PAYMENTS (
    `PMT_IDX`                 int NOT NULL COMMENT '로컬 결제수단 IDX (FK)',
    `STP_PMT_IDX`             bigint NOT NULL COMMENT 'StepPay 결제수단 ID',
    `CREATE_TS`               timestamp DEFAULT CURRENT_TIMESTAMP COMMENT '등록일시',
    `MODIFY_TS`               timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '수정일시',

    PRIMARY KEY (`PMT_IDX`),
    UNIQUE INDEX `IDX_STP_PAYMENTS_01` (`STP_PMT_IDX`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='StepPay 결제수단 매핑';

6. 인덱스 전략

6.1 복합 인덱스 설계

주요 조회 패턴에 맞춰 복합 인덱스를 구성하여 쿼리 성능을 최적화:

테이블인덱스컬럼 구성조회 패턴
NMT_USERSIDX_01 (UNIQUE)USR_ID로그인 시 아이디 조회
NMT_USERSIDX_02USR_EMAIL이메일로 조회
NMT_USERSIDX_03USR_STATUS상태별 조회
NMT_USERSIDX_04CREATE_TS가입일 기준 정렬
NMT_PRODUCTSIDX_01STATUS, TYPE, PRODUCT_ORDER, CREATE_TS상품 목록 (상태+타입 필터 + 정렬)
NMT_PRODUCTSIDX_02CREATE_TS등록일 기준 정렬
NMT_PRODUCTSIDX_FT (FULLTEXT)PRD_NM, PRD_DESCRIPTION상품명/설명 검색
NMT_PRICESIDX_01PRD_IDX, SORT_ORDER상품별 가격플랜 조회 + 정렬
NMT_ORDERSPKORD_IDX, UNIX_ORD_DT파티션 프루닝
NMT_ORDERSIDX_01USR_IDX, ORD_TYPE, CREATE_TS사용자별 주문 목록 (유형 필터 + 최신순)
NMT_ORDERSIDX_02PAYMENT_DATE결제일 기준 조회
NMT_ORDERSIDX_03ORD_TYPE주문 유형별 조회
NMT_ORDER_ITEMSPKORI_IDX, UNIX_CREATE_DT파티션 프루닝
NMT_ORDER_ITEMSIDX_01ORD_IDX주문별 항목 조회
NMT_ORDER_ITEMSIDX_02PRD_IDX상품별 주문 조회
NMT_SUBSCRIPTIONSPKSUB_IDX, UNIX_CREATE_DT파티션 프루닝
NMT_SUBSCRIPTIONSIDX_01USR_IDX, SUB_STATUS, CREATE_TS사용자별 구독 목록 (상태 필터 + 최신순)
NMT_SUBSCRIPTIONSIDX_02NEXT_PAYMENT_DATE_TIME다음 결제일 조회

6.2 StepPay 매핑 인덱스

STP_* 테이블은 로컬 IDX ↔ StepPay ID/코드 양방향 조회를 위해 UNIQUE 인덱스 사용:

테이블인덱스용도
STP_USERSPK (USR_IDX), UNIQUE (STP_USR_IDX, STP_USR_CODE)양방향 조회
STP_PRODUCTSPK (PRD_IDX), UNIQUE (STP_PRD_IDX, STP_PRD_CODE)양방향 조회
STP_PRICESPK (PRC_IDX), UNIQUE (STP_PRC_IDX, STP_PRC_CODE)양방향 조회
STP_ORDERSPK (ORD_IDX), UNIQUE (STP_ORD_IDX, STP_ORD_CODE)양방향 조회
STP_SUBSCRIPTIONSPK (SUB_IDX), UNIQUE (STP_SUB_IDX, STP_SUB_CODE)양방향 조회
STP_PAYMENTSPK (PMT_IDX), UNIQUE (STP_PMT_IDX)양방향 조회

6.3 동기화 전략

StepPay를 마스터 데이터로 사용하고, 로컬 DB는 캐시/미러 역할:

  1. 실시간 동기화: 웹훅 수신 시 NMP_SYNC_* 프로시저로 즉시 반영
  2. STP 코드→로컬 IDX 변환: NMP_ORDER_GET_BY_STP_CODE 등으로 StepPay 코드에서 로컬 IDX를 조회
  3. 배치 동기화: 주기적으로 StepPay API 호출하여 전체 동기화
  4. 조회 우선순위: 로컬 DB 먼저 조회 → 없으면 StepPay API 호출 → 로컬 저장

최종 업데이트: 2026년 2월 6일 - STP 컬럼 분리 (STP_ 매핑 테이블), DEL_YN 소프트 삭제, 복합 인덱스 최적화, NMT_ORDER_ITEMS/NMT_SUBSCRIPTIONS 파티션 추가*