Overview

yQuant의 여러가지 기능들 중에서 증권사 API 연계를 위해 윈도우의 DLL/OCX를 사용해야 하는 일부 기능(주가수신/주문요청)을 제외한 모든 기능들은 리눅스에서 동작합니다. 특히나 다수 종목의 주가를 분석하기 위해선 높은 연산능력이 요구되므로, 여러대의 컴퓨터를 클러스터로 구성해야 합니다. 다소 복잡한 클러스터 구성을 편리하고 탄력적으로 하기 위해 제법 오랜기간 동안 고민하고 공부했습니다.

CoreOS 설치

CoreOS는 말그대로 리눅스의 Core만으로 구성한 배포본으로, 기본 리소스 사용량이 적기 때문에 Docker Container를 Hosting하기에 가장 합리적인 선택입니다. 개발단계에서는 VirtualBox위에 가상머신으로 설치하기 위해 설치방법 참고했으며, 실제 서버에 설치하는 경우에도 설치방법은 동일합니다.

Docker 설치

CoreOS는 Container Linux라고 불리는 만큼, Docker는 기본적으로 설치되어 있으나, Docker-Compose는 별도로 설치해야 합니다. Docker Composer는 docker-compose.yaml 파일을 이용해서 컨테이너를 설정하고 실행하게끔 해주는 툴입니다.

설치방법은 공식문서에 있으나, CoreOS는 업그레이드를 용이하게 위한 시스템 정책의 일환으로 /usr 디렉토리가 read-only이기 때문에 설치 위치를 /opt/bin 디렉토리로 바꾸어야 합니다. /opt/bin 디렉토리는 기본적으로 생성되어 있지 않지만, PATH로 등록되어 있는 만큼, 안심하고 사용해도 됩니다. (참고로, Releases 페이지에서 최신 버전을 확인하여 아래 스크립트의 1.22.0-rc2 부분을 수정해야 합니다.)

sudo mkdir -p /opt/bin
sudo curl -L <https://github.com/docker/compose/releases/download/1.22.0-rc2/docker-compose-$(uname> -s)-$(uname -m) -o /opt/bin/docker-compose
sudo chmod +x  /opt/bin/docker-compose

Kafka 설치

단일 Kafka 브로커 또는 Docker Swarm을 통한 클러스터 구성을 간편하게 할 수 있도록 kafka-docker 이미지가 준비되어 있습니다.

git clone <https://github.com/wurstmeister/kafka-docker>

단일 Kafka 브로커 테스트를 위해 docker-compose-single-broker.yml 파일의 KAFKA_ADVERTISED_HOST_NAME 값을 수정하고 docker-compose를 실행하면, Kafka 뿐만 아니라 JDK부터 Zookeeper까지 필요한 모든 것을 다운받아 컨테이너로 구동시켜 줍니다.

cd kafka-docker
docker-compose -f docker-compose-single-broker.yml up -d

kafka-docker 이미지에는 별도의 Kafka 클라이언트를 설치하지 않고 테스트할 수 있도록 shell을 제공해 주는데, Kafka 브로커 IP와 Zookeeper IP/Port를 인자로 넘겨주어 실행하면 됩니다.

./start-kafka-shell.sh 192.168.100.87 192.168.100.87:2181

Kafka shell 내부에서는 Topic의 정보를 확인해볼 수 있습니다.

$KAFKA_HOME/bin/kafka-topics.sh --describe --topic test --zookeeper $ZK

테스트가 끝나고 docker-compose를 이용해 테스트를 종료합니다.

docker-compose stop