
EC2 가상 컴퓨터 환경 준비
sudo apt update
sudo apt upgrade -y
sudo apt install python3-pip python3-venv -y
mkdir stock_project
cd stock_project
python3 -m venv venv
source venv/bin/activate
pip install yfinance pandas sqlalchemy pymysql cryptography
#ssl 인증서 다운로드
curl -O https://truststore.pki.rds.amazonaws.com/global/global-bundle.pem
nano global-bundle.pem
nano collect_data.py
python collect_data.py
date
sudo timedatectl set-timezone Asia/Seoul
crontab -e
# (파일 맨 밑에 아래 한 줄 추가) 매일 16시 30분에 데이터 긁어오기
# 30 16 * * 1-5 /home/ubuntu/stock_project/venv/bin/python /home/ubuntu/stock_project/collect_data.py >> /home/ubuntu/stock_project/collect.log 2>&1
crontab -l
cat /home/ubuntu/stock_project/collect.log
collect_data.py에 아래 내용을 작성
from datetime import datetime, timedelta
import yfinance as yf
import pandas as pd
from sqlalchemy import create_engine, text
import urllib.parse
start_date = (datetime.now() - timedelta(days=365)).strftime("%Y-%m-%d")
end_date = (datetime.now() + timedelta(days=1)).strftime("%Y-%m-%d")
ssl_path = "/home/ubuntu/stock_project/global-bundle.pem"
# 1. 삼성전자 데이터 수집
df = yf.download("005930.KS", start=start_date, end=end_date)
df = df.reset_index()
df.columns = df.columns.get_level_values(0)
#df = df.tail(1) #append 모드용
# 2. 계정 정보 및 비밀번호 안전 인코딩
db_password = "*******"
safe_password = urllib.parse.quote_plus(db_password) #특수문자 인코딩
db_endpoint = "database-1.cdyyqwcq2v17.ap-northeast-2.rds.amazonaws.com"
# 3. 1차 접속: AWS 건물(서버) 문 열고 들어가기
base_url = f"mysql+pymysql://admin:{safe_password}@{db_endpoint}:3306"
base_engine = create_engine(base_url, connect_args={"ssl": {"ca": ssl_path}})
# 만약 yfinance_db라는 방이 없다면 새로 만들기
with base_engine.connect() as conn:
conn.execute(text("CREATE DATABASE IF NOT EXISTS yfinance_db"))
# 4. 2차 접속: 방금 만든 yfinance_db 방으로 정확히 짚어서 들어가기 (주소 맨 뒤 추가)
final_url = f"mysql+pymysql://admin:{safe_password}@{db_endpoint}:3306/yfinance_db"
engine = create_engine(final_url, connect_args={"ssl": {"ca": ssl_path}})
# 5. 데이터 적재
df.to_sql(name='samsung_stock', con=engine, if_exists='replace', index=False)
print("AWS MySQL DB에 데이터 저장 완료")

정상적으로 들어오는거 확인
이제 시각화까지 이어서 자동화하는거 해봅시다.

pip install streamlit
nano -m app.py
#app.py에 코드 작성
streamlit run app.py

External URL: http://3.34.98.191:8501/
위 주소로 접속.
다음 화면이 뜬다

이 시각화는 db가 매일 갱신됨에 따라 새로운 db를 받아오기 때문에
페이지 새로고침 시 새로운 차트가 그려진다고 할 수 있다
'End-to-End 프로젝트' 카테고리의 다른 글
| End-to-End 연습5_LLM 대화형 RAG 챗봇 구현하기 (0) | 2026.07.23 |
|---|---|
| End_to_End 연습4_LLM 답변 생성하기 (0) | 2026.07.21 |
| End-to-End 연습3_챗봇 알림 서비스 구현 (0) | 2026.07.21 |
| End-to-End 연습1_AWS 환경 구축 (0) | 2026.07.20 |