시뻘건 개발 도전기

#1. 코인 자동 매매 프로그램 만들기 본문

프로젝트/토이프로젝트

#1. 코인 자동 매매 프로그램 만들기

시뻘건볼때기 2022. 1. 28. 18:04
반응형

 

※ 본 '코인 자동 매매 프로그램 만들기' 시리즈 포스팅은 개인적인 학습용으로 개발하게 되는 프로그램입니다.
투자의 책임은 투자자 본인에게 있음을 알려드립니다.

 

  혼자 무언가를 만들어 볼까 하다가 작년에 파이썬으로 코인 자동 매매 프로그램을 만들게 떠올랐다. 그걸 java로 포팅한다면!? ㅋㅋㅋㅋㅋㅋ 사실 파이썬이 훨신 참고할 데이터가 많았고 많이 사용되어지고 있어서 파이썬을 사용했지만 java로 포팅한 이유는, spring을 공부하기 위함이었다.(전 직장에서 spring을 쓰지 않았기 때문 ㅠㅠ)

  코인 자동 매매 프로그램을 만들기 앞서서 미리 준비해야할 사항(플랫폼 선정, 가입, API token 수령 등)은 패스한다. 왜냐하면 이 포스팅 시리즈의 메인은 java-spring이기 때문이다. 훨신 더 좋은 많은 블로그가 있으니 참고하면 좋을 듯 하다. (참고로 나는 업비트를 선정하였다.)


가장 먼저 나의 개발 환경을 기록해본다.

gradle : 7.2
spring-boot : 2.5.6
java : 1.8

 

사용되는 기능은 보안, 배치, 비동기가 있다.

@EnableScheduling
@EnableEncryptableProperties
@EnableAsync

  업비트는 API 사용시 token(key)을 두 가지로 제공을해서 프로그램 내에서 로그인을 하게된다. 그런데 이 토큰이 외부로 노출된다면? 어느순간 내 자산은 '0'이 될 것이다. 그렇기에 꼭 암호화를 해주자. 또한 주기적으로 key를 바꿔주어야 하기 때문에 properties 파일에서 관리하도록 하였다. (그럴 때마다 배포할 수는 없으니..)

  자동매매를 하려면 일정한 시간 간격으로 매수와 매도를 해야하기 때문에 scheduling을 사용했다. 나는 매수/추가매수와 매도/분할매도/손절로 구분해서 배치가 돌아간다.

  매수/매도가 각각 배치가 돌아가기 때문에 매도시 매수했던 내용이 필요할 때가 있다. 간혹 업비트에서 제공해주는 API를 사용해서 얻을 수 있지만 그렇지 못한 데이터가 있다. 그런 데이터는 DB(MySQL)에 저장해서 가져와야한다. 그런데, 매수/매도와 별도로 DB에 CRUD 수행이 배치에 영향을 준다면??? 괜히 매수/매도 시간만 늦출 뿐이다. 따라서, DB에 CRUD하는 부분에 대해서는 async하게 작동하도록 하였다.

반응형
Comments