High frequency 매매를 지향하다보니 최소한 스윙을 하려고 하는데요, 그래서 틱데이터를 크롤링할 필요성을 느꼈습니다. 대략적인 개발 단계는 다음과 같습니다.
1. 키움 API를 통해 체결데이터, 호가데이터를 실시간 구독하여 sqlite3 db로 저장하는 프로그램 구축
-> 24시간 컴퓨터를 켜두기는 싫고, 그렇다고 매일 9시에 일어나 컴퓨터를 켜서 프로그램을 돌리기는 싫어서 이를 AWS EC2를 활용하여 클라우드에 띄우기로 결정
2. 만들어놓은 프로그램을 AWS EC2상에서 구동 가능하도록 EC2 환경을 세팅
-> 키움 API의 경우 새벽 시간에 점검을 하는데, 이때 연결이 끊겨서 24시간 돌려놓아도 프로그램이 팅기는 현상 발생
3. Windows Scheduler를 사용하여 매일 오전 8시에 프로그램 가동, 오후 5시에 프로그램 종료할 수 있도록 함.
-> AWS 프리 티어를 사용하다보니 드라이브 용량이 딸려서 계속 sqlite3로 구축해서 EC2 서버 안에 넣을 수는 없다는 생각이 듬.
4. AWS RDS를 사용하여 클라우드 DB를 구축하고, EC2에서 가동시킨 크롤러가 자동으로 RDS에 데이터를 업로드할 수 있도록 세팅
정도로 만들어 두었습니다. 하나하나 만드는데 생각보다 많은 시간이 걸렸는데요, 혹시나 이 글을 참고하시는 분들 중 제가 겪었던 문제들에 막혀계신 분들도 있을 것 같아 간략한 Trouble Shooting을 적어보겠습니다.
1. 키움 API를 활용할 때는 기본적으로 32bit 환경을 사용하여야 합니다. python 자체를 32bit로 깔아도 되지만, ananconda를 사용하신다면 anaconda 내에서 32bit 가상환경을 만들어서 그 안에서 세팅하면 편합니다. 가상환경을 만드셨다면 python에 접속해서 import platform / print(platform.architecture())를 통해 32bit 환경이 제대로 운용되고 있는지 확인해보면 좋습니다. 접근 권한 또한 관리자 권한으로 하여야 API를 사용할 수 있습니다. Pyqt5 관련한 에러는 pyqt5를 재설치하면 대부분 해결되었던 것 같습니다. 키움openapi관련한 에러는 koa studio에서 키움openapi 접속을 직접 해보고, 된다면 다른 곳에서 문제가 생긴 거지만 되지 않는다면 키움 openapi를 다시 깔면 해결됩니다. 라이브러리를 설치할 때 주의할 점은 32bit 가상환경 내에 설치되는지 확인하여야 합니다. (activate '가상환경 이름' 해주고 설치해야 설치됩니다.)
2. EC2 상에서 구동 가능하도록 세팅하는 것은 그리 어렵지 않습니다.
3. 스케줄러를 사용해서 프로그램을 가동할 때, python 파일 자체를 가동하면 conda를 통하지 않아서 그런지 에러가 많이 납니다. 따라서 .bat 파일을 통해 conda를 스케줄러로 직접 가동하고, conda 내에서 가상환경에 접속한 후 python 파일을 열어주는 것이 가장 쉽게 스케줄러를 사용하는 방법입니다. (여기서도 정말 많이 헤맸습니다.)
4. RDS를 사용하여 클라우드 DB를 구축하는 과정은 나동빈님의 유튜브(클라우드 서버 만들기?)를 참고하면 정말 간단합니다. 그러나 public 접근금지를 막고 나서 본인 컴퓨터에서 db에 접속하려고 할 때 보안그룹 설정에서 인바운드 규칙에 본인의 public ip를 추가하여야 합니다. 유튜브에 보면 SSH를 통해 ec2 서버로 접속해서 해당 서버 권한으로 rds에 접속하는 것 같던데, 제 경우에는 왜 그런지 모르겠지만 접속이 계속 되지 않았는데 rds 보안그룹(rds가 속한 VPC의 보안그룹이어야 합니다!!)의 인바운드 규칙을 수정해주고 나니 해결되었습니다.
즉, 지금 구축해놓은 단계를 요약하자면
전혀 손대지 않아도 알아서 크롤링 & DB에 인서트 & 본인 컴퓨터에서 DB에 쉽게 접근 가능
정도로 요약할 수 있을 것 같습니다.
혹시 다른 문제를 겪고 계시다면 댓글로 남겨주시면 Trouble Shooting 도와드리도록 하겠습니다!
댓글 없음:
댓글 쓰기