주문 및 체결 시스템의 알고리즘을 구현하였습니다.
체결 알고리즘은 사용자가 주문을 넣었을 때 즉시 매칭하여 체결하는 역할을 수행하고 있습니다.
주요 목표는 다음과 같습니다:
- 실시간 주문 매칭: 빠르고 정확한 주문 체결.
- 주문 및 계정 상태 관리: 체결 또는 취소된 주문에 따른 자산 상태 업데이트.
- 다양한 매매 케이스 처리: 지정가/시장가, 부분 체결, 잔여 주문 등 다양한 시나리오 지원.
- 데이터 일관성 유지: 여러 주문이 동시에 처리되더라도 데이터 무결성 보장.
기술적 도전과 해결 방법
1. 실시간 주문 매칭
- 도전 과제:
- 주문이 들어올 때마다 즉시 매칭하여 체결해야 했습니다. 특히 시장가 주문은 우선적으로 체결되어야 하며, 이 과정에서 처리 속도가 중요한 성능 요소로 작용했습니다.
- 해결 방법:
- Redis의 **정렬된 집합(Sorted Set)**을 활용하여 주문을 우선순위에 따라 정렬했습니다.
- 시장가 주문에는 높은 우선순위를 부여하여 즉시 매칭이 가능하도록 설계했습니다.
- 지정가 주문은 매칭 조건이 충족될 때까지 대기 상태로 유지되었습니다.
2. 주문 및 계정 상태 관리
- 도전 과제:
- 체결 시 주문 상태를 정확히 관리하고, 사용자 계정의 현금 및 보유 자산 상태를 업데이트하는 것이 중요했습니다.
- 특히, 부분 체결의 경우 체결된 수량과 남은 수량을 정확히 계산해야 했습니다.
- 해결 방법:
- 주문 상태를
PENDING
, PARTIALLY_FILLED
, COMPLETED
로 구분하여 체계적으로 관리했습니다.
- 체결 시 주문 상태를 업데이트하고, 계정의 잔액 및 보유 자산 상태를 동기화했습니다.
- 이러한 상태 관리 로직을 통해 사용자가 자신의 자산 상태를 정확히 확인할 수 있도록 보장했습니다.
3. 주문 취소 처리
- 도전 과제:
- 사용자가 주문을 취소했을 때 계정 잔액과 보유 자산을 원래 상태로 되돌려야 했습니다.