#거래소 & 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 으로 주세요.



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

https://finance.naver.com/ 

 

네이버 금융

국내 해외 증시 지수, 시장지표, 펀드, 뉴스, 증권사 리서치 등 제공

finance.naver.com

 

동일한 데이타를 보여주는 증권정보홈페이지를 만들어보자

 

1. 준비

1.1 벡엔드 언어:c, Java, Shell Script(Free)

1.2 프론트엔드언어:Java,Jsp,JavaScript,Css,HTML(Free)

1.3 OS : CentOS 6.0(Free)

1.4 DataBase : MySQL(Free)

 

2. 거래소 정보분배에서 TCP데이타 받기(체결,호가등등)

2.1 수신 구조체정의

2.2 소켓프로그램 작성(서버)
     - udp 데이타수신시(증권사,전용선일경우)
     - tcp 데이타 수신시(인터넷포탈,등등)

 

3. 받은 데이타를 메모리(Shared Memory), DB에 저장하기

3.1 저장 구조체정의

3.2 Shared Memory에 저장

3.3 DB에 저장

 

4. 프론트엔드에서 호출할 so파일 생성하기

4.1 호출구조체정의

4.2 so 라이브러리 작성(JAVA에서는 System(IPC등)에 직접 접근할수 없기때문에, c언어로 작성되어진 DLL함수를 통해서 데이타에 접근해야 한다)

4.3 JNI 호출(서버단)

 

5. 프론트엔드 작업하기

5.1 기획및 페이지 디자인

5.2 Java Server Page 작성

5.2 JNI 호출(클라이언트단)

 

6. 웹 브라우져로 테스트

6.1 www.suksu.kr(가칭, 실제구축하게 된다면) 접속시에 홈페이지가 정상으로 호출되는지 체크

 
실제 Web화면 예)
1. 종목정보(005930) - 2016년도 데이타 이용


2. 상승율상위종목 - 2016년도 데이타 이용


위에 대해서 궁금하시면 xterm92@naver.com 으로 연락주시면 상세히 설명드리겠습니다.

 

 

xterm92@naver.com 으로 문의주세요.

+ Recent posts