시작하며
개인 프로젝트로 주식 데이터를 자동으로 수집하고 분석해서 Slack으로 알림을 받는 시스템을 만들어봤어요. 처음부터 완벽하게 만들려고 하기보다는, 일단 기본적인 동작 위주로 간단하게 만들어보자는 생각으로 시작했답니다.
(Minimum Viable Product. 이런 걸 MVP라고 부르던가요)

전체 아키텍처
전체적인 구조는 이렇게 구성했어요.
- 데이터 수집 - Yahoo Finance에서 주식 데이터 가져오기
- 데이터 전처리 - 기술적 지표 계산 및 정제
- AI 분석 - Google Gemini로 데이터 분석
- 결과 전달 - Slack으로 분석 결과 수신
무척 간단하면서도 딱 필요한 것들을 추려서 설계해 봤어요.
Yahoo Finance와 yfinance의 이야기
처음에는 어디서 주식 데이터를 가져올까 고민했어요. 유료 API도 있지만, 일단 무료로 테스트해 볼 수 있는 방법이 필요했죠. 그래서 찾은 게 yfinance 라이브러리예요.
yfinance란?
yfinance는 Yahoo Finance의 데이터를 가져올 수 있게 해주는 파이썬 라이브러리인데요, 여기에는 재밌는 이야기가 있어요.
사실 Yahoo Finance는 2017년에 공식 API를 종료했어요. 데이터 남용 문제 때문이었다고 하네요. 그런데 yfinance는 Yahoo Finance의 웹사이트를 통해 공개되어 있는 데이터를 가져오는 방식으로 작동해요. 공식적으로 지원하는 건 아니지만, 오픈소스 커뮤니티에서 계속 유지보수되면서 몇 년째 잘 작동하고 있어요.
yfinance의 장단점
장점:
- 완전 무료이고 설치도 간단해요 (pip install yfinance)
- API 키 발급이나 계정 생성 같은 귀찮은 과정이 필요 없어요
- 사용법이 정말 직관적이에요
단점:
- 비공식이다 보니 Yahoo Finance가 웹사이트 구조를 바꾸면 갑자기 작동을 멈출 수 있어요
- 실시간 데이터가 필요하거나 실제 트레이딩 시스템을 만든다면 권장하지 않아요 (하루 이틀 늦어요)
- 일부 기능은 웹 스크래핑 방식이라 불안정할 수 있어요
그래서 쓸까 말까?
개인 프로젝트나 학습용으로는 충분하다고 생각해요. 저처럼 일단 러프하게 만들어보고 싶다면 yfinance가 좋은 선택이에요. 다만 라이브 차트를 보고 실시간 트레이딩하는 시스템을 만든다면, yfinance는 힘들 수 있어서 다른 주식 데이터 제공업체를 고려하는 게 좋겠죠.
제 경우에는 "일단 만들어보자"는 마인드였기 때문에 yfinance를 선택했어요. 개발한 지 얼마 안 됐지만 며칠째 잘 작동하고 있고, 혹시 나중에 문제가 생기면 그때 다른 방법을 찾아보려고 해요.
데이터 전처리 과정
Yahoo Finance에서 가져온 원시 데이터는 그대로 사용하기에 충분하지만 원활하고도 정확한 분석이 필요하니 다양한 기술적 지표를 계산해서 추가했어요:
- 이동평균선(Moving Average) - 단기/장기 추세를 파악하기 위해
- MACD(Moving Average Convergence Divergence) - 모멘텀 확인용
- CCI(Commodity Channel Index) - 과매수/과매도 판단
- ATR(Average True Range) - 변동성 측정
이런 지표들을 계산하는 라이브러리는 많은데, 저는 pandas-ta를 사용했어요. 대부분의 분석 지표들이 함수로 구현되어 있어서 정말 간편하더라고요.
https://ai.google.dev/gemini-api/docs/quickstart?hl=ko
Gemini API 빠른 시작 | Google AI for Developers
개발자를 위한 Gemini API 시작하기
ai.google.dev
Google Gemini로 분석하기
전처리된 데이터를 Google Gemini API로 보내서 분석을 요청해요. Gemini는 데이터를 보고 현재 시장 상황을 해석하고, 간단한 인사이트를 제공해 줘요.
이 부분은 아직 실험 단계예요. 프롬프트 엔지니어링을 전문적으로 해 본 적이 없어서 미흡해요. 한국말로 요청했는데 영어로 응답할 때가 있어서 "한국말로 해달라"는 것을 추가하고, 응답 템플릿도 생각해 둔 게 없어서 매수, 매도 기준으로 대답해 달라는 정도로만 간단하게 구현했어요. 하지만 Gemini가 훌륭하게 대답해 준 덕분에 프롬프트는 더 이상 크게 수정할 필요성을 못 느끼고 있어서 비용 측면 위주로 포커싱을 맞추고 있어요. (Gemini 3 pro 모델을 3~5번 호출했는데 430 달러쯤 나왔었네요..)
그래서 좀 더 활용해 보고 그동안 발생한 비용 관련해서 별도 포스팅으로 다뤄볼 예정이에요!
Slack으로 받아보기
분석 결과는 Slack으로 전달돼요. Slack은 무료 플랜으로도 봇을 만들고 웹훅(Webhook)을 통해 메시지를 보낼 수 있어서 정말 편했어요.
Slack 설정 방법 (간단 요약)
- Slack 워크스페이스에서 앱 만들기
- Incoming Webhook 활성화
- 메시지를 받을 채널 선택
- Webhook URL 복사해서 코드에 넣기
이게 끝이에요! 복잡한 인증 과정도 없고, 무료로 사용할 수 있어서 개인 프로젝트에 딱이에요. 주식 개장하기 전에 알람을 맞추어서 Slack을 열면 어제 주식 시장이 어땠는지 정리된 메시지를 확인할 수 있답니다.
Python 스케줄러
모든 과정을 자동화하기 위해 Python 스케줄러를 만들었어요. 특정 시간에 자동으로 실행되도록 설정해 뒀죠. 크론잡(cron job)이나 schedule 라이브러리 같은 도구를 쓸 수 있어요.
저는 서버에 크론잡으로 등록해서 평일 장 시작 전에 자동으로 돌아가게 했어요.
느낀 점
이 프로젝트를 하면서 "완벽하지 않아도 일단 만들어보는 게 중요하다"는 걸 다시 느꼈어요. yfinance가 비공식이라는 게 걸림돌이 될 수도 있었지만, 일단 작동하는 버전을 만들고 나니까 계속 개선해 나갈 수 있겠더라고요.
또 무료 도구들(yfinance, Slack 무료 플랜)만으로도 충분히 의미 있는 시스템을 만들 수 있다는 게 신기했어요. 물론 Gemini는 지금 무료로 받은 크래딧을 사용하고 있어서 무료 아닌 무료라서 나중에 다른 모델로 갈아타야겠지만, 시작하는 단계에서는 이 정도면 충분해요.
앞으로의 계획
- Gemini API 사용 경험과 비용 분석을 별도 포스팅으로 정리
- 아키텍처를 재설계해서 좀 더 견고하고 안정성 있게 다시 구현하고 싶어요
- 분석할 주식을 선택하는 설정 화면이 필요해요(사용자 UI)
하나씩 개선해 가면서 배우는 재미가 쏠쏠해요. 다음 포스팅에서는 계획을 실천하면서 발전한 모습을 공유해 볼게요!
프론트한 게 없어서 보여드릴 게 없어 아쉽네요 ㅠㅠ