Skip to content
Published on

트레이딩 백오피스와 결제 시스템 — Front/Middle/Back의 데이터 여정

Authors

들어가며

트레이딩 시스템이라고 하면 보통 화려한 프론트오피스 — 주문 집행, 알고 트레이딩, 호가창 — 를 떠올립니다. 하지만 체결 한 건이 돈과 증권의 실제 이동으로 끝나기까지는 그 뒤에 훨씬 긴 여정이 있습니다. 포지션 반영, 손익 계산, 확인(컨펌), 청산, 결제 지시, 원장 기장, 대사까지. 이 여정을 책임지는 것이 미들오피스와 백오피스 시스템입니다.

백오피스는 화려하지 않지만, 장애가 곧 금융사고가 되는 영역입니다. 결제가 하루 늦으면 거래상대방 리스크와 페널티가 발생하고, 대사 브레이크를 방치하면 회계 감사와 규제 검사에서 문제가 됩니다. 이 글은 주식/채권/파생 트레이드 한 건이 체결 후 어떤 시스템들을 거쳐 최종 결제와 회계 기장까지 도달하는지, 그 과정에서 어떤 통제와 배치가 작동하는지를 시스템 설계 관점에서 따라갑니다. 한국 시장 인프라(한국거래소, 한국예탁결제원, 한국은행 BOK-Wire+)의 맥락도 함께 다룹니다.

본 글은 기술 자료이며 투자 자문이 아닙니다.

FO/MO/BO 구분과 시스템 맵

증권사·은행 트레이딩 부문의 시스템은 전통적으로 세 구역으로 나눕니다.

+--------------------------------------------------------------------+
| FRONT OFFICE (FO)            "거래를 만든다"                         |
|  - OMS(주문관리) / EMS(집행관리) / 알고 엔진                          |
|  - 프라이싱, 호가, 마켓데이터                                         |
|  - 트레이더 블로터(당일 거래 현황)                                     |
+---------------------------+----------------------------------------+
                            | 체결(execution) 이벤트
                            v
+--------------------------------------------------------------------+
| MIDDLE OFFICE (MO)           "거래를 통제한다"                       |
|  - 트레이드 캡처/보강(enrichment) - 계좌, 수수료, 결제정보 부여        |
|  - 한도 모니터링(포지션/신용/VaR), 리스크 리포팅                       |
|  - 실시간 PnL, 일중 포지션 관리                                       |
|  - 컨펌(거래 확인), 어펌(기관고객 확인)                                |
+---------------------------+----------------------------------------+
                            | 확정된 트레이드(confirmed trade)
                            v
+--------------------------------------------------------------------+
| BACK OFFICE (BO)             "거래를 끝낸다"                         |
|  - 청산/결제 지시 생성, 결제기관 연계(KSD/KRX청산/글로벌 커스터디안)    |
|  - 원장 기장, 회계 연동, 수수료/세금 정산                              |
|  - 대사(포지션/현금/거래), 브레이크 관리                               |
|  - 코퍼레이트 액션, 보고서, 규제 보고                                  |
+--------------------------------------------------------------------+

핵심 원칙은 **직무 분리(segregation of duties)**입니다. 거래를 일으키는 사람(FO)과 거래를 검증·정산하는 사람(MO/BO)은 조직도, 시스템 권한도 분리되어야 합니다. FO 트레이더가 백오피스 시스템의 결제 데이터를 수정할 수 있는 구조는 그 자체로 감사 지적 사항입니다.

주문 → 체결 → 청산 → 결제: 상품별 흐름

전체 흐름을 시퀀스로 보면 다음과 같습니다.

 트레이더      OMS/EMS      거래소/장외     MO(캡처/컨펌)    청산기관       BO(결제)      예탁/계좌
   |             |             |              |              |             |             |
   |--주문------>|--집행------->|              |              |             |             |
   |             |<--체결 통보--|              |              |             |             |
   |             |--체결 전달--------------->|               |             |             |
   |             |             |              |--보강/검증--->|             |             |
   |             |             |              |--컨펌 발송--> (상대방)      |             |
   |             |             |              |              |<--청산내역--|             |
   |             |             |              |              |--차감결제-->|             |
   |             |             |              |              |             |--결제지시-->|
   |             |             |              |              |             |<--결제완료--|
   |             |             |              |              |             |--기장/대사--|

상품별로 청산·결제 구조가 다릅니다.

구분주식(장내)채권장내파생장외파생(OTC)
체결 장소거래소(KRX)장외 위주 + 국채전문유통시장파생상품시장(KRX)양자간 계약
청산KRX 청산(CCP)대부분 양자간, 일부 CCPKRX 청산(CCP)일부 CCP 의무청산(IRS 등)
결제 주기T+2 (KRX 주식시장 기준)통상 T+1, 거래 조건에 따름일일정산(증거금)계약 조건(CSA 담보)
결제 방식DVP, 예탁결제DVP현금 차감결제현금/담보 이전
핵심 리스크결제 실패결제 실패, 상대방증거금 부족상대방 신용, 담보 분쟁

설계 시사점: 트레이드 모델은 상품 공통 코어(거래 식별자, 당사자, 수량, 금액, 일자들)와 상품별 확장(파생의 기초자산·만기·증거금, 채권의 경과이자 등)으로 분리하는 것이 유지보수에 유리합니다. 특히 일자(date)의 구분 — 체결일(trade date), 결제예정일(settlement date), 실제결제일 — 을 처음부터 분리해 두지 않으면 나중에 수습이 어렵습니다.

포지션과 손익 관리 — 실시간 PnL과 EOD 평가

포지션 관리의 기본은 단순합니다. 체결 이벤트를 계좌·종목 단위로 누적하면 포지션이 됩니다. 어려운 것은 손익(PnL)입니다. 손익은 두 가지로 나뉩니다.

실현손익(realized PnL)
  = 매도 시점에 확정되는 손익
  = (매도단가 - 보유원가단가) x 매도수량   [원가 산정: 이동평균법 등]

평가손익(unrealized PnL)
  = 보유 중인 포지션의 장부상 손익
  = (현재 평가단가 - 보유원가단가) x 보유수량

일중 PnL(intraday)
  = 전일 평가 기준 대비 당일 변동
  = 당일 실현손익 + (당일 평가단가 - 전일 평가단가) x 보유수량 + 당일 신규분 손익

실시간 PnL은 MO의 영역입니다. 체결 스트림과 시세 스트림을 결합해 트레이더·데스크·북 단위로 집계합니다. 반면 EOD(일마감) 평가는 BO/리스크의 공식 숫자입니다. 마감 시세(공정가액 평가 기준)로 전 포지션을 재평가하고, 이 숫자가 회계 원장과 규제 보고의 원천이 됩니다.

# EOD 평가 배치의 골격 (개념 예시)
from decimal import Decimal

def eod_valuation(positions, closing_prices, fx_rates, base_ccy="KRW"):
    results = []
    for pos in positions:
        price = closing_prices.get(pos.instrument_id)
        if price is None:
            # 평가 불능 종목은 반드시 예외 큐로 — 0으로 채우면 안 된다
            results.append(valuation_exception(pos, reason="NO_PRICE"))
            continue
        mv_local = Decimal(pos.quantity) * price.clean_price
        if pos.instrument_type == "BOND":
            mv_local += Decimal(pos.quantity) * price.accrued_interest
        fx = fx_rates.get((pos.currency, base_ccy), Decimal("1"))
        mv_base = mv_local * fx
        unrealized = mv_base - pos.cost_basis_base
        results.append(make_valuation(pos, mv_local, mv_base, unrealized,
                                      price_source=price.source))
    return results

운영 포인트:

  • 시세 소스의 우선순위와 폴백: 마감 시세가 없는 종목(비유동 채권, 비상장)은 평가 모델이나 전일 가격 폴백 규칙이 필요하고, 어떤 소스로 평가했는지가 기록되어야 합니다.
  • FO 추정 PnL과 BO 공식 PnL의 차이 설명: 두 숫자는 다를 수 있습니다(시세 시점, 수수료 반영 차이). 차이가 임계치를 넘으면 마감 전에 설명되어야 합니다. 이를 PnL explain 프로세스라 부릅니다.
  • 마감 후 정정(late adjustment): 마감 후 발견된 오류는 전일 데이터를 고치는 것이 아니라 당일 정정 분개로 반영합니다. 마감된 일자의 데이터는 불변이어야 합니다.

리스크 미들오피스 — 한도와 VaR

미들오피스의 또 다른 축은 리스크 통제입니다.

  • 한도 모니터링: 포지션 한도(종목·섹터·북 단위), 손실 한도(일중/누적 손실 제한), 신용 한도(거래상대방별 익스포저)를 실시간 또는 준실시간으로 감시합니다. 한도 위반 시의 절차(경보 → 소명 → 강제 청산 여부)가 시스템 워크플로로 정의되어야 합니다.
  • VaR(Value at Risk): 일정 신뢰수준(예: 99%)에서 일정 보유기간(예: 1일) 동안 발생할 수 있는 최대 손실 추정치입니다. 역사적 시뮬레이션, 분산-공분산, 몬테카를로 방식이 있으며, 어느 방식이든 포지션 데이터와 시장데이터의 품질이 결과를 좌우합니다. VaR 계산 자체는 리스크 엔진의 일이지만, 입력이 되는 포지션 스냅숏의 정확성과 적시성은 백오피스 데이터 품질의 문제입니다.
  • 백테스팅: VaR 추정치와 실제 손익을 비교해 모델을 검증합니다. 바젤 시장리스크 규제(FRTB 포함)에서 요구되는 절차입니다.

확인과 대사 — 컨펌, 어펌, 브레이크 관리

체결 직후 가장 중요한 통제는 **거래 확인(confirmation)**입니다. 우리 시스템의 거래 기록과 상대방의 기록이 일치하는지 확인하는 절차입니다.

  • 장내 거래는 거래소 체결 데이터가 기준이 되므로 비교적 단순합니다.
  • 장외 거래(채권, OTC 파생)는 양 당사자가 각자 기록한 조건을 맞춰야 합니다. 전자 컨펌 플랫폼을 쓰거나, SWIFT 메시지로 교환하거나, 최악의 경우 팩스·이메일 수작업이 됩니다.
  • 기관 고객 거래는 운용사 측 확인(affirmation)과 결제 지시 배분(allocation: 블록 체결을 복수 펀드 계좌로 쪼개는 것)이 추가됩니다.

확인·대사에서 불일치가 발견되면 **브레이크(break)**로 등록되고, 해소될 때까지 추적됩니다.

브레이크 라이프사이클:
  탐지(detected) --> 배정(assigned: 담당자 지정)
     --> 조사(investigating: 원인 코드 분류)
     --> 해소(resolved: 정정 분개/상대방 수정/시세 정정 ...)
     --> 종결(closed: 승인자 확인)

  핵심 메트릭: 미해소 브레이크 건수 x 경과일수(aging) x 금액
  3일 이상 경과한 고액 브레이크는 자동 에스컬레이션

결제 시스템 — DVP, 한국예탁결제원, BOK-Wire+

결제(settlement)는 증권과 대금이 실제로 이동하는 순간입니다. 핵심 개념은 DVP(Delivery versus Payment, 동시결제): 증권 인도와 대금 지급이 상호 조건부로 묶여, 한쪽만 이행되는 원금 리스크를 제거하는 방식입니다. BIS CPMI 기준으로 DVP는 세 가지 모델로 분류됩니다.

모델증권대금특징
DVP 모델 1건별 총량 결제건별 총량 결제원금 리스크 최소, 유동성 소요 큼
DVP 모델 2건별 총량 결제차감(net) 결제증권은 즉시, 대금은 마감 차감
DVP 모델 3차감 결제차감 결제유동성 효율 최대, 시스템 의존 큼

한국 시장 인프라:

  • 한국거래소(KRX): 장내 매매 체결과 청산(CCP). 장내 주식·파생의 중앙거래당사자로서 결제 이행을 보증합니다.
  • 한국예탁결제원(KSD): 증권의 중앙예탁기관(CSD). 증권 계좌대체(전자등록)로 증권 인도가 이뤄집니다. 주식은 전자증권제도에 따라 전자등록 방식으로 관리됩니다.
  • 한국은행 BOK-Wire+(한은금융망): 원화 거액결제시스템(RTGS). 결제 대금의 최종 이체가 한국은행 당좌계좌 간에 이뤄지며, 증권대금동시결제(DVP)가 KSD와 연계되어 처리됩니다.
  • 결제 주기: KRX 주식시장은 T+2 결제입니다(체결일로부터 2영업일 후).

백오피스 시스템 관점에서 결제 처리는 다음 단계로 구성됩니다.

확정 트레이드
   --> 결제지시 생성(settlement instruction)
       - 상대방 결제 정보(SSI: Standing Settlement Instructions) 적용
   --> 지시 전송 (KSD 연계 / 글로벌은 커스터디안 경유 SWIFT)
   --> 매칭 상태 추적 (상대방 지시와 매칭 여부)
   --> 결제일 모니터링 (예정 vs 실제)
   --> 결제 완료 확인 --> 원장 기장 확정
   --> 실패 시: 결제 실패 처리 플로(후술)

SSI 마스터 데이터의 품질이 결제 STP(straight-through processing)율을 결정합니다. 상대방·통화·상품별 결제 계좌 정보가 틀려 있으면 그 거래는 반드시 수작업이 됩니다.

SWIFT 메시지 흐름 — MT와 MX

크로스보더 결제와 글로벌 커스터디 연계에는 SWIFT 메시지가 표준입니다. 증권 결제에서 자주 쓰는 메시지:

용도MT (기존)MX (ISO 20022)
증권 수령 지시 (대금 지급)MT541sese.023 (RvP)
증권 인도 지시 (대금 수령)MT543sese.023 (DvP)
결제 확인MT545 / MT547sese.025
상태/처리 통보MT548sese.024
잔고 보고MT535semt.002
거래 내역 보고MT536semt.017
고객 송금MT103pacs.008
은행간 자금 이체MT202pacs.009

흐름 예시 — 외화 채권을 글로벌 커스터디안을 통해 수령(RvP)하는 경우:

 자산운용/증권사 BO        글로벌 커스터디안           현지 CSD/서브커스터디안
       |                        |                          |
       |--- MT541 (수령지시) --->|                          |
       |                        |--- 현지 지시 변환 -------->|
       |                        |<-- 매칭/결제 상태 ---------|
       |<-- MT548 (상태통보) ----|                          |
       |<-- MT545 (결제확인) ----|     (결제 완료 시)         |
       |                        |                          |
       |<-- MT535 (잔고보고, EOD)|                          |

운영 포인트: MT 메시지는 필드가 느슨해서 기관마다 관행이 다릅니다. 같은 MT548이라도 상태 코드 사용 방식이 커스터디안마다 달라, 상대 기관별 파싱 규칙(온보딩 시 합의)이 필요합니다. ISO 20022 전환(증권 분야는 진행 중)은 이 문제를 구조화된 코드로 완화합니다.

원장 기장과 회계 연동

모든 트레이드는 최종적으로 회계 분개가 됩니다. 백오피스 시스템은 거래 이벤트를 회계 이벤트로 변환하는 포스팅 룰 엔진을 가집니다.

이벤트별 분개 예시 (주식 매수, 단순화):
  체결일(T):    (차) 미수증권     xxx   (대) 미지급금       xxx
  결제일(T+2):  (차) 보유증권     xxx   (대) 미수증권       xxx
               (차) 미지급금     xxx   (대) 현금(예탁금)    xxx
  EOD 평가:    (차/대) 평가손익  xxx   (대/차) 증권평가조정 xxx

설계 원칙:

  • 거래 시스템의 트레이드와 회계 분개는 1:N 매핑이고, 모든 분개에는 원천 거래 식별자가 남아야 합니다(drill-down 가능).
  • 포스팅 룰은 데이터로 관리: 상품·이벤트·계정 매핑을 코드에 하드코딩하면 신상품 출시마다 배포가 필요해집니다. 룰 테이블 + 버전 관리가 표준 접근입니다.
  • 일마감과 총계정원장(GL) 인터페이스: 백오피스 보조원장(sub-ledger)의 일계표가 GL로 넘어가고, 보조원장-GL 잔액 대사가 일배치로 돌아야 합니다.

코퍼레이트 액션 처리

배당, 무상증자, 액면분할, 합병, 콜/풋 행사 — 코퍼레이트 액션(CA)은 백오피스에서 가장 오류가 잦은 영역입니다.

  • 이벤트 수신: KSD/커스터디안/데이터 벤더로부터 CA 통지를 받습니다(SWIFT MT564 계열). 같은 이벤트가 여러 소스에서 다른 형태로 오기 때문에 **골든 레코드 생성(소스 간 대사)**이 첫 관문입니다.
  • 권리 계산: 기준일(record date) 시점 보유 수량에 비율을 적용합니다. 기준일 포지션 스냅숏의 정확성이 전부입니다. 대차(빌려준/빌린 주식) 포지션의 권리 귀속도 처리해야 합니다.
  • 선택형 이벤트(voluntary CA): 주주가 선택해야 하는 이벤트(유상청약, 전환 등)는 고객 의사 수집 → 마감 → 지시 전송의 워크플로와 마감 시한 관리가 필요합니다. 마감 시한을 놓치면 복구가 불가능한 대표적 업무라 알림과 에스컬레이션이 필수입니다.

장애가 곧 사고 — 결제 실패 대응 runbook

결제 실패(settlement fail)는 예정일에 증권 또는 대금이 이동하지 못한 상태입니다. 원인은 증권 부족(매도 측), 자금 부족, 지시 불일치, SSI 오류 등 다양합니다.

결제 실패 대응 runbook (요약):

1. 탐지 (결제일 당일, 가능한 한 이른 시각)
   - 결제 예정 vs 매칭/완료 상태 모니터링 대시보드
   - 미매칭 지시는 결제일 전부터 경보 (T+1 시점 미매칭 = 위험 신호)

2. 분류 (원인 코드)
   - 지시 불일치(UNMATCHED) / 증권 부족(LACK) / 자금 부족(MONY)
   - 상대방 사유 / 자사 사유 구분 — 책임 소재가 페널티와 직결

3. 즉시 조치
   - 지시 불일치: 상대방과 조건 재확인, 정정 지시 전송
   - 증권 부족: 대차(차입) 가능성 타진, 부분 결제(partial) 협의
   - 자금 부족: 자금부서 에스컬레이션, 일중 유동성 조달

4. 이해관계자 통보
   - 고객(기관) / 트레이딩 데스크 / 준법·리스크
   - 페일이 연쇄(체인)를 만드는 경우 후속 결제 영향 분석

5. 사후 처리
   - 페일 비용/페널티 정산 기록
   - 원인 분석 → SSI 정비, 프로세스 개선 항목 등록
   - 반복 상대방/반복 원인 리포트 (월간)

유럽 CSDR의 결제규율(페널티) 제도처럼 결제 실패에 금전 페널티를 부과하는 규제가 확산되어 왔기 때문에, 페일 모니터링은 비용 절감과 직결됩니다.

정합성 대사 배치 설계

백오피스의 심장은 대사(reconciliation)입니다. 최소 세 종류가 일배치로 돌아야 합니다.

  1. 포지션 대사: 내부 장부 vs 예탁기관/커스터디안 잔고(MT535)
  2. 현금 대사: 내부 현금 원장 vs 은행/커스터디안 계좌 명세(MT940/camt.053)
  3. 거래 대사: FO 시스템 vs BO 시스템의 당일 거래 (내부 시스템 간)
# 포지션 대사 배치의 골격 (개념 예시)
from collections import defaultdict
from decimal import Decimal

KEY = ("account_id", "instrument_id")  # 대사 키
TOLERANCE = Decimal("0")               # 포지션은 0 허용오차가 원칙

def reconcile(internal_rows, external_rows, as_of_date):
    internal = aggregate(internal_rows)   # key -> quantity
    external = aggregate(external_rows)
    breaks = []
    for key in internal.keys() | external.keys():
        iq = internal.get(key, Decimal("0"))
        eq = external.get(key, Decimal("0"))
        if abs(iq - eq) > TOLERANCE:
            breaks.append({
                "as_of": as_of_date,
                "key": key,
                "internal_qty": iq,
                "external_qty": eq,
                "diff": iq - eq,
                "classification": classify(key, iq, eq),  # 자동 원인 추정
            })
    return breaks

def classify(key, iq, eq):
    # 자동 분류 휴리스틱: 미결제 거래분, CA 처리 시차, 대차 미반영 등
    # 분류 불가는 UNKNOWN으로 남겨 사람이 조사
    ...

설계 원칙:

  • 대사는 스냅숏 기준: 양쪽 데이터의 기준 시점(as-of)이 일치해야 합니다. 내부는 마감 후, 외부는 전일 잔고 보고라면 그 시차에서 가짜 브레이크가 양산됩니다.
  • 자동 분류와 자동 해소: 알려진 패턴(미결제분 시차 등)은 자동 분류·자동 매칭하고, 사람은 미지의 브레이크에 집중하게 합니다. 단, 자동 해소 규칙 자체가 감사 대상이므로 규칙 변경 이력을 남깁니다.
  • 브레이크는 데이터로 관리: 위 브레이크 라이프사이클(탐지→배정→조사→해소→종결)을 테이블로 두고 에이징 리포트를 자동화합니다.

데이터 모델 스케치

+----------------+      +------------------+      +-------------------+
|    TRADE       |      | SETTLEMENT_      |      |   POSITION        |
+----------------+      | INSTRUCTION      |      +-------------------+
| trade_id PK    |--+   +------------------+      | account_id        |
| order_id FK    |  +-<-| trade_id FK      |      | instrument_id     |
| account_id     |      | si_id PK         |      | as_of_date        |
| instrument_id  |      | direction (R/D)  |      | quantity          |
| qty / price    |      | ssi_id FK        |      | cost_basis        |
| trade_date     |      | expected_date    |      | (일자별 스냅숏)     |
| settle_date    |      | matched_status   |      +-------------------+
| status         |      | settled_at       |
| version        |      +------------------+      +-------------------+
+----------------+                                |  RECON_BREAK      |
       |                +------------------+      +-------------------+
       +------------->  | POSTING (분개)    |      | break_id PK       |
                        +------------------+      | recon_type        |
                        | posting_id PK    |      | as_of_date        |
                        | trade_id FK      |      | key (acct/instr)  |
                        | event_type       |      | diff_amount       |
                        | debit_account    |      | status / aging    |
                        | credit_account   |      | assigned_to       |
                        | amount / ccy     |      | resolution_code   |
                        | posted_at        |      +-------------------+
                        +------------------+

트레이드 테이블에서 중요한 것은 버전 관리입니다. 정정(amend)·취소(cancel)는 기존 행 수정이 아니라 새 버전 행으로 쌓고, 항상 최신 유효 버전을 가리키는 뷰를 둡니다. 결제 지시·분개가 어느 트레이드 버전에서 생성됐는지 추적 가능해야 정정 처리의 정합성이 보장됩니다.

함정과 안티패턴

  • 체결일/결제일 혼동: 포지션을 "어느 기준으로" 보는지(trade-date position vs settle-date position)가 화면마다 다르면 모든 대사가 혼란에 빠집니다. 기준을 명시하고 양쪽 뷰를 의도적으로 제공하세요.
  • 마감 데이터 수정: 마감된 일자의 데이터를 직접 UPDATE하는 운영 관행은 회계 감사에서 치명적입니다. 정정은 항상 당일 반대 분개 + 재기장으로.
  • 수작업 SSI 관리: 결제 실패의 단골 원인. SSI 변경에 4-eyes 승인과 유효 기간을 두세요.
  • 대사 허용오차의 남용: 브레이크를 줄이려고 허용오차를 키우면 대사의 의미가 사라집니다. 포지션은 0 오차가 원칙입니다.
  • 상태 코드의 자유 입력: 브레이크 원인, 결제 실패 사유를 자유 텍스트로 받으면 통계와 자동화가 불가능해집니다. 코드 체계를 먼저 설계하세요.
  • CA 마감 시한의 수동 관리: 선택형 CA 마감을 달력과 사람 기억에 의존하는 구조는 언젠가 반드시 사고가 납니다.
  • 배치 의존 체인의 암묵화: 시세 수신 → 평가 → 분개 → GL 전송 → 대사의 순서 의존성이 문서에만 있고 스케줄러에 없으면, 지연 시 부분 실행으로 오염된 데이터가 만들어집니다.

구축 체크리스트

  • FO/MO/BO의 시스템 권한이 직무 분리 원칙에 따라 분리되어 있는가
  • 트레이드 모델이 정정·취소를 버전으로 관리하는가
  • 체결일 기준/결제일 기준 포지션이 명확히 구분되는가
  • EOD 평가의 시세 소스 우선순위와 평가 불능 예외 큐가 있는가
  • FO 추정 PnL과 BO 공식 PnL의 차이 설명 프로세스가 있는가
  • 컨펌/어펌이 전자화되어 있고 미확인 거래 에이징이 모니터링되는가
  • SSI가 마스터 데이터로 관리되고 변경에 승인 절차가 있는가
  • 결제 지시의 매칭 상태가 결제일 전부터 추적되는가
  • 결제 실패 runbook과 원인 코드 체계, 에스컬레이션 경로가 있는가
  • 포지션/현금/거래 대사가 일배치로 돌고 브레이크가 라이프사이클로 관리되는가
  • 분개가 원천 거래로 drill-down 가능하고 포스팅 룰이 데이터로 관리되는가
  • 보조원장-GL 잔액 대사가 자동화되어 있는가
  • CA 이벤트의 소스 간 대사와 선택형 마감 시한 알림이 있는가
  • 배치 의존성이 스케줄러(DAG)에 명시되어 있는가

마치며

백오피스 시스템의 가치는 평소에는 보이지 않습니다. 모든 것이 STP로 흘러가는 날에는 아무도 백오피스를 이야기하지 않습니다. 그러나 결제가 실패한 날, 대사가 깨진 날, 감사가 들어온 날 — 그날 조직을 지키는 것은 잘 설계된 데이터 모델, 불변 이력, 자동화된 대사, 그리고 준비된 runbook입니다. 트레이딩 시스템을 만든다면 화려한 프론트만큼, 아니 그보다 더, 데이터의 마지막 구간을 단단하게 만드시기 바랍니다.

참고 자료