학습/Python 빠른 시작

Python으로 환율 가져오기

표준 라이브러리로 시작하고 더 많은 제어가 필요하면 requests를 사용하세요. forex-python은 이전 코드에서 옮길 때 임시 인터페이스가 될 수 있습니다.

ERexchangerate.dev·2026년 10월 1일 업데이트·6분 읽기

/v1/latest/USD는 환율, 출처, 관측 시각을 담은 JSON을 반환합니다. 금액 계산에는 Decimal을 사용하세요.

핵심 요점
urllib는 추가 의존성이 필요 없습니다.
requests는 인증, timeout, 오류 처리를 단순하게 합니다.
forex-python은 마이그레이션 중간 단계의 인터페이스로 사용할 수 있습니다.
source, effective_at, data_updated_at을 값과 함께 저장하세요.
과거 데이터는 날짜 endpoint나 /v1/range를 사용하세요.

첫 요청

첫 요청에는 표준 라이브러리만으로 충분합니다. 금액을 계산한다면 JSON 숫자를 Decimal로 읽으세요.

키를 사용하는 requests

서비스에서는 timeout을 설정하고 환경 변수에서 키를 읽은 뒤 HTTP 상태를 확인하고 저장하세요.

forex-python에서 옮기기

forex-python은 자체 제공자를 사용하며 exchangerate.dev에 자동으로 연결되지 않습니다. 마이그레이션 중 익숙한 인터페이스를 유지할 수 있지만 exchangerate.dev의 source와 관측 시각을 버리지 마세요.

과거 데이터 올바르게 다루기

날짜 요청은 해당 날짜에 새 값이 없으면 이전 값이 이어진 결과를 반환할 수 있습니다. /v1/range는 저장된 관측을 반환하고 JSON을 366행 단위로 페이지 처리합니다.

자주 묻는 질문

python · standard librarycopy
import json
from decimal import Decimal
import urllib.request

url = "https://api.exchangerate.dev/v1/latest/USD?symbols=EUR,GBP"
with urllib.request.urlopen(url, timeout=10) as response:
    data = json.load(response, parse_float=Decimal)

print(data["rates"]["EUR"])
print(data["sources"]["EUR"], data["effective_at"]["EUR"])
print(data["market_session"])
python · requestscopy
# Install first: python -m pip install requests
import os
from decimal import Decimal
import requests

response = requests.get(
    "https://api.exchangerate.dev/v1/latest/USD",
    headers={"Authorization": f"Bearer {os.environ['EXCHANGERATE_API_KEY']}"},
    timeout=10,
    allow_redirects=False,
)
if response.status_code == 429:
    raise RuntimeError(f"Rate limited; Retry-After: {response.headers.get('Retry-After')}")
if 300 <= response.status_code < 400:
    raise RuntimeError("Unexpected redirect")
response.raise_for_status()
data = response.json(parse_float=Decimal)
print(data["rates"]["GBP"], data["effective_at"]["GBP"])
python · convert 100 USD to EURcopy
import os
from decimal import Decimal
import requests

response = requests.get(
    "https://api.exchangerate.dev/v1/convert/USD/EUR/100",
    headers={"Authorization": f"Bearer {os.environ['EXCHANGERATE_API_KEY']}"},
    timeout=10,
    allow_redirects=False,
)
if not 200 <= response.status_code < 300:
    raise RuntimeError(f"HTTP {response.status_code}; Retry-After: {response.headers.get('Retry-After')}")
data = response.json(parse_float=Decimal)
print(data["rate"], data["converted"])
python · rate on a past datecopy
import os
from decimal import Decimal
import requests

response = requests.get(
    "https://api.exchangerate.dev/v1/2026-03-14/USD?symbols=JPY",
    headers={"Authorization": f"Bearer {os.environ['EXCHANGERATE_API_KEY']}"},
    timeout=10,
    allow_redirects=False,
)
if not 200 <= response.status_code < 300:
    raise RuntimeError(f"HTTP {response.status_code}; Retry-After: {response.headers.get('Retry-After')}")
data = response.json(parse_float=Decimal)
print(data["rates"]["JPY"], data["is_forward_filled"])
ER
exchangerate.dev
개발자를 위한 연동 가이드입니다.

계속 읽기

TutorialJavaScript로 통화 변환하기읽기 Tutorial과거 환율과 시계열읽기
비교Fixer vs exchangerate.dev비교Open Exchange Rates vs exchangerate.dev비교Currencylayer vs exchangerate.dev가이드ECB 기준환율 설명가이드JavaScript와 Node.js로 통화 변환하기가이드Next.js와 TypeScript에서 환율 사용하기실시간 환율EUR/USD실시간 환율GBP/USD실시간 환율USD/JPY