Zappa와 파이썬을 활용한 실시간 주가 알림 애플리케이션 구축하기

stock_app

주식 시장에서 변동성이 높을 때 실시간으로 주가를 알려주는 애플리케이션을 구축해보고 싶다면 이 포스트가 도움이 될 것입니다. 이 앱은 Zappa와 파이썬을 사용하여 효과적으로 구축될 것입니다.

개요

실시간 주가 알림 애플리케이션은 개인 투자자에게 매우 유용할 수 있습니다. 이 애플리케이션은 AWS LambdaZappa와 같은 도구를 사용하여 쉽게 구축할 수 있습니다. 주가 API에서 데이터를 가져와 변동성에 따라 지정한 임계값을 넘으면 사용자에게 알림을 보내는 기능을 가지고 있습니다.

준비물

단계별 구현

1. 가상 환경 설정

먼저 파이썬 가상 환경을 설정합니다. 가상 환경을 설정하여 의존성 관리를 효과적으로 할 수 있습니다.

$ python -m venv stock_app_env
$ source stock_app_env/bin/activate

2. 필요한 라이브러리 설치

필요한 패키지들을 설치합니다. 이 애플리케이션에서는 requests, beautifulsoup4, zappa 등의 패키지를 사용합니다.

(venv) $ pip install requests beautifulsoup4 zappa

3. 주가 데이터 가져오기

주가 API를 사용하여 실시간 주가 데이터를 가져오는 함수를 작성합니다. 여기에서는 네이버 금융에서 주가 데이터를 가져오는 예제를 사용하겠습니다.

import requests
from bs4 import BeautifulSoup

def get_stock_price(ticker):
    url = f"https://finance.naver.com/item/main.nhn?code={ticker}"
    response = requests.get(url)
    response.raise_for_status()

    soup = BeautifulSoup(response.text, 'html.parser')
    price_tag = soup.select_one(".no_today .blind")
    price = price_tag.get_text()

    return price

ticker = 'AAPL'  # 주식 코드
price = get_stock_price(ticker)
print(f"The current price of {ticker} is {price}.")

4. Zappa 설정 파일 생성

Zappa의 설정 파일을 생성합니다. zappa_settings.json 파일을 프로젝트 루트 디렉토리에 생성하고 다음 내용을 추가합니다.

{
    "dev": {
        "app_function": "app.app",
        "s3_bucket": "your-s3-bucket-name",
        "timeout_seconds": 30,
        "environment_variables": {
            "STOCK_TICKER": "AAPL",
            "THRESHOLD": "150"
        }
    }
}

5. Flask 앱 생성

Flask를 사용하여 간단한 웹 애플리케이션을 생성합니다. 주가 데이터를 가져와서 임계값을 비교하고, 알림을 보내는 로직을 추가합니다.

from flask import Flask
import os
from twilio.rest import Client

app = Flask(__name__)

@app.route('/')
def check_stock_price():
    ticker = os.environ.get('STOCK_TICKER')
    threshold = os.environ.get('THRESHOLD')
    
    current_price = get_stock_price(ticker)

    if current_price >= threshold:
        send_sms(f"The price of {ticker} has exceeded the threshold! Current price: {current_price}")

    return "Done"

def send_sms(message):
    account_sid = "your-twilio-account-sid"
    auth_token = "your-twilio-auth-token"
    client = Client(account_sid, auth_token)

    from_phone = "+123456789"  # Twilio에서 발급받은 전화번호
    to_phone = "+987654321"  # 수신자 전화번호

    client.messages.create(
        body=message,
        from_=from_phone,
        to=to_phone
    )

if __name__ == '__main__':
    app.run()

6. Zappa 배포

Zappa를 사용하여 애플리케이션을 배포합니다.

(venv) $ zappa deploy dev

애플리케이션이 성공적으로 배포되면 출력된 엔드포인트 URL을 사용하여 애플리케이션에 접속할 수 있습니다.

마치며

위의 단계를 따라가면 실시간 주가 알림 애플리케이션을 간단하게 구축할 수 있습니다. Zappa와 파이썬을 사용하여 효율적이고 확장 가능한 애플리케이션을 구축할 수 있습니다.

#stock #Zappa #Flask #파이썬