자본시장과 결제 · 시장 시간과 규제가 시스템에 남기는 흔적 · 이론
시장 시간이 배치 스케줄을 지배한다
한 줄 요약
증권 시스템의 배치 스케줄·로그 형식·보존 기간은 엔지니어가 고른 것이 아니라 시장 운영 시간과 규제가 정한 것이고, 그것을 모르면 "이 배치를 30분 미루면 안 되나요" 같은 제안을 하게 된다.
왜 이게 필요했나
증권사에 들어가서 배치 스케줄 표를 처음 보면 이상하게 촘촘합니다. 08:30, 08:40, 09:00, 15:20, 15:30, 15:40, 16:00 에 무언가가 몰려 있고 그 사이는 비어 있습니다. 서버 부하를 고르게 펴자는 제안은 자연스럽지만, 그 제안이 통하지 않는 이유가 있습니다.
시각 하나하나가 시장 규칙에 붙어 있기 때문입니다.
08:30~09:00 장 시작 동시호가. 주문을 받되 체결은 하지 않는다09:00 정규장 개시. 첫 체결이 쏟아진다15:20~15:30 장 마감 동시호가. 종가를 정하는 구간15:30 정규장 종료15:40~16:00 시간외 종가 매매장 종료 후 청산·결제 지시, 잔고 확정, 보고 파일 생성동시호가는 특히 중요합니다. 이 구간에는 주문을 계속 받지만 체결시키지 않고 모아 두었다가, 마감 시각에 한 번에 하나의 가격으로 체결시킵니다. 시스템 입장에서 이것은 주문 접수 부하와 체결 부하가 시간적으로 분리됐다가 한 지점에 몰린다는 뜻입니다. 09:00:00 과 15:30:00 에 초당 처리량이 평소의 수십 배로 뜁니다. 용량 산정을 평균으로 하면 이 두 지점에서 무너집니다.
그리고 이 시각들은 협상 대상이 아닙니다. 15:30 에 확정돼야 하는 종가는 15:31 에 확정되면 그날의 모든 파생상품 정산가가 틀어집니다. "배치를 30분 미루자" 는 제안이 통하지 않는 이유입니다.
어떻게 동작하나
서킷브레이커와 변동성완화장치(VI) 는 시스템 부하 관점에서 특히 성가신 존재입니다. 지수가 일정 폭 이상 떨어지면 거래가 몇 분간 멈추고, 개별 종목의 가격이 급변하면 그 종목만 짧게 단일가로 전환됩니다.
부하 관점에서 무슨 일이 일어나는가 하면 이렇습니다. 멈춘 동안 주문은 계속 들어와 큐에 쌓이고, 재개 시각에 그것이 한꺼번에 풀립니다. 평소 피크의 몇 배가 한 지점에 몰리는데, 그 시점은 예측할 수 없습니다. 그래서 증권 시스템의 용량 산정은 "정상 피크의 몇 배" 를 여유로 잡는 것이 관행이고, 그 여유를 낭비라고 판단해 줄이면 서킷브레이커가 걸린 날에 대가를 치릅니다.
주문 기록 보존 의무. 자본시장법과 하위 규정은 주문·체결 기록을 정해진 기간(대개 10년) 보존하도록 요구합니다. 이것이 시스템에 남기는 흔적은 단순히 "디스크를 많이 쓴다" 가 아닙니다.
원본 그대로 보존해야 한다 가공한 것으로 대체할 수 없다. 그래서 정규화된 테이블과 원본 로그가 둘 다 남는다변경 이력이 남아야 한다 덮어쓰기가 아니라 append 로 쌓는 구조가 된다조회 가능해야 한다 분쟁이나 조사에서 특정 주문을 꺼내야 하므로 아카이브에도 색인이 필요하다조사할 때 이것이 유리하게 작용합니다. 다른 도메인에서는 이미 지워졌을 원본이 증권에서는 대개 남아 있습니다. 상태 필드를 믿지 말고 원본에서 다시 만들라는 조언이 실행 가능한 이유가 이 보존 의무 덕분입니다.
시장 감시(이상거래 탐지)가 로그 형식을 규정합니다. 감시 시스템은 특정 계좌가 특정 종목의 호가를 반복적으로 냈다 취소했는지, 종가 무렵에 집중적으로 주문을 냈는지 같은 패턴을 봅니다. 이런 것을 보려면 취소된 주문도, 체결되지 않은 호가도 전부 남아 있어야 합니다. 그래서 "어차피 취소된 주문이니 로그에서 빼자" 는 최적화가 증권에서는 불가능합니다. 계좌 식별자·주문 시각·정정 이력이 필수 필드로 박혀 있는 것도 감시 요구 때문입니다.
현장에서 만나는 모습
한 곳에서 주문 로그의 보존 비용을 줄이려고 체결되지 않고 취소된 주문을 90일 뒤 삭제하는 정책을 넣었습니다. 감사에서 지적을 받고 되돌렸는데, 되돌릴 때 이미 지운 것은 복구되지 않았습니다. 되돌릴 수 없는 최적화를 규제 영역에 넣기 전에는 반드시 컴플라이언스에 먼저 물어야 합니다. 이 판단은 엔지니어 혼자 내릴 수 있는 종류가 아닙니다.
또 하나, 해외 거래소를 연동하면 시장마다 시간대와 휴장일이 다릅니다. 한국 휴장일에 미국 시장은 열려 있고 반대도 마찬가지입니다. 여기서 흔한 사고가 서버의 로컬 시간대로 날짜를 자르는 것입니다. UTC 자정을 기준으로 하루를 자르면 한국 기준 하루와 어긋나서, 장 마감 직후의 체결이 다음 날 배치에 들어갑니다. 그날의 집계와 다음 날의 집계가 둘 다 틀리고, 합계는 맞아서 대사에서도 잡히지 않습니다. 날짜 경계는 시장의 영업일 기준으로 명시해야 합니다.
다음 퀴즈에서 확인할 것
동시호가가 부하에 미치는 영향, 서킷브레이커 재개 시점의 큐 해소, 보존 의무가 데이터 구조에 남기는 흔적, 시장 감시가 로그 형식을 규정하는 방식, 그리고 시간대와 영업일 경계를 다루는 방법을 확인합니다.