13.증권 거래소
대규모 시스템 설계 기초 2nd 13장을 요약한 내용입니다.
온라인 증권 거래 시스템 설계
1단계: 문제 이해 및 설계 범위 확정
비기능 요구사항
가용성: 최소 99.99%. 거래소의 가용성은 매우 중요한 문제. 단 몇 초의 장애로도 평판이 손상 가능
결함 내성: 프로덕션 장애의 파급을 줄이려면 결함 내성과 빠른 복구 메커니즘이 필요
지연 시간: 왕복 지연 시간은 밀리초 수준이어야 함(특히 p99(ppth 백분위수) 지연 시간이 중요)
왕복 지연 시간은 주문이 거래소에 들어오는 순간부터 주문의 체결 사실이 반환되는 시점까지
p99 지연 시간이 계속 높으면 일부 사용자의 거래소 이용 경험이 아주 나빠짐.
보안: 거래소는 계정 관리 시스템을 갖춰야 함.
새 계좌 개설 전 사용자 신원 확인을 위한 KYC 확인 수행
시장 데이터가 포함된 웹 페이지 등 공개 자원의 경우 DDoS 공격을 방지하는 장지 구비 필요
계략적 규모 추정
시스템 규모를 이해하기 위한 몇 가지의 간단한 계산
100가지 주식
하루 10억 건의 주문
뉴욕증권거래소는 일요일부터 금요일까지, 오전 9시 30분부터 오후 4시까지 영업. (총 6.5시간)
QPS: 10억 / (6.5시간 x 3600) = ~43,000
최대 QPS: 5 * QPS = 2150,000. 거래량은 장 시작 직후, 그리고 장 마감 직전에 훨씬 높음
2단계: 개략적 설계안 제시 및 동의 구하기
거래소 설계에 도움될만한 기본 개념과 용어
브로커
대부분 개인 고객은 브로커 시스템을 통해 거래소와 거래
ex. 하나증권 등의 중권사가 브로커에 해당
기관 고객
기관 고객은 전문 증권 거래 소프트웨어를 사용하여 대량으로 거래
기관 고객마다 거래 시스템에 대한 요구사항이 다름
아주 낮은 응답 시간으로 거래하길 희망
지정가 주문
가격이 고정된 매수 또는 매도 주문
시장가 주문과 달리 체결이 즉시 이루어지지 않을 수 있고, 부분적으로만 체결될 수 있음
시장가 주문
가격을 지정하지 않는 주문, 시장가로 즉시 체결
체결은 보장되나 비용 면에서 손해를 볼 수 있음
급변하는 특정 시장 상황에서 유용
시장 데이터 수준
미국 주식시장에는 L1, L2, L3의 세 가지 가격 정보 등급이 있다(Level)
L1 시장 데이터에는 최고 매수 호가, 매도 호가 및 수량이 포함
최고 매수 호가는 구매자가 주식에 지불할 의사가 있는 최고 가격
매도 호가는 매도자가 주식을 팔고자 하는 최저 가격

L2에는 더 많은 수준의 가격 정보가 제공
깊이는 체결을 기다리는 물량의 호가를 어디까지 보여 주는지

L3는 L2에서 한 걸음 더 나아가, 각 주문 가격에 체결을 기다리는 물량 정보까지 보여

봉 차트
특정 기간 동안의 주기
하나의 봉 막대로 일정 시간 간격 동안 시장의 시작가, 종가, 최고가, 최저가를 표시
일반적으로 지원되는 시간 간격은 1분, 5분, 1시간, 1일, 1주일, 1개월

FIX
Financial Information Exchange Protocol
금융 정보 교환 프로토콜로 증권 거래 정보 교환을 위한 기업 중립적 통신 프로토콜
FIX로 인코딩한 증권 거래의 사례

개략적 설계안

👉🏻 거래 흐름을 통해 하나의 주문이 어떤 절차로 처리될까?
1 단계: 고객이 브로커의 웹 또는 모바일 앱을 통해 주문
2 단계: 브로커가 주문을 거래소에 전송
3 단계: 주문이 클라이언트 게이트웨이를 통해 거래소로 들어감.
클라이언트 게이트웨이는 입력 유효성 검사, 속도 제한, 인증, 정규화 등 기본적인 게이트키핑 기능을 수행
그 후 주문 관리자에게 전달
4~5단계: 주문 관리자가 위험 관리자가 설정한 규칙에 따라 위험성 점검을 수행
6단계: 위험성 점검 과정을 통과한 주문에 대해, 주문 관리자는 지갑에 주문처리 자금이 충분한지 확인
7~9단계: 주문이 체결 엔진으로 전송.
체결 가능 주문이 발견되면 체결 엔진은 매수 측과 매도 측에 각각 하나씩 두 개의 집행 기록을 생성
10~14 단계: 주문 집행 사실을 클라이언트에 전송
👉🏻 시장 데이터 흐름을 따라서, 하나의 주문이 체결 엔진부터 데이터 서비스를 거쳐 브로커로 전달되어 집행되기까지의 과정
M1 단계: 체결 엔진은 주문이 체결되면 집행 기록 스트림(또는 충족 기록 스트림)을 만듦
이 스트림은 시장 데이터 게시 서비스로 전송
M2 단계: 시장 데이터 게시 서비스는 집행 기록 및 주문 스트림에서 얻은 데이터를 시장 데이터로 사용하여 봉 차트와 호가 창을 구성
그 다음 시장 데이터를 데이터 서비스로 보냄
M3 단계: 시장 데이터는 실시간 분석 전용 스토리지에 저장
브로커는 데이터 서비스를 통해 실시간 시장 데이터를 읽음
브로커는 이 시장 데이터를 고객에게 전달
👉🏻 보고 흐름
R1~R2 단계(보고 흐름): 보고 서비스는 주문 및 실행 기록에서 보고에 필요한 모든 필드의 값을 모든 다음 그 값을 종합해 만든 레코드를 데이터베이스에 기록
거래 흐름(1~14까지의 단계)은 중요 경로를 따라 진행되지만 시장 데이터 흐름이나 보고 흐름은 그렇지 않음
이제 세 가지 흐름 각각을 더 자세히 살펴보자.
거래 흐름
거래 흐름은 거래소의 중요 경로상에서 진행. 모든 것은 신속하게 진행되어야 한다.
거래 흐름의 핵심은 체결 엔진
✅ 체결 엔진
체결 엔진(matching engine)은 교차 엔진(cross engine)이라고도 한다.
체결 엔진의 주요 역할
(1) 각 주식 심벌에 대한 주문서 내지 호가 창을 유지 관리
주문서 또는 호가 창은 특정 주식에 대한 매수 및 매도 주문 목록
(2) 매수 주문과 매도 주문을 연결
주문 체결 결과로 두 개의 집행 기록이 생성(매수 1건, 매도 1건)
체결은 빠르고 신속하게 처리
(3) 집행 기록 스트림을 시장 데이터로 배포
✅ 시퀀서
체결 엔진을 결정론적으로 만드는 핵심 구성 요소
시퀀서는 체결 엔진에 주문을 전달하기 전에 순서 ID를 붙여 전송
또한, 체결 엔진이 처리를 끝낸 모든 집행 기록 쌍에도 순서 ID를 붙임
시퀀서에는 입력 시퀀서, 출력 시퀀서 두 가지가 있으며, 각각 고유한 순서를 유지
시퀀서가 만드는 순서 ID는 누락된 항목을 쉽게 발견할 수 있는 일련번호

입력 주문과 출력 실행 명령에 순서 ID를 찍는 이유
(1) 시의성(timeliness) 및 공정성(fairness)
(2) 빠른 복구(recovery) 및 재생(replay)
(3) 정확한 1회 실행 보증(exactly-once guarantee)
시퀀서는 순서 ID만 생성하는 것이 아니며, 메시지 큐 역할도 함
하나는 체결 엔진에 메시지(수신된 주문)를 보내는 큐 역할
다른 하나는 주문 관리자에게 메시지(집행 기록)를 회신하는 큐 역할
✅ 주문 관리자
주문 관리자는 한쪽에서는 주문을 받고 다른 쪽에서는 집행 기록을 받는다.
주문 상태를 관리하는 역할
클라이언트 게이트웨이를 통해 주문을 수신하고 다음을 실행
종합적 위험 점검 담당 컴포넌트에 주문을 보내어 위험성을 검토
위험 점검 규칙은 단순(ex. 사용자의 거래량이 하루 100만 달러 미만인지 확인)
사용자의 지갑에 거래를 처리하기에 충분한 자금이 있는지 확인
주문을 시퀀서에 전달
해당 주문에 순서 ID를 찍고 체결 엔진에 보내어 처리
메시지 크기를 줄이기 위해 주문 관리자는 필요한 속성만 전송
주문 관리자는 시퀀서를 통해 체결 엔진으로부터 집행 기록을 받는다.
주문 관리자는 체결된 주문에 대해 집행 기록을
클라이언트 게이트웨이를 통해 브로커에 반환
✅ 클라이언트 게이트웨이
클라이언트 게이트웨이는 거래소의 문지기
클라이언트의 주문을 받아 주문 관리자에게 전송
클라이언트 게이트웨이 구성요소

중요 경로상에 놓이며, 지연 시간에 민감하므로 가벼워야 함
가능한 한 빨리 올바른 목적지로 주문을 전달
복잡한 기능이라면 체결 엔진이나 위험 점검 컴포넌트에 맡겨야 함
고객 유형별(개인/기관) 클라이언트 게이트웨이는 다양하다.
주요 고려 사항은 지연 시간, 거래량, 보안 요구사항
거래소에 연결된 다양한 클라이언트 게이트웨이

✅ 시장 데이터 흐름
시장 데이터 게시 서비스(Market Data Publisher, MDP)는 체결 엔진에서 집행 기록을 수신하고 집행 기록 스트림에서 호가 창과 봉 차트를 만들어 낸다.
호가 창과 봉 차트를 통칭하여 시장 데이터라고 한다.
시장 데이터는 데이터 서비스로 전송되어 해당 서비스의 구독자가 사용할 수 있게 된다.
MDP의 구현과, 다른 구성 요소와의 조화
✅ 보고 흐름
거래소에서 필수적인 부분 가운데 하나는 보고(reporting)
보고 서비스는 거래의 중요 경로상에 있지는 않지만 여전히 시스템의 중요한 부분
거래 이력, 세금 보고, 규정 준수 여부 보고, 결산 등의 기능을 제공
효율성과 짧은 지연 시간보다 정확성과 규정 준수가 핵심
입력으로 들어오는 주문과 그 결과로 나가는 집행 기록 모두에서 정보를 모아 속성들을 구성하는 것이 일반적 관행
두 가지 출처에서 오는 정보를 잘 병합하여 보고서를 생성
보고 흐름의 구성 요소가 서로 어떻게 결합되는지
3단계: 상세 설계
4단계: 마무리
요약
Last updated

