개발 프로젝트

머신러닝을 통한 주식 추천 시스템 개발 일지 (1) - 계기, 전체적 설계

M_군 2025. 3. 30. 21:43
시스템 개발을 모두 완료한 뒤, 기록을 남기기 위해 작성한다.

 

디스코드 채널 화면

 

 

시작은 오랜만에 만난 고등학교 친구와의 잡담이었다. 그 친구는 최근들어 유튜브나 커뮤니티 이곳저곳을 돌아다니며 비트코인 차트를 여러 지표 기반으로 분석하고 트레이딩하는 방법을 배우고 있다고 했다. 자기는 전업 트레이더가 되어서 큰 돈을 벌 것이며 자기는 큰 자신이 있더랬다. 

 

마침 그 친구의 조언에 따라 적절한 시점에 사고 팔아, 미국에서 양자 관련주의 변동성이 크던 시점에 돈을 조금 벌었기에 그의 이론에 관심이 더 생겼다.

 

대 혼란의 시기. 하루만에 3-40퍼가 오르고 빠지기도 했다.

 

그 친구의 이론은 좀 파격적이었다. 다른 것은 알 필요 없고 거래량과 가격, 그리고 그 패턴만 보면 모든 것을 다 알 수 있다는 것이다. 그 친구는 실물이 없는 비트코인에는 물론이고, 약간 경향은 다르긴 하겠지만 실물인 회사에 기반한 주식에서도 그 이론이 적용될 수 있다고 했다. 

 

주로 그는 트레이딩뷰라는 사이트에서 차트에 추가적인 지표를 표시하고, 그림을 그리며 예측을 했다. 

https://kr.tradingview.com/chart/GOOGL/Q4C2JxM9/ 대충 이 게시글에 있는거랑 비슷한 일을 했다. 사진으로 보면 아래와 같다.

뭐 그럴듯해 보이기는 하는데...
옛날에도 저런거 있지 않았나... 별자리 생긴 거 보고 미래를 예측하는 점성술이라던가

이성적으로 그 방법론이 이해가 가지는 않았지만 경험적으로는 재미도 좀 봤기도 하고, 흥미도 동했기 때문에 그 친구가 차트를 분석하던 작업을 프로그램을 통해 자동으로 할 수는 없을까 궁금했다. 차트 분석이라는 것이 어차피 좌표 상에서 일어나는 일이기 때문에 일종의 수식과 조건식으로 나타낼 수 있는 일이었고 그렇기에 그리 어렵지 않고 프로그램화할 수 있다는 생각이 들었다. 

 

보통 트레이더들은, 자기가 이미 관심을 갖고 있는 몇개 주식에 대해 돌아다니며 차트 분석을 한다. 모든 주식을 알 수 없고 시간이 한정되어 있으니 당연한 일이다. 하지만 만약 프로그램이 '모든' 주식에 대해 '자동으로' 분석을 한다면 훨씬 편리하고 빠르지 않을까? 하는 생각이 들었다.저 단순한 생각에 조금씩 살이 더 붙어 클라우드 상에서 돌아가는 간단한 프로그램을 설계해보고자 마음을 먹었다. 

 

다음과 같은 구체적 목표들을 바탕으로 프로그램을 기획했다.

  • 1) 기술적 분석만으로 심플하게 접근해 유용한(약간이라도) 주식 추천 정보를 얻는다.
  • 2) 클라우드와 데이터베이스 등 Backend 사이드의 작업을 직접 구현해본다. (주로 웹과 앱을 개발했어서 이 쪽은 경험이 짧아서 한번 처음부터 해보고 싶었다)
  • 3) 인공지능 공부했던 것을 직접 적용해본다. 특히, 데이터 마련부터 훈련, 모델 배포까지 인공지능과 관련된 모든 작업을 경험한다.

 

설계된 프로그램은 다음과 같다.

전체적인 아키텍처 다이어그램

기본적으로 회사정보와 일자별 주식 거래정보를 담고 있는 RDB를 GoogleCloudsql의 Postgresql로, 훈련된 모델을 저장할 파일시스템으로서 GoogleCloduStorage를 마련했다. 그리고 Cloud Run Job 이라는 도커 컨테이너 기반의 서버리스 서비스를 사용해 1) 데이터를 주기적으로 수집하는 것과 2) 모델을 통한 예측을 주기적으로 수행하는 것을 적은 컴퓨팅 리소스로 효율적으로 활용하게끔 한다.

 

*Google Cloud Run Job이란?

Cloud Run 이란 도커 컨테이너 기반으로 신축적으로 컴퓨팅 리소스를 활용하게끔 하는 구글의 서버리스 서비스이다. 직전 회사에서의 백엔드가 Cloud Run 위에 띄워져 있었어서 익숙했는데 Job의 경우에는 좀 다르다. Cloud Run Job(한국어로 Cloud Run 작업이라고 표시되어 있다.)의 경우에는 도커 기반으로 작동하되, 서버를 위한 사용사례처럼 프로그램을 상시 띄우는 것이 아니라, 작업 실행을 완료하면 종료되는 형태로 작동하는 서버리스 서비스다. 엇비슷한 것으로는 코드 파일을 단독으로 업로드해 클라우드 상에서 실행하는 Functions라는 서비스가 있는데, Functions보다는 좀 더 까다롭고 무거운 작업(메모리 소비량이 크고, 라이브러리 많이 사용해야 하는 등)에 사용되는 포지션인 것 같다.

예상할 수 있듯이, 서버리스 서비스로서 좀 더 값이 저렴하고, 내가 사용한 만큼만 딱 돈을 낼 수 있어서 나에게 최적이라고 판단했다. 이에 더해, 병렬 작업을 용이하게 하기 위한 관리 서비스가 있어서, 여러 회사의 주식 정보를 동시에 불러오기에도 적절하다고 판단했다.