tvheadend Docker Container 자동실행

이번에 Intel NUC을 한대 들였습니다. TDP가 10W 밖에 안되는 J5005 CPU가 탑재되어 있어, 전기요금 부담은 적을겁니다. 그동안 NAS로 써왔던 라즈베리와 Odroid C2와는 작별입니다. 덕분에 Synology 사용자들이 주로 사용하는 tvheadend를 간편하게 설치할 수 있는 Docker 이미지를 사용하게 되었습니다. 그동안 써왔던 라즈베리나 Odroid C2는 ARM64 아키텍처라 쓸 수가 없었거든요. 그래서 컨테이너를 생성하는 방법과, systemd로 tvheadend 서비스를 등록해 NAS 부팅시 자동으로 실행하는 절차를 간단히 기록하고자 합니다. Docker Container 생성 IPTV의 데이터는 IGMP로 전송되기 때문에, 네트워크는 host 방식으로 설정해야 합니다. »

Author image Yoonbae Cho

Redis를 Configuration Store로 활용하기

Redis는 키-값 형태의 데이터를 메모리에 저장하는 데이터베이스입니다. 메모리에 데이터를 저장하기 때문에 속도가 무척 빠른 것이 장점입니다. 물론 메모리 가격이 SSD나 HDD 보다는 훨씬 비싸기 때문에 대용량의 데이터를 저장하기에는 적합하지 않습니다. Configuration Store 최근 Redis를 설정값 저장공간으로 사용하는 아이디어가 떠올라 구현을 시작했습니다. 예를들어 ZeroMQ의 Publisher 노드의 접속정보와 같은 설정을 Redis에 저장해 놓으면, 여러대의 컴퓨터에 설정파일을 배포하는 번거로운 절차가 사라질겁니다. 각각의 컴퓨터는 Redis에 등록된 설정을 그때그때 가져오기만 하면 되는거죠. ZooKeeper 책을 읽으면서 든 생각입니다. »

Author image Yoonbae Cho

ZeroMQ 테스팅툴 zmqc 소스코드 컴파일 (Windows 10)

개요 2년전, ZeroMQ를 처음 접했던 시절 Publish와 Subscribe 테스트를 위해 직접 Python으로 테스팅툴을 직접 만들어 썼던 기억이 있습니다. 네트워크를 이용한 분산처리를 하다보면 테스트가 다소 불편하기 때문에 커맨드라인에서 각종 소켓을 생성해 표준 입력(stdin)으로 메시지를 보내거나, 받은 메시지를 표준출력(stdout)으로 확인하는 정도의 기능을 하는 툴이 꼭 필요하거든요. 최근 nanomsg를 기웃거리다 보니, nanocat라는 유틸리티가 기본적으로 제공되고 있었습니다. ZeroMQ에서도 유사한 툴이 있겠다 싶어 GitHub을 찾아보니, Publish/Subscribe 외에도 Push/Pull 등 여러가지 프로토콜을 지원하는 Python 프로젝트가 있었고, 이를 Go로 포팅한 프로젝트가 눈길을 끌었습니다. »

Author image Yoonbae Cho

ZeroMQ 4.2.5 소스코드 컴파일 (Windows 10)

ZeroMQ는 Publish/Subscribe, Request/Respond 등의 프로토콜을 구현하는 경량 메시징큐 라이브러리입니다. 리눅스에서는 apm이나 yum과 같은 패키지 인스톨러를 통해서 간단히 설치할 수 있지만, 윈도우에서는 최신 버전이 바이너리로 제공되지 않기 때문에 직접 소스코드를 컴파일해야 합니다. 준비 ZeroMQ 다운로드 GitHub에서 최신 버전의 zip 파일을 받아 임의 폴더에 임시로 압축을 해지합니다. 여기서는 C:\zeromq-4.2.5 폴더로 가정한다. CMake 설치 CMake 최신 버전의 x64 인스톨러를 받아 설치합니다. CMake는 과거 Makefile이 갖는 복잡하고 번거로운 절차를 줄여주는 것이 주된 기능인데, 여기서는 단일한 소스코드를 여러가지 플랫폼에서 컴파일하게 도와주는 역할을 합니다. »

Author image Yoonbae Cho

파이썬 3.7의 asyncio.run()

파이썬 3.7이 출시되었습니다. 다양한 개선사항 중에서도 눈에 띄는 것은, 드디어 코루틴을 간편하게 쓸 수 있는 asyncio.run() 함수. 그동안 이벤트 루프 만든다고 코드가 지저분했는데, 이제 무척 깔끔해졌습니다. import asyncio async def hello_world(): print("Hello World!") asyncio. »

Author image Yoonbae Cho

자동 주식거래 시스템의 메시지 처리

자동 주식거래 시스템의 메시지 국내 2천여 종목의 거래체결 데이터는 하루 천만건이 넘습니다. 그야말로 빅데이터의 전형이죠. 자동 주식거래 시스템은 천만건의 빅데이터를 실시간으로 분석해 주가의 방향을 예측해 배팅해야 합니다. 시스템의 성패는 최종적으로 돈을 벌 수 있는 매매전략의 보유여부로 귀결되지만, 당장 밑바닥부터 시스템을 설계하고 구현하는 개발자의 입장에선 과연 천만건의 데이터를 적시에 처리할 수 있느냐가 1차 관문입니다. 메시징 시스템의 종류 시장의 거래체결 데이터, 증권사에 요청할 매매주문 데이터는 사실 단위 시스템간에 주고받는 메시지입니다. 메시지는 자동 주식거래 시스템의 시작과 끝이며, 이를 처리하는 메시징 시스템은 전체 시스템 관점에서 봤을때 척추와 같은 가장 중요한 역할을 담당합니다. »

Author image Yoonbae Cho

CoreOS, Docker, Kafka 설치하기

Overview yQuant의 여러가지 기능들 중에서 증권사 API 연계를 위해 윈도우의 DLL/OCX를 사용해야 하는 일부 기능(주가수신/주문요청)을 제외한 모든 기능들은 리눅스에서 동작합니다. 특히나 다수 종목의 주가를 분석하기 위해선 높은 연산능력이 요구되므로, 여러대의 컴퓨터를 클러스터로 구성해야 합니다. 다소 복잡한 클러스터 구성을 편리하고 탄력적으로 하기 위해 제법 오랜기간 동안 고민하고 공부했습니다. CoreOS 설치 CoreOS는 말그대로 리눅스의 Core만으로 구성한 배포본으로, 기본 리소스 사용량이 적기 때문에 Docker Container를 Hosting하기에 가장 합리적인 선택입니다. 개발단계에서는 VirtualBox위에 가상머신으로 설치하기 위해 설치방법 참고했으며, 실제 서버에 설치하는 경우에도 설치방법은 동일합니다. »

Author image Yoonbae Cho

putty로 ssh 접속시 비밀번호 생략하기

Overview 접속할 ssh 서버에 공개키를 사전에 등록해 놓으면, ssh 서버는 접속을 요청한 클라이언트가 제시한 비밀키로 인증하는 개념입니다. 한번 해두면 너무나 편리한데, 노트북에 윈도우를 새로 설치하는 경우에나 가끔 하다보니 할때마다 기억이 안나서 간략히 정리했습니다. 1. 공개키/비밀키 만들기 PuTTY Key Generator (PuTTYgen)을 이용해 비밀키를 만들어 id_rsa.ppk 파일로 저장 (참고로, id_rsa.ppk 파일에는 공개키도 함께 들어있음) 2. PuTTY 접속정보에 ppk 파일 지정 PuTTY 실행 후 Connection > SSH > Auth 화면에서 Private Key file for authentication: 항목에 전 단계에서 만든 id_rsa. »

Author image Yoonbae Cho

시계열 데이터베이스, InfluxDB 도입

도입 배경 시간에 따라서 달라지는 주가와 같은 데이터를 시계열 데이터(Time Series)라 하는데, 대표적인 시계열 데이터가 바로 주가입니다. 실제로 한국거래소(KRX)에서 하루에 거래되는 2천여 종목의 매매체결 데이터는 하루에만 보통 900만건에서 1,000만건에 달합니다. 이처럼 방대하고 다양한 금융 데이터를 한곳에 효율적으로 저장해 놓아야 향후 매매전략 수립을 위한 백테스트를 한결 편리하게 수행할 수 있을 겁니다. 따라서, MySQL 같은 전통적인 RDBMS나, MongoDB NoSQL가 아닌, 시계열 데이터를 위한 데이터베이스 찾아보았는데, 최근 가장 각광받는 InfluxDB를 도입하기로 했습니다. 구글의 Go 언어로 작성되어 속도가 빠르며, 라이브러리 의존성이 없어 설치가 간편하기 때문이죠. »

Author image Yoonbae Cho

종목코드 가져오기

https://github.com/yoonbae81/yQuant.StockData KRX에서 종목코드를 가져오는 Python 코드를 Clojure로 컨버전했습니다. KRX의 동작방식은 OTP를 먼저 발급받고, 이를 POST로 다시 보내면 JSON 형태의 자료를 보내줍니다. 유가증권과 ETF를 별도로 제공하고 있는데, Redis에 아래와 같은 형태로 저장합니다. a. Symbol hash > HGETALL symbol:275280 name KODEX MSCI모멘텀 market kospi fullcode KR7275280006 b. KOSPI/KOSDAQ set > SMEMBERS kospi: symbol:001440 symbol:005450 . .> SMEMBERS kosdaq: symbol:0134780 symbol:0217500 . . c. ETF set > SMEMBERS etf: symbol:0292110 symbol:0143850 . . »

Author image Yoonbae Cho