#증권정보 실시간데이타 웹페이지에 구현

#거래소,코스닥,코넥스 호가,체결,거래원정보는 실시간으로 웹페이지에 표시되어야 한다.
- 대상단말 : 로그인되어 있는 사용자

1. 거래소 & Koscom데이타 -> RcvTData -> RcvQData -> Shared Memory
1.1 체결데이타 수신시, SendQData로 Ack신호
1.2 호가데이타 수신시, SendQData로 Ack신호
1.3 거래원데이타 수신시, SendQData로 Ack신호
1.4 지수데이타 수신시, SendQData로 Ack신호

2. Shared Memory -> SendQData(Ack신호를 받으면) -> WebSocket -> WebBrowser

Continue,

#증권정보 홈페이지 구성 단계별 데이타 처리과정

-Master
1. 거래소&Koscom -> RcvTData(Tcp) -> ReadQBatch -> Shared Memory(Kse,Kosdaq,Elw,Jisu,Konex Master), MySQL
2. 거래소&Koscom -> RcvTData(Tcp) -> ReadQFutureBatch -> Shared Memory(K200 Future Master), MySQL
3. 거래소&Koscom -> RcvTData(Tcp) -> ReadQOptionBatch -> Shared Memory(K200 Option Master), MySQL

-Chegyul,Hoga,Trade,Jongga,Jisu 등등
4. 거래소&Koscom -> RcvTData(Tcp) -> ReadQData -> Shared Memory(Kse,Kosdaq,Elw,Jisu,Konex)
5. 거래소&Koscom -> RcvTData(Tcp) -> ReadQFutureData -> Shared Memory(K200 Future)
6. 거래소&Koscom -> RcvTData(Tcp) -> ReadQOptionData -> Shared Memory(K200 Option)

7. Shared Memory(Kse,Kosdaq,Elw,Jisu,Konex) -> Jni -> Java -> jsp -> WebBrowser
- final sise, full jisu
8. Shared Memory(K200 Future) -> Jni -> Java -> jsp -> WebBrowser
- final sise
9. Shared Memory(K200 Option) -> Jni -> Java -> jsp -> WebBrowser
- final sise
10. Shared Memory(Common) -> Jni -> Java -> jsp -> WebBrowser
- final statistics

11. Shared Memory(Kse,Kosdaq,Elw,Jisu,Konex) -> SHELL -> MySQL -> Java -> jsp -> WebBrowser
- minute sise, minute jisu
12. Shared Memory(K200 Future) -> SHELL -> MySQL -> Java -> jsp -> WebBrowser
- minute sise
13. Shared Memory(K200 Option) -> SHELL -> MySQL -> Java -> jsp -> WebBrowser
- minute sise

 

#거래소 & Koscom 정보분배 데이타 수신및 처리

1. 전용선데이타인 경우(UDP)

RcvUData ->Queue -> ReadQData -> Shared Memory

Test)

SendUData 127.0.0.1 19511 /web/krx/KRX_202101210900.dat

2. 인터넷데이타인 경우(TCP)

RcvTData -> Queue -> ReadQData -> Shared Memory

Test)

SendTData 127.0.0.1 19511 /web/krx/KRX_202101210900.dat

3. 데이타수신 패킷업무

data.koscom.co.kr 에서 확인가능

- 유가

- 코스닥

- 코넥스

- 선물(지수선물,상품선물,주식선물등)

- 옵션(지수옵션,상품옵션,주식옵션등)

- 지수

- ELW

 

#증권정보홈페이지를 만들어보자(3)

 

#서버 Program Dir & File(백엔드)

 

1. batch

1.1 KseMast.c

1.2 KosdaqMast.c

1.3 KonexMast.c

1.4 ElwMast.c

1.5 FutureMast.c

1.6 OptionMast.c

1.7 DateTimeMast.c

 

2. rcv

2.1 RcvTData.c - TCP데이타 처리(인터넷)

2.2 RcvUdata.c - UDP데이타 처리(전용선)

2.3 ReadMData.c

2.4 R_Kse.c

2.5 R_Kosdaq.c

2.5 R_Konex.c

2.6 R_Elw.c

2.7 R_Future.c

2.8 R_Option.c

2.9 R_Jisu.c

 

3. manage

3.1 InsertMinJisu.c - 지수 1분시세(open,high,low,close,vol,amt,,,,,)

3.2 InsertMinSise.c - 종목 1분시세(open,high,low,close,vol,amt,,,,,)

3.3 CreateJisuCandle.c - 지수 Candle차트 데이타 생성

3.4 CreateSiseCandle.c - 종목 Candle차트 데이타 생성

 

4. view

 

5. shell

5.1 kill.sh

5.2 start.sh

5.3 main.sh - 정기적인 HTML을 생성(index.html, kse_totsise.html, kosdaq_totsise.html)

 

6. util

 

7. send

7.1 SendTData.c - TCP데이타 Simulation 전송

7.2 SendUData.c - UDP데이타 Simulation 전송

 

8. include

8.1 frame.h

8.2 define.h

8.3 packet.h

8.4 receive.h - 수신구조체

8.5 sise.h - 처리구조체

8.6 jisu.h - 처리구조체

8.7 shmop.h - Shared Memory 구조체

8.8 send.h - 데이타 Simulation 전송관련

 

 

#증권정보홈페이지를 만들어보자(2)

#증권정보홈페이지를 만들어보자(2)

 

1. OS구축

1.1 CentOS 6.6 설치

1.2 파티션정의

---------------------500기가 기준----------------------------------------------

swap(2,048)  -> 10,000
/boot(100)   ->  2,000(첫번째 파티션으로 만듦, 체크)
/(3,072)     -> 12,000
/usr(8,192)  -> 70,000
/usr2(90,000)-> 90,000
/var(4,096)  -> 12,000
/tmp(4,096)  -> 12,000
/data(70,000)-> 70,000
/home(2,000) ->  2,000
/web(나머지 부분을 할당, 체크)

---------------------500기가 기준----------------------------------------------

 

1.3. Group,User 생성

 

2.  네트웍설정
3.  TELNET설정
4.  FTP설정
5.  한글깨짐설정
6.  시간동기화
7.  gcc설치
8.  MySQL설치
9.  JDK설치
10. TOMCAT & APACHE설치

 

11. 백엔드설정(서버)

12. 프론트엔드설정(웹)

 

 

#1Minute 체결 데이타 저장과 생성

#1Minute 체결 데이타 저장과 생성

 

1. 1Minute체결데이타를 MySQL에 저장하는것으로 한다.

2. 저장하는 항목은 

{"date":1455710400,"high":0.00978987,"low":0.0089,"open":0.009716,"close":0.00933999,"volume":2860.36726244,"quoteVolume":307623.36565991,"weightedAverage":0.00929827}

 

2.1 date는 UnixTimestamp를 이용

2.2 high는 고가(메모리에 저장되어진 kse.high 이용)

2.3 low는 저가(메모리에 저장되어진 kse.low 이용)

2.4 open은 시가(메모리에 저장되어진 kse.open 이용)

2.5 close는 현재가(메모리에 저장되어진 kse.hyun 이용)

2.6 volume은 현재 체결량(메모리에 저장되어진 kse.hyunvol 이용)

2.7 quoteVolume은 누적된 체결량(메모리에 저장되어진 kse.vol 이용)

2.8 weightedAverage은 가중평균가(CLOSE 종목마감데이타, close.weight_avg -> kse.weight_avg이용)

2.9 종목마감데이타의 close.weight_avg는 실시간으로 수신된다. 종목시세처리시에 비교해서 close.weight_avg -> kse.weight_avg반영한다.

 

 

3. 저장이벤트시간

3.1 KRX지수는 2초혹은 10초간격으로 다양하게 산출되어서 수신되어진다.

3.2 장시작 지수의 시간이 "PREJJJ"가 오면 전체종목에 대해서 위의 항목을 저장한다.(SEQ:0)

     - systme(BEFOREMINSISESHELL)

3.3 HHMMSS/100*100=HHMMSS(1분)이면, 전체종목에 대해서 위의 항목을 저장한다.(SEQ:HHMMSS로 판단)

     - system(MINSISESHELL)

3.4 장마감 지수의 시간이 "JUNJJJ"가 오면 전체종목에 대해서 위의 항목을 저장한다.(SEQ:99999)

     - system(CLOSEMINSISESHELL)

 

4. 1Minute 체결 데이타 생성

     - 체결데이타의 생성시간은 사용자가 정의하면 된다.

     - 보통 Cron으로 1분에 한번(?)

4.1 전체종목을 읽어서 각 종목별로 파일이름을 생성후에 데이타를 JSON형식의 TXT파일로 저장한다.

4.2 예를들어, 삼성전자라면, KR7005930003.json 이다.

 

5. 저장디렉토리 구조

5.1 data/kse/*.json - 거래소종목

5.2 data/kosdaq/*.json - 코스닥종목

5.3 data/konex/*.json - 코넥스종목

5.4 data/future/*.json - K200지수 선물종목

5.5 data/option/*.json - K200지수 옵션종목

5.6 data/ksejisu/*.json - 거래소지수

5.7 data/kosdaqjisu/*.json - 코스닥지수

 

 

#거래소 & Koscom 정보분배 Tcp데이타 수신및 처리

 

1. 수신받는 쪽이 서버입니다.

    1.1 거래소 & Koscom은 데이타를 송신하는 역할을 합니다.

    1.2 Ack데이타가 없다.(무조건 수신만 받는 서버의 역할을 담당합니다.) 

    1.2.1 다른 서버&클라이언트 구조와 다르게, Ack데이타가 존재하지 않으므로 수신하는 서버의 하드웨어 스펙과
    수신프로그램의 성능이 중요합니다.

    1.2.2 송신프로그램에서 1000 Record 라는 데이타를 주었는데, 수신프로그램에서

    1000 Record 데이타를 수신 못한다면 수신서버는 제 역할을 못한다고 할수 있습니다.

    1.3 수신서버에서 데이타를 못받게된다면, 송신서버(거래소 & Koscom 정보분배)에서는
    Error를 결과값으로 받게됩니다.

    1.4 Error를 결과값으로 받게되면, 송신서버(거래소 & Koscom 정보분배)담당자는
    연락을 취하는경우가 보통입니다.

    1.5 간략하게 정리하자면, 송신서버(거래소 & Koscom 정보분배)에서는 send라는 함수만 사용하고

    1.6 수신서버에서는 recv함수만 사용하면 되는것입니다.

 

2. 수신받는 데이타가 하나의 레코드가 아닐수 있습니다.

    2.1 최소 1개 레코드에서 n개의 레코드가 될수 있습니다.(호가여러개, 혹은 호가와 체결이 결합되어진 여러개)

    2.2 물론 레코드와 레코드를 분리하는 방법은 수신패킷 내부에 포함되어 있습니다.

 

3. 레코드와 레코드 사이의 구별하는 패킷분리 인자가 보통 3개 존재합니다.

    3.1 0xff, 0x0d, 0x0a 3개의 char변수를 기반으로 분리합니다.

 

4. 레코드한개를 분리해서 처리하도록 합니다.

    4.1 여러개의 레코드에서 한개의 레코드를 추출해서, 처리를 합니다.

        4.1.1 호가 레코드, 1종목 처리

        4.1.2 체결 레코드, 1종목 처리

    4.2 추출한 레코드를 수신프로그램에서 동시에 처리하는것은 바람직 하지 않습니다.

        4.2.1 주로 Queue를 통해서 전송해서 Queue를 읽어들이는 처리프로그램을 따로 작성해야 합니다.

    4.3 Queue통해서 읽어들인 레코드는 주식로직을 통해서 처리합니다.

    4.4 주식로직에 대한 부분은 너무 방대하므로 여기서는 SKIP합니다.

    4.5 수신구조체가 필요합니다.

    4.6 처리구조체가 필요합니다.(수신된 데이타를 전부 보관하는건 비효율적이라고 생각합니다.)

    4.6.1 화면에서 필요한 데이타를 기획해서, 처리구조체를 정의하면 됩니다.

 

5. 처리되어진 데이타는 저장소에 보관합니다.(대량의 데이타이고 빠른 조회를 위해서 메모리 기반으로 많이 저장소를 선택합니다.)

    5.1 Shared Memory가 될수 있습니다.

    5.2 DataBase가 될수 있습니다.

    5.3 File가 될수 있습니다.

 

6. 저장되어진 데이타를 조합해서, 클라이언트로 보내주면,거래소 & Koscom 정보분배 Tcp데이타를 외부에서 볼수 있습니다.

    6.1 Web
    (Request & Response <-> Web Server <-> Was(Tomcat) <-> JNI <-> Jni FrameWork <-> Memory In Server)

    6.2 HTS

    6.3 MTS

 

7. 업무볼륨

    7.1 1-5번까지의 부분은 서버의 역할중에서 10%정도 볼륨이며

    7.2 5-6번까지의 부분이 나머지 90%의 역할을 담당합니다.

 

 

더욱 궁금한부분은 xterm92@naver.com으로 연락부탁드립니다.

 

 

증권사는 전용선을 통해서 UDP데이타를 수신하며

인터넷사업자 & 개인은 인터넷을 통한 TCP데이타를 수신받는다.

 

구축에 대한 문의는 xterm92@naver.com 으로 주세요.

+ Recent posts