Python 통합 프로젝트 확장 및 배포: 실시간 데이터 분석 애플리케이션
안녕하세요, '소프트웨어 공장'에 오신 것을 환영합니다! 지난 포스팅에서는 실시간 데이터 분석 애플리케이션을 Python의 다양한 기술을 활용하여 만드는 방법을 살펴보았습니다. 이번 포스팅에서는 이 프로젝트를 확장하고, 실제 서비스로 배포하는 방법에 대해 알아보겠습니다. 확장된 기능 추가와 배포 과정은 실무에서 애플리케이션을 완성하고 사용자가 접근 가능하도록 만드는 데 필수적인 과정입니다.
프로젝트 확장
프로젝트를 좀 더 기능적으로 확장하고 사용자 경험을 개선하기 위해 몇 가지 기능을 추가해보겠습니다. 이번 확장에서는 다음과 같은 기능을 구현합니다:
- 사용자 알림 시스템: 특정 주식의 가격 변동에 대한 알림 기능 추가
- 사용자 인증 및 개인 대시보드: 사용자마다 다른 데이터를 조회하고 대시보드를 사용할 수 있도록 사용자 인증 시스템 구현
- 데이터 분석 및 예측 기능: 주식 가격 변동에 대한 예측 기능 추가
1. 사용자 알림 시스템 구현
사용자 알림 시스템은 사용자가 관심 있는 주식의 가격이 특정 값 이상 또는 이하로 변동할 때 알림을 받도록 합니다. 이를 위해 FastAPI
와 asyncio
를 사용하여 간단한 알림 시스템을 구축합니다.
import asyncio
from fastapi import FastAPI, BackgroundTasks
app = FastAPI()
# 알림을 받을 주식 정보
watchlist = {
"AAPL": 150.0,
"GOOGL": 2800.0
}
async def price_monitor():
while True:
# 주식 가격 데이터 수집 로직 추가 (예: API 호출)
current_prices = {"AAPL": 155.0, "GOOGL": 2790.0} # 예시 데이터
for symbol, target_price in watchlist.items():
if current_prices[symbol] >= target_price:
print(f"알림: {symbol}의 가격이 목표치에 도달했습니다: {current_prices[symbol]}")
await asyncio.sleep(60) # 1분마다 체크
@app.on_event("startup")
async def startup_event():
asyncio.create_task(price_monitor())
위 코드는 사용자 관심 종목의 가격을 모니터링하고, 목표 가격에 도달하면 알림을 출력하는 간단한 예제입니다. 백그라운드에서 비동기적으로 주식 가격을 주기적으로 확인합니다.
2. 사용자 인증 및 개인 대시보드
사용자가 로그인하고 개인 대시보드를 확인할 수 있는 기능을 추가합니다. 이를 위해 FastAPI
와 JWT
를 사용하여 사용자 인증을 구현합니다.
from fastapi import FastAPI, HTTPException, Depends
from fastapi.security import OAuth2PasswordBearer, OAuth2PasswordRequestForm
import jwt
app = FastAPI()
oauth2_scheme = OAuth2PasswordBearer(tokenUrl="token")
# 예시 사용자 데이터베이스
fake_users_db = {
"john": {
"username": "john",
"password": "secret"
}
}
SECRET_KEY = "your_secret_key"
@app.post("/token")
async def login(form_data: OAuth2PasswordRequestForm = Depends()):
user = fake_users_db.get(form_data.username)
if not user or user["password"] != form_data.password:
raise HTTPException(status_code=400, detail="Invalid credentials")
token = jwt.encode({"sub": user["username"]}, SECRET_KEY, algorithm="HS256")
return {"access_token": token, "token_type": "bearer"}
@app.get("/users/me")
async def read_users_me(token: str = Depends(oauth2_scheme)):
payload = jwt.decode(token, SECRET_KEY, algorithms=["HS256"])
username = payload.get("sub")
if username is None:
raise HTTPException(status_code=401, detail="Invalid token")
return {"username": username}
위 코드에서는 JWT(JSON Web Token)를 사용하여 사용자를 인증하고, 개인 대시보드에 접근할 수 있는 토큰을 제공합니다. 이를 통해 사용자는 자신의 계정으로 로그인하고 개인화된 데이터를 조회할 수 있습니다.
3. 데이터 분석 및 예측 기능 추가
주식 가격의 변동을 예측하기 위해 간단한 머신러닝 모델을 추가해봅니다. 여기서는 scikit-learn
을 사용하여 과거 데이터를 바탕으로 미래의 주식 가격을 예측하는 기능을 구현합니다.
import numpy as np
import pandas as pd
from sklearn.linear_model import LinearRegression
# 가상 데이터 생성
data = {
'Day': [1, 2, 3, 4, 5],
'Price': [150, 152, 153, 155, 157]
}
df = pd.DataFrame(data)
# 모델 학습
X = df[['Day']]
y = df['Price']
model = LinearRegression()
model.fit(X, y)
# 미래 가격 예측
def predict_price(day):
prediction = model.predict([[day]])
return prediction[0]
print(f"Day 6의 예측 가격: {predict_price(6)}")
위 예제에서는 간단한 선형 회귀 모델을 사용하여 미래 주식 가격을 예측합니다. 이를 통해 사용자들은 주식의 미래 가격을 예상할 수 있습니다.
프로젝트 배포
확장된 프로젝트를 배포하기 위해 다음과 같은 단계를 진행합니다:
- 도커(Docker) 컨테이너화: 애플리케이션을 도커 이미지로 만들어 손쉽게 배포할 수 있도록 합니다.
- 클라우드 서버 배포:
AWS
,Azure
, 또는Google Cloud Platform
과 같은 클라우드 서비스에 애플리케이션을 배포합니다. - CI/CD 파이프라인 설정:
GitHub Actions
나Jenkins
를 사용하여 지속적인 통합과 배포를 자동화합니다.
1. 도커 컨테이너화
먼저 도커를 사용하여 애플리케이션을 컨테이너화합니다. 이를 통해 환경 설정이 일관된 상태로 어디서든 애플리케이션을 실행할 수 있습니다.
Dockerfile 예시:
FROM python:3.9-slim
WORKDIR /app
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
COPY . .
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]
위 Dockerfile은 Python 환경을 설정하고 필요한 패키지를 설치한 후, FastAPI 서버를 실행합니다.
2. 클라우드 서버 배포
도커 이미지가 준비되면, 이를 클라우드 서버에 배포할 수 있습니다. 예를 들어 AWS EC2
인스턴스에 도커 이미지를 배포하고 실행하여 애플리케이션을 서비스할 수 있습니다.
# 도커 이미지 빌드
$ docker build -t stock-analysis-app .
# 도커 이미지 실행
$ docker run -d -p 8000:8000 stock-analysis-app
이 명령어를 사용하면 애플리케이션이 클라우드 서버에서 실행되며, 사용자는 이를 통해 실시간 데이터 분석 서비스를 이용할 수 있습니다.
3. CI/CD 파이프라인 설정
지속적인 통합과 배포를 위해 GitHub Actions
를 사용해 봅시다. 이를 통해 코드가 변경될 때마다 자동으로 빌드하고 배포할 수 있습니다.
GitHub Actions 워크플로우 예시:
name: CI/CD Pipeline
on:
push:
branches:
- main
jobs:
build-and-deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v1
- name: Login to Docker Hub
uses: docker/login-action@v1
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
- name: Build and push Docker image
run: |
docker build -t stock-analysis-app .
docker tag stock-analysis-app:latest yourdockerhubusername/stock-analysis-app:latest
docker push yourdockerhubusername/stock-analysis-app:latest
- name: Deploy to server
run: |
ssh -i your_key.pem user@your_server_ip "docker pull yourdockerhubusername/stock-analysis-app:latest && docker run -d -p 8000:8000 stock-analysis-app:latest"
위 YAML 파일은 코드가 main 브랜치에 푸시될 때마다 도커 이미지를 빌드하고 Docker Hub에 푸시한 후, 서버에 배포하는 과정을 자동화합니다.
마무리
이번 포스팅에서는 이전에 만든 실시간 데이터 분석 애플리케이션을 확장하고, 실제로 배포하는 방법을 알아보았습니다. 사용자 알림 시스템, 사용자 인증, 데이터 예측 기능 등 여러 기능을 추가하고 이를 실제 서비스로 배포함으로써 애플리케이션을 한 단계 업그레이드할 수 있었습니다. 이러한 과정을 통해 Python을 사용한 프로젝트를 실무에 적용하고, 사용자가 실제로 사용할 수 있는 서비스를 만드는 방법을 배워보셨길 바랍니다.
'Python > Python' 카테고리의 다른 글
애플리케이션 보안 강화 및 스케일링: 실시간 데이터 분석 애플리케이션 (0) | 2025.07.14 |
---|---|
Python 애플리케이션 모니터링 및 성능 최적화: 실시간 데이터 분석 애플리케이션 (0) | 2025.07.13 |
Python을 활용한 통합 프로젝트: 실시간 데이터 분석 애플리케이션 (0) | 2025.07.11 |
실제 프로젝트에서 Python 고급 주제 활용하기 (0) | 2025.07.10 |
Python 비동기 프로그래밍, REST API, 데이터 시각화와 대시보드 만들기 (0) | 2025.07.09 |