Skip to content

11.10(수) 데일리스크럼 & 회의록

nawhes edited this page Dec 2, 2021 · 1 revision

데일리스크럼 (11.10)

박세환

어제 한일

  • 깃 플로우 재가공
  • 프로젝트 아키텍처 회의
  • mongodb 설계

오늘 할일

  • Auctioneer 동작 기초

이슈

권구상

어제 한일

  • 프로젝트 시나리오 작성
  • 시나리오 구체화

오늘 할일

  • 유저 소켓 접속 시 필요한 기초 데이터 제공 API
  • 소켓 open, close message event 모듈화
  • 매수/매도 주문 전달 API 수정

이슈

김재현

어제

  • 프로젝트 시나리오 작성

오늘 할일

  • 소켓 API 구현

이슈

장민준

어제 한일

  • Auctioneer 서버 프로젝트 생성
  • Mongoose 의존성 추가

오늘 할일

  • 거래체결 로직 구현

이슈

  • 파일 중복 문제

시스템

우선순위

  • 가격 > 시간 > 수량 > 위탁 (레퍼런스)
    • 시간외 거래, 위탁 거래가 없으므로 수량, 위탁은 고려할 필요 없음
    • 주문에 트리거하여 처리되므로 가격 > 시간 우선순위도 지켜짐

주문 프론트 프로세스 (API 서버) :3000

매수 주문

(트랜잭션 시작)

  1. 주문 발행자의 잔고가 주문 금액보다 부족하면 주문이 생성되지 않는다.
  2. 잔고가 충분할 경우 주문 발행자의 잔고를 주문 금액만큼 낮춘다. (트랜잭션 끝)
  3. 주문처리 프로세스에 매수 주문이 발생했음을 알린다.

매도 주문

(트랜잭션 시작)

  1. 주문 발행자의 보유 수량이 주문 수량보다 부족하면 주문이 생성되지 않는다.
  2. 보유 수량이 충분할 경우 주문 발행자의 보유 수량을 주문 수량만큼 낮춘다.
    • 유저_보유종목 테이블의 해당 유저의 보유 수량 = 보유 수량 - 주문 수량
    • 주문 테이블의 amount(주문 수량), value(주문 금액), type(매수/매도), status(취소, 결제 성사 여부), create_at(주문 발생 시간(매우 중요)) 초기화 후 insert

(트랜잭션 끝) 3. 주문처리 프로세스에 매도 주문이 발생했음을 알린다. - 어떤 종목의 매도 주문인지 알린다.

거래체결시스템

주문 체결 프로세스 (체결 서버) :3500

체결서버가 분봉을 업데이트 하는 방법

  • 00초에 종목 테이블의 price_low, price_high price_start, price_end 초기화
  • 59.99초에 종목 테이블의 데이터를 mongoDB로 insert

API 서버로부터 주문이 발생했음을 확인했을 때 수행한다.

매수 주문

  1. 가장 낮은 금액의 매도 주문을 확인한다.(가격 우선의 원칙)
    • 매도 주문이 여러개일 경우 시간순으로 처리한다.(시간 우선의 원칙)
      • (트랜잭션 시작)
      • 주문이 체결될 경우
        • 매수주문자의 보유 수량을 반영한다. (보유수량+ 주문수량-)
        • 주문의 주문 수량을 반영한다.
        • 매도주문자의 잔고를 반영한다.
        • mongoDB에 거래체결을 반영한다.
        • mysql의 거래 종목에 거래량, 거래금액을 반영한다.
          • mysql trigger
          • volume = volume + 거래량;
          • price_low = Math.min(price_low, 거래금액);
          • price_high = Math.high(price_high, 거래금액);
          • price_end = 거래금액;
          • if (price_start == 0) price_start = 거래금액;
      • (트랜잭션 끝)
  2. 주문 금액보다 낮은 금액의 매도 주문이 없을 때까지 1번 프로세스를 반복한다.

매도 주문

  1. 가장 높은 금액의 매수 주문을 확인한다.(가격 우선의 원칙)
    • 매수 주문이 여러개일 경우 시간순으로 처리한다.(시간 우선의 원칙)
      • (트랜잭션 시작)
      • 주문이 체결될 경우
        • 매도주문자의 잔고를 반영한다.
        • 주문의 주문 수량을 반영한다.
        • 매수주문자의 보유 수량을 반영한다. (보유수량+ 주문수량-)
        • mongoDB에 거래체결을 반영한다.
        • mysql의 거래 종목에 거래량, 거래금액을 반영한다.
          • mysql trigger
          • volume = volume + 거래량;
          • priceLow = Math.min(priceLow, 거래금액);
          • priceHigh = Math.high(priceHigh, 거래금액);
          • priceEnd = 거래금액;
          • if (priceStart == 0) priceStart = 거래금액;
      • (트랜잭션 끝)
  2. 주문 금액보다 높은 금액의 매수 주문이 없을 때까지 1번 프로세스를 반복한다.
Clone this wiki locally