🎯 복습 프로젝트 주제: "환율 변환기"
st.cache_data: API로부터 환율 정보를 캐싱 (10분 간격)
st.cache_resource: 외부 리소스 예시로 requests 세션 재사용
st.session_state: 사용자 입력 금액을 저장해서 상태 유지
📦 사전 설치
pip install streamlit requests
📄 작성한 코드
import streamlit as st
import requests
from datetime import datetime
@st.cache_resource
def get_requests_session():
return requests.Session()
@st.cache_data(ttl=600)
def get_exchange_rates(base):
session = get_requests_session()
url = f"https://api.exchangerate-api.com/v4/latest/{base}"
response = session.get(url)
data = response.json()
return data["rates"]
if 'amount' not in st.session_state:
st.session_state.amount = 10000
st.title("💱 실시간 환율 변환기")
currency_list = ["KRW", "USD", "JPY", "EUR", "TWD", "AUD"]
col1, col2 = st.columns([1,5])
with col1:
currency_base = st.selectbox("From", currency_list)
with col2:
st.number_input(f"금액 ({currency_base})", value=st.session_state.amount, key="amount")
col3, col4 = st.columns([1,5])
with col3:
currency = st.selectbox("To", filter(lambda c : c != currency_base, currency_list))
rates = get_exchange_rates(currency_base)
converted = st.session_state.amount * rates.get(currency, 0)
with col4:
st.title(f"💰 {converted:.2f} {currency}")
st.caption(f"업데이트 시각: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}")