twirp : 간단한 RPC 프레임워크

GHTS 2020. 9. 29. 22:42 Posted by 정직한 UnHa Kim

GHTS가 RPC에 사용하는 nanomsg 관련 코드는 AST(Ahnlab Safe Transaction : 안랩 세이프 트랜잭션)에서  악성코드라고 오진하는 문제가 있어서 HTTP 기반의 RPC를 사용해서 오진을 피해야겠다고 생각하고 있었다.

그러나, 귀차니즘으로 인해 오랜 기간 미적대면서 시간이 흐르던 와중에

사용하기 쉬운 HTTP 기반 RPC 프레임워크를 발견했다.

 

github.com/twitchtv/twirp

 

twitchtv/twirp

A simple RPC framework with protobuf service definitions - twitchtv/twirp

github.com

 

트위치TV에서 대규모로 사용 중이라고 하니 안정성도 검증되었다고 봐야하고,

HTTP 1.1도 지원하니 프로그래밍 언어 간 호환성도 좋을 것 같다.

 

소개 문서를 읽고 있는 데 왠지 마음에 든다.

조만간에 nanomsg에서 twirp로 이전을 시도해 봐야겠다.

댓글을 달아 주세요

HTTP/2는 알고보니 RPC프레임워크 이었다.

GHTS 2019. 10. 12. 15:58 Posted by 정직한 UnHa Kim

HTTP는 문자열에 기반한 요청과 응답이 1:1 대응되는 프로토콜로만 알고 있었는 데,

뒤늦게 HTTP 2.0에 대해 알아보니,

바이너리에 기반한 M:N의 양방향 RPC프로토콜로 변해있었다.

 

참고 : https://developers.google.com/web/fundamentals/performance/http2

 

GHTS에서 API호출 프로세스와 나노메시지(nanomsg)를 RPC프레임워크로 사용하고 있다.

 

애초에는 zeroMQ를 사용했으나,

zeroMQ가 C++기반이라서 컴파일이 너무 느려서 개발 작업에 많은 방해가 되던 차에

nanomsg는 zeroMQ와 비슷한 기능을 가지면서도,

Go언어 구현체인 go-mangos의 존재 덕분에 컴파일 속도가 확연히 빨라져서,

개발 속도 향상에 많은 도움을 받았으며 그간 나름 만족스럽게 사용하고 있었다.

 

그러나, nanomsg는,

- 적은 수의 개발자

- 충분히 증명되지 않은 안정성

- 충분히 증명되지 않은 최적화

등의 문제로 인해서 찜찜한 면이 있었다.

 

HTTP/2는 구글의 SPDY를 토대로 수많은 수정과 초안을 거치며 규격이 정해진 데다가,

여러 인터넷 기업에서 사용되면서 안정성과 최적화 문제가 자연스럽게 해결된 상태인데다가,

Go언어 표준라이브러리에 포함되어 있기에 컴파일 속도까지 향상되므로,

여러모로 유리할 것 같아서,

RPC프레임워크를 nanomsg에서 HTTP/2로 바꾸는 게 낫겠다는 생각을 하게 되었다.

 

물론, 구글에서 gRPC라고 HTTP/2기반의 RPC프레임워크를 공개해 놨지만,

protocol buffer로 자료 변환을 하는 방식이 오히려 불편하게 느껴져서,

gRPC는 현 상황에서는 불필요한 복잡성만 도입하는 듯 하여 고려 대상에서 제외했다.

 

HTTP/2에 기반한 간단한 양방향 호출 예제는 h2conn을 참고하였다.

 

https://github.com/posener/h2conn

 

정말 단순하게 IPC를 실행하는 게 감동적이었다.

 

h2conn 예제는 json, gob 인코딩을 사용해서 문자열을 주고 받도록 되어 있는 데,

encoding/binary 패키지를 사용해서 바이너리 데이터를 주고받도록 변경하면,

그 즉시 RPC프레임워크로 바로 사용할 수 있을 듯 하다.

 

 

 

댓글을 달아 주세요

어제, 오늘, 금일, 당일, 전일.

GHTS 2019. 10. 10. 12:17 Posted by 정직한 UnHa Kim

간단한 용어이지만 혼동을 유발하는 경우가 있어서 메모해 놓는다.

 

금일, 어제는 주말, 공휴일등 모든 일자를 포함해서 지칭하지만,

 

주식매매에서 '당일', '전일'은 증시 개장일만 고려해서 지칭한다.

 

 

금일 : 오늘 

 

당일 : 가장 최근 영업일.

 

금일이 개장일이면 '당일 == 금일'이다.

 

금일이 (주말, 공휴일 기타 이유로) 개장일이 아니면 '당일 != 금일'(!!)이므로 주의를 요한다.

 

 

전일 : 당일 이전 가장 최근 영업일.

 

이것도 일자 상으로 어제와 전일이 다른 경우가 종종 있다.

 

만약, 오늘, 어제 모두 개장일이었다면, '전일 == 어제' 이다.

 

그러나, 만약 오늘은 개장했지만, 어제는 공휴일이었고, 그저께 개장일이었다면,

 

'전일 == 그제'가 된다.

 

만약, 중간에 연휴가 끼어있었다면?? -> 연휴 이전 마지막 개장일이 전일이 된다.

 

 

간단하지만 혼동되는 용어라서 정리를 해 보았다.

 

 

댓글을 달아 주세요

과거 기업 재무정보

데이터 분석 2019. 8. 28. 11:49 Posted by 정직한 UnHa Kim

매매전략의 백테스트를 위해서 과거 재무정보가 필요할 경우에

 

데이터 가공 판매 업체를 이용하면 편리하다.

 

비록, 유료이긴 하지만,

 

전자공시 사이트에 들어가서 재무정보를 수집하는 데 필요한 노력을 감안하면,

 

어느 정도 수긍이 가는 가격이다.

 

 

fnguide는 굉장히 까다로운 조건을 내걸어서 포기.

 

(fnguide 데이터는 엑셀에서만 써야 한다!?. R이나 파이썬으로 보낼 수가 없다.)

 

세종데이터에서 데이터를 구매했다.

 

https://sejongdata.co.kr/

 

세종기업데이터 - Sejong Data

기업정보 제공 서비스, 대한민국 모든 상장 기업의 20년간의 재무정보를 확인하세요.

sejongdata.co.kr

 

단점은 제공되는 데이터의 종류가 적으며(상장주식수/매출액/영업이익/순이익 단 4가지(!)),

 

특히, 영업현금흐름 데이터가 제공되지 않는다는 점은 많이 아쉽다.

 

그리고, 금융회사의 재무정보는 제공되지 않는다는 점도 유의해야 한다.

 

 

그러나, 연도별 데이터는 20년치 데이터가 제공되고,

 

분기별 데이터는 6년치가 제공되는 데다가,

 

이메일로 문의를 하면 아주 빠르게 대응을 해 줘서 일반적인 백테스트 용도로는 상당히 쓸만하다.

'데이터 분석' 카테고리의 다른 글

과거 기업 재무정보  (0) 2019.08.28
R언어 POSIXct 형의 변환 코드  (0) 2019.08.01
Jupyter Notebook 셀 분할/병합 단축키  (0) 2019.08.01
R용 Jupyter NoteBook 설치  (0) 2019.07.27
Tensorflow 설치  (0) 2018.12.11
R 언어 첫 인상  (0) 2015.10.01

댓글을 달아 주세요

PER/PBR/PSR/PCR 공식

프로그래밍 2019. 8. 28. 11:46 Posted by 정직한 UnHa Kim

나중에 다시 찾아보게 될 것 같아서 기록해 둔다.

 

PBR = 주가 / 주당순자산 = 주가 / (자본 / 주식수량) = (주가 * 주식수량) / 자본 = 시가총액 / 자본

 

PER = 주가 / 주당순이익 = 주가 / (순이익 / 주식수량) = (주가 * 주식수량) / 순이익 = 시가총액 / 순이익

 

PSR = 주가 / 주당매출액 = 주가 / (매출액 / 주식수량) = (주가 * 주식수량) / 매출액 = 시가총액 / 매출액

 

PCR = 주가 / 주당영업현금흐름 = ...(상동)... = 시가총액 / 영업현금흐름

댓글을 달아 주세요

할 수 있다! 퀀트 투자

책 리뷰 2019. 8. 28. 11:43 Posted by 정직한 UnHa Kim

 

 

표지 디자인이 뭔가 잘못된 느낌이지만, 책 내용은 알차다.

 

주식 매매전략을 크게 방어형 전략, 공격형 전략으로 분류하고,

 

다시 세부적으로 밸류/수익성/우량주/모멘텀 및 짬뽕 전략으로 분류해서,

 

각각의 대표적인 사례를 보여준다.

 

1권만 읽어도 대략적인 개요는 알 것 같은 느낌이고,

 

추가적인 전략을 찾고자 하는 이들을 위해서 <What works on Wall Street.> 라는 책을 소개해 놨다.

 

중장기 투자전략 위주이며, 소형주 전략 위주인 점은 약점이겠지만,

 

일반인이 쉽게 따라할 수 있으면서도 효과적인 전략 위주로 소개하다보니 그렇게 된 듯 하다.

 

개인적으로는 대만족.

 

'책 리뷰' 카테고리의 다른 글

할 수 있다! 퀀트 투자  (0) 2019.08.28
R for Data Science  (0) 2019.07.30
월스트리트 퀀트 투자의 법칙  (0) 2019.07.27
Wicket in Action  (0) 2018.06.07
Learning DCOM  (0) 2017.08.31
파이썬으로 배우는 알고리즘 트레이딩  (0) 2017.08.24

댓글을 달아 주세요

부동소수점 계산 결과 비교.

프로그래밍 2019. 8. 15. 15:06 Posted by 정직한 UnHa Kim

R에서 개발한 전략을 Go로 포팅하려고 할 때,

 

최종 결과값이 서로 다르게 나오면, 

 

계산 과정의 중간값을 비교하면서 오류가 발생한 부분을 찾는 작업이 필요한 데,

 

R과 Go는 같은 공식에서도 부동소수점 연산 결과가 정말 미세하게 다르게 나오는 관계로,

 

직접 비교하기 곤란한 경우가 종종 발생한다.

 

예> 미세한 차이로 인해서,  조건문에서 판단이 다르게 나오는 경우.

 

 

그럴 경우 쓸 수 있는 팁 몇 가지를 기록해 둔다.

 

(나중에 나 스스로 다시 봐야할 것 같은 느낌. 인간의 망각의 동물이더라..)

 

1. 반올림 해서 미세한 값이 차이는 없애버린다.

 

2. 크게 변하지 않는 값의 경우에는 테스트할 동안 상수로 고정시켜 버린다.

 

3. R의 중간값 계산결과를 csv로 저장한 후, Go에서 csv로 불러들여서 대체해 버린다.

 

가장 확실한 방법은 3번인 것 같다.

 

예를 들면, A -> B -> C의 과정을 거쳐서 계산을 하는 경우,

 

C 계산 결과가 뭔가 이상하다고 느껴지는 데,

 

원인이 A에 있는 지, B에 있는 지 명확하지 않을 경우,

 

A과정을 R의 계산값으로 대체시켜 버린 후 B의 계산값을 비교하고,

 

B과정을 R의 계산값으로 대체시켜 버린 후 C의 계산값을 비교하면,

 

어디에서 포팅 오류가 있는 지 확인할 수 있다.

 

알고보면 간단한 데, 생각이 안 날 때는 온갖 고생을 겪게 되는 미세한 팁.

 

 

 

 

  

 

 

댓글을 달아 주세요

R언어 POSIXct 형의 변환 코드

데이터 분석 2019. 8. 1. 13:27 Posted by 정직한 UnHa Kim

R에서 시간을 나타내는 자료형 몇 가지 중 자주 사용되는 POSIXct의 경우

 

세부 정보를 추출할 때 사용되는 코드는 다음과 같다.

 

Code Meaning Code Meaning
%a Abbreviated weekday %A Full weekday
%b Abbreviated month %B Full month
%c Locale-specific date and time %d Decimal date
%H Decimal hours (24 hour) %I Decimal hours (12 hour)
%j Decimal day of the year %m Decimal month
%M Decimal minute %p Locale-specific AM/PM
%S Decimal second %U Decimal week of the year (starting on Sunday)
%w Decimal Weekday (0=Sunday) %W Decimal week of the year (starting on Monday)
%x Locale-specific Date %X Locale-specific Time
%y 2-digit year %Y 4-digit year
%z Offset from GMT %Z Time zone (character)

 

사용법

format(POSIXct값 , format='<변환코드>')

 

출처 : https://www.stat.berkeley.edu/~s133/dates.html

'데이터 분석' 카테고리의 다른 글

과거 기업 재무정보  (0) 2019.08.28
R언어 POSIXct 형의 변환 코드  (0) 2019.08.01
Jupyter Notebook 셀 분할/병합 단축키  (0) 2019.08.01
R용 Jupyter NoteBook 설치  (0) 2019.07.27
Tensorflow 설치  (0) 2018.12.11
R 언어 첫 인상  (0) 2015.10.01

댓글을 달아 주세요

Jupyter Notebook 셀 분할/병합 단축키

데이터 분석 2019. 8. 1. 11:55 Posted by 정직한 UnHa Kim

셀 분할 : <Ctrl+Shift+'-'>

 

셀 병합

- 병합할 셀 다중선택 : <Shift+(화살표 위아래)>

- 선택된 셀 병합 : <Shift+M>

 

Jupyter는 1줄을 따로 실행하는 게 귀찮은 문제가 있는 반면,

RStudio는 코드 블록을 실행할 때마다 해당 코드 블록을 선택해줘야 하는 게 귀찮은 문제가 있다.

 

Jupyter로 1줄씩 별도의 셀로 분할한 후, 필요하면 병합하는 방법이 해결책이 될까??

'데이터 분석' 카테고리의 다른 글

과거 기업 재무정보  (0) 2019.08.28
R언어 POSIXct 형의 변환 코드  (0) 2019.08.01
Jupyter Notebook 셀 분할/병합 단축키  (0) 2019.08.01
R용 Jupyter NoteBook 설치  (0) 2019.07.27
Tensorflow 설치  (0) 2018.12.11
R 언어 첫 인상  (0) 2015.10.01

댓글을 달아 주세요

R for Data Science

책 리뷰 2019. 7. 30. 13:07 Posted by 정직한 UnHa Kim

 

R의 대표적 IDE(통합개발환경)인 RStudio를 개발한 회사의 수석 연구원인,

 

해들리 위컴(Hadley Wickham, 발음이 틀릴 수 있음)이 지은 책.

 

해들리 위컴은 R의 사용을 편리하게 하는 수많은 패키지(예 : ggplot2, tidyr, dplyr, stringr, lubridate등등..)을 개발했으며,

 

자신이 개발한 모듈을 사용해서 데이터 분석을 간편하게 하는 방법을 알려주기 위해 책까지 펴냈다.

 

다음 링크에 가면 온라인에서 무료로 읽을 수 있다.

 

https://r4ds.had.co.nz/

 

R 코어만으로는 불편해서 못 써먹겠다고 느낀 분들은

 

이 책을 읽고난 후 몇몇 패키지로 보완된 R은 무척 편리하다고 느끼게 될 것이다.

 

R코어의 불편한 subset은 dplyr의 filter로 대체하고,

 

R코어의 불편한 Date기능은 lubridate로 대체하는 등,

 

R코어의 불편하다고 생각되는 점은 모두 다 갈아엎어서 편리하게 만들어 놨다.

 

특히, 파이프(%>%)를 사용한 순차적 데이터 처리 구문은 가독성에서 독보적이라고 생각한다.

 

다만, 국내에서 R이 대세로 자리잡지는 못한 상태이라서 한글 번역 서적이 있는 지는 모르겠다.

 

 

 

 

 

'책 리뷰' 카테고리의 다른 글

할 수 있다! 퀀트 투자  (0) 2019.08.28
R for Data Science  (0) 2019.07.30
월스트리트 퀀트 투자의 법칙  (0) 2019.07.27
Wicket in Action  (0) 2018.06.07
Learning DCOM  (0) 2017.08.31
파이썬으로 배우는 알고리즘 트레이딩  (0) 2017.08.24

댓글을 달아 주세요