Python Streamlit

김소은·2025년 5월 29일

🎯 복습 프로젝트 주제: "환율 변환기"

  • 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()

# API에서 환율 정보 받아오기 (10분 간격 캐싱)
@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.write('💰')
    st.title(f"💰 {converted:.2f} {currency}")
st.caption(f"업데이트 시각: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}")

profile
개발자

0개의 댓글