가이드튜토리얼

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

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

2026년 9월 8일 · 8분 읽기

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

  • 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 model
from decimal import Decimaldef 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 write
import jsonimport osimport tempfilefrom pathlib import Pathdef 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 it
chmod 700 python-exchange-rate-alerts.pyexport 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으로 테스트하세요.

자주 묻는 질문

첫 실행은 왜 알리지 않나요?

이전 유효 관측이 없으므로 기준만 저장합니다.

왜 effective_at을 쓰나요?

IDR 관측이 기록된 시간을 나타내 오래된 응답의 중복 알림을 막습니다.

시장 폐장 데이터는 항상 잘못됐나요?

아닙니다. source와 market_session을 보존해 참고 데이터로 해석하세요.

외부로 메시지를 보내나요?

아니요. 로컬 콘솔에만 출력합니다.

계속 읽기

무료 API 키로 시작하세요

무료 플랜으로 월 5,000건 요청 가능. 신용카드는 필요하지 않습니다.

무료 키 받기