Tutorial/Python으로 USD/IDR 환율 알림 만들기

Python으로 USD/IDR 환율 알림 만들기

Python 표준 라이브러리로 임계값을 넘을 때 한 번만 알림을 내고 상태와 최신성을 안전하게 관리하는 모니터를 만듭니다.

ERexchangerate.dev·Sep 8, 2026·8분 읽기

알림은 폴링 시각이 아니라 새로 유효해진 USD/IDR 관측을 이전 관측과 비교해야 합니다. 첫 관측은 기준만 만들고 오래된 데이터와 오류는 상태를 바꾸지 않습니다.

Key points
IDR 판단에는 sources["IDR"]effective_at["IDR"]를 사용하세요. 전체 source는 요청 통화의 보수적 요약입니다.
첫 유효 관측은 기준입니다. 임계값을 넘으면 한 번 알리고 해제하며, 유효한 관측이 다시 임계값 아래로 내려가야 재설정합니다.
임시 JSON을 같은 디렉터리에 쓰고 0600으로 설정한 뒤 os.replace로 교체하세요.
10초 timeout, EXCHANGERATE_API_KEY, 최소60초 주기를 사용하세요.429에서는 상태를 유지하고 Retry-After를 지킵니다.
전체 스크립트를 내려받고 임계값과 상태 경로를 소스 관리 밖에서 설정하세요. 출력은 로컬 콘솔뿐입니다.

통화 관측 모델 만들기

IDR 판단에는 sources["IDR"]effective_at["IDR"]를 사용하세요. 전체 source는 요청 통화의 보수적 요약입니다.

python · observation modelcopy
from decimal import Decimal

def idr_observation(payload: dict) -> dict:
    return {
        "rate": Decimal(str(payload["rates"]["IDR"])),
        "source": payload["sources"]["IDR"],
        "effective_at": payload["effective_at"]["IDR"],
        "market_session": payload["market_session"],
    }

교차 정책 정의하기

첫 유효 관측은 기준입니다. 임계값을 넘으면 한 번 알리고 해제하며, 유효한 관측이 다시 임계값 아래로 내려가야 재설정합니다.

상황상태 변화알림
첫 유효 관측기준 저장아니요
임계값 아래 관측armed=true아니요
armed 상태에서 교차armed=false한 번
반복/오래된 관측 또는 오류상태 유지아니요

상태 안전하게 저장하기

임시 JSON을 같은 디렉터리에 쓰고 0600으로 설정한 뒤 os.replace로 교체하세요.

python · atomic state writecopy
import json
import os
import tempfile
from pathlib import Path

def save_state(path: Path, state: dict) -> None:
    path.parent.mkdir(parents=True, exist_ok=True)
    fd, temporary = tempfile.mkstemp(prefix=f".{path.name}.", dir=path.parent, text=True)
    try:
        os.fchmod(fd, 0o600)
        with os.fdopen(fd, "w") as handle:
            json.dump(state, handle, sort_keys=True)
            handle.write("\n")
        os.replace(temporary, path)
    except Exception:
        try:
            os.unlink(temporary)
        except OSError:
            pass
        raise

네트워크와 한도 제한하기

10초 timeout, EXCHANGERATE_API_KEY, 최소60초 주기를 사용하세요.429에서는 상태를 유지하고 Retry-After를 지킵니다. 기본 5분 주기는 30일에 약 8,640회, 60초 주기는 약 43,200회라 공유 월간 한도를 넘을 수 있습니다.

오류가 잘못된 알림을 만들 수 없게 하세요
10초 timeout, EXCHANGERATE_API_KEY, 최소60초 주기를 사용하세요.429에서는 상태를 유지하고 Retry-After를 지킵니다.

모니터 실행하기

전체 스크립트를 내려받고 임계값과 상태 경로를 소스 관리 밖에서 설정하세요. 출력은 로컬 콘솔뿐입니다. 기본 최대 데이터 연령은 1시간입니다. 일일 기준값이나 폐장 데이터를 허용하려면 FX_ALERT_MAX_AGE_SECONDS를 설정하세요. python-exchange-rate-alerts.py

shell · run itcopy
chmod 700 python-exchange-rate-alerts.py
export EXCHANGERATE_API_KEY="your-key"
export FX_ALERT_THRESHOLD_PCT="1.0"
export FX_ALERT_POLL_SECONDS="300"
export FX_ALERT_STATE_PATH="$HOME/.local/state/fx-alert.json"
python3 python-exchange-rate-alerts.py

시장 없이 정책 테스트하기

기준, 교차, 반복 timestamp, 오래된 데이터, 재설정, 두 번째 교차를 네트워크 mock으로 테스트하세요.

ER
exchangerate.dev
개발자를 위한 통합 가이드.

계속 읽기

TutorialPython으로 환율 가져오기읽기 Referencesource와 market_session 읽기읽기 Guide한 번의 요청으로 과거 환율 조회읽기
더 많은 비교Fixer vs exchangerate.devOpen Exchange Rates vs exchangerate.devCurrencylayer vs exchangerate.dev
학습Reading source and market_session in your pipelineIndicative vs executable FX rates: what a rates API actually gives youECB 기준환율 설명
실시간 환율EUR/USDGBP/USDUSD/JPY