본문 바로가기
AutoBot

업비트 자동매매 - Upbit Auto Trading No.11 (서버셋팅 및 스크립트)

by zemba 2022. 2. 11.
반응형
SMALL

안녕하세요 Zemba입니다~
오늘은 서버 세팅에 대해서 포스팅을 하려고 합니다. 이전 포스팅에서 코드에 대한 작성내용들은 이미 되었으니 이제 작성한 코드를 24시간 돌아갈 수 있도록 서버에 세팅을 해줘야 합니다. 그래서 저희가 원하는 대로 동작이 되어 코드는 더 이상 건드리지 않고 경과의 알림만 받을 수 있도록 서버에 코드를 올려 실행시키려고 합니다. ㅎ

우선 그럼 서버란 무엇이냐? 서버는 그냥 컴퓨터라고 보시면 되요ㅎ 거창한 게 아닙니다. 컴퓨터를 어딘가에서 계속 수행하기 위한 것이라고 생각하면 되는데 지금 사용 중인 데스크톱도 서버 용도로 사용할 수 있습니다. 서버라기보다는 이 코드를 수행시킬 머신이라고 이해하시면 좀 더 접근이 편할 것 같습니다. 그래서 라즈베리파이든, 노트북이든, 클라우드 VM이든 어딘가에서 24시간 돌릴 수 있는 환경에 설정을 하시면 됩니다. 저는 집에 아이들이 있기 때문에 라즈베리파이가 있지만 언제 박살이 날지 몰라서......ㅎㅎ 클라우드 VM을 사용하기로 했습니다.

클라우드 서버는 각 제공되는 플랫폼마다 공짜의 영역이 있기때문에 그런 부분들은 참고하시면 좋을 것 같습니다.
저는 구글 클라우드에 1대, 아마존 AWS에 1대 이렇게 하나씩 만들어 두었습니다. 윈도우를 사용하실 분은 이 포스팅을 참고하시면 좋을 것 같습니다 ㅎㅎ( 참고 : https://zemba.tistory.com/10)

 

AWS에 Windows Server VM 생성

이번 포스팅은 AWS를 사용하여 Windows VM을 생성해볼 예정입니다. AWS는 비용이 나가지 않냐고 하시는 분들이 계실 수도 있겠지만 프리티어의 경우에 한 달에 750시간 동안 제공되고 750 시간이 넘을

zemba.tistory.com

링크는 윈도우인데 이번 서버는 Linux 기반으로 설치할 예정입니다. Window를 설치한 VM은 제가 나중에 코인 자동화가 끝나면 주식 자동화도 진행할 예정이어서 우선적으로 서버 환경을 구성해두었습니다. ㅎㅎ 저희는 Linux(Ubuntu 18.04 LTS) 기반의 서버가 설치되어있다는 가정으로 필요한 부분들을 말씀드리려고 합니다. ( 대부분의 서버 설치 등 OS 설치는 구글링 하면 많이 나옵니다. ㅎㅎ)

우선 이 앞선 포스팅에서까지 작성한 코드를 github에 Repository를 등록하여 사용하고 서버에서 Clone하여 업데이트를 지속적으로 반영이 쉽도록 구축을 하려고 했습니다. 그래서 우선 서버에 접속하여 git clone을 통하여 경로를 먼저 지정해 줍니다.

저는 user home 디렉토리에 clone을 하여 git 저장소를 당겨 왔습니다. 이제 코드를 수행하기 위해서는 모듈들에 대해서 설치가 한번 필요합니다. 저희가 코드 작성을 할 때는 IDE툴이나 자동으로 설치가 되는 툴을 사용하기 때문에 설치 과정이 자동으로 진행되었을 경우가 있지만 서버는 우선 깡통이라고 보시면 됩니다. 그렇기 때문에 pyupbit나 pandas 등의 lib들을 별도로 설치를 해줘야 합니다.

 python의 어떤 Feature한개의 필요한 모듈 등을 설치할 때는 별도의 파일로 관리하고 설치 시 정리된 파일 단위로 설치를 진행하면 한 번에 해당 Feature의 연관된 모듈을 모두 설치가 가능합니다. 하지만 python이 설치된 곳에 전역적으로 모듈을 적용하지 않고 가상 환경에서만 사용되는 라이브러리를 사용하기 위해서 우선 venv환경을 설치를 하고 그 내부에 모듈을 설치하고자 합니다.

sudo apt-get install python3-venv

위 코드로 우선 venv를 설치하고 나서 git clone 된 경로로 이동해서 다음과 같이 실행해줍니다.

python -m venv venv
source venv/bin/activate

이렇게 venv의 폴더가 생겼고 해당 내부에 activate를 실행해주면 가상 환경이 구축된다고 볼 수 있습니다.

venv 적용된 환경

이제 거의 다 됐습니다 ㅎㅎ 이제 가상 환경의 class path에 적용될 모듈들을 적용하려 합니다.

pip install -r requirements.txt

이렇게 requirements.txt 등 파일에 관련 모듈과 버전 정보를 기입해두면 위 명령어를 통해서 모듈을 한 번에 설치가 진행이 가능합니다.
저희 코드에는 텔레그램, 업비트, pandas 등 모듈을 사용해야 하기 때문에 버전 정보들을 기입해두었다고 보면 됩니다.
설치가 잘 안 될 경우에는 명령어 수행한 결과를 보시면 어떤 이유로 설치가 안되었는지에 대해서 설명을 해주기 때문에 그 부분을 찾아서 해결하면 됩니다. 최초에 가장 많이 발생하는 오류는 pip upgrade에 대한 부분이 자주 발생하더라고요 ㅎㅎ 그렇기 때문에 pip update는 먼저 진행하고 설치하는 게 좋을 것 같습니다.

pip install --upgrade pip

업그레이드가 필요하다고 오류가 발생하면 위 명령어를 사용하여 pip를 upgrade 한 다음에 설치하면 됩니다.

설치가 완료되면 이제 저희가 기존에 start.sh 파일을 사용해서 우리가 만든 코드를 수행시키는 것이 목적이기 때문에 start.sh의 파일내용을 우선 공유드리고 설명드리겠습니다.

#/bin/bash

pkill -9 -ef python
git stash;git fetch;git pull;git stash clear
chmod 755 ./start.sh
source venv/bin/activate;
nohup python -u main.py > ./logs/trade_log.log 2>&1 &

우선 기존에 수행되고 있는 python 애플리케이션을 모두 강제 종료 처리합니다. ( 저희는 서버에 이 코드만 돌아간다는 가정입니다!!! 다른 거 돌아가고 있는데 죽이면 큰일 납니다 ㅋㅋ) 그리고 저희가 git을 clone 하여 업데이트를 하기 때문에 별도로 서버에서 작업이나 뭔가 수정이 발생할 수 있는 것들을 좀 돌려버리고 최신의 코드로 적용하려고 git stash와 git pull을 통해 코드를 최신화를 적용합니다.

그다음에 start.sh를 실행 가능한 파일로 권한을 부여하여 실행합니다. 그다음에 아까 가상 환경을 적용한 activate를 수행시켜 가상 환경에서 수행되도록 적용합니다. 그리고 마지막 코드는 main.py가 자동매매의 start 코드의 파일이기 때문에 해당 파일을 실행하게 합니다.
파이썬을 수행하면서 발생한 관련 log들은 trade_log.log파일에 저장을 하여 수행 중에 문제가 있는지를 확인하도록 적용을 하고 & 키워드를 사용하여 백그라운드에서 수행되도록 적용합니다. ( 백그라운드 실행을 하지 않으면 python 실행하고 나서 종료시키지 않으면 별도의 명령을 입력할 수 없습니다. 별도의 shell을 열던지 해야 하지만 그냥 백그라운드 수행을 하는 것을 추천드립니다. ㅎㅎ)

이제 파일도 저장했으니까 수행시켜 잘 동작하는지 확인하면 됩니다.

./start.sh

정상적으로 수행이 되었다면 저희가 연동해둔 텔레그램의 Bot으로 메시지가 날아올 것입니다. ㅎㅎ

정상 수행이 된 모습

네 텔레그램에 메시지를 잘 받았으면 완료된 것입니다. 가끔 오류가 있어서 메시지가 계속 전달이 될 수 있는 문제가 있지만 그 부분은 강제로 종료를 하고 오류를 찾아서 수정하면 문제가 없을 것 같습니다. 저희는 60분 봉 기준으로 동작하기 때문에 내부적으로 1시간에 한 번씩 수행되도록 적용해두었습니다. 1시간마다 보유한 코인을 모니터링하면서 판단에 의해 거래를 자동으로 진행하게 됩니다. 저희가 로그를 logs에 trade_log.log에 저장하기로 했으니까 로그를 확인하려면 아래와 같이 명령어를 사용하면 로그를 확인할 수 있습니다.

tail -1000f ./logs/trade_log.log

로그를 확인하고 문제가 없는 경우 그냥 지금부터는 두시면 됩니다 ㅋㅋㅋㅋ 이제 모든 게 완료되었습니다. 


서버 세팅에 대한 부분들이 약간 각자의 환경의 차이가 있을 것 같아서 별도로 상세하게 설명드리진 않았는데 만약 필요하시다면 댓글 주시면 서버 설치의 포스팅을 별도로 해보도록 하겠습니다 ㅎㅎ. 우선 이번 포스팅으로 자동매매의 코드와 서버에서 해당 코드를 수행하여 진짜 24시간 혼자 돌아가는 자동매매 시스템을 구축하셨다고 보시면 됩니다. 하지만 아직은 완전 자동은 아니고 설정에 따른 거래를 하기 때문에 유연하지 않다고 생각할 수 있습니다. 그렇기 때문에 이러한 내용들을 어떻게 변경하여 적용하면 좋은지와 이 봇을 어떻게 활용하면 좋을지 또한 어떤 식으로 개인에 맞춰서 적용해 나갈 수 있을지에 대한 마지막 포스팅을 작성해 보도록 하겠습니다.

저는 전문 투자자도 아니고 그냥 일개 개미에 불과하면 그냥 개발자이기 때문에 전문적인 지식이 없어 실제 투자의 결정은 본인에게 있습니다.

반응형
LIST

댓글