name: currency-skill
description: Frankfurter API를 사용한 환율 정보 조회 및 통화 변환 스킬. 무료 오픈소스 환율 API로 유럽중앙은행(ECB) 데이터 기반. API 키 불필요, 사용량 제한 없음. 사용 시점: (1) 최신/과거 환율 조회 (2) 통화 변환 계산 (3) 기간별 환율 시계열 데이터 분석 (4) 지원 통화 목록 확인 (5) Flutter/웹 앱에서 환율 기능 구현 (6) 자동화/AI 도구에서 환율 데이터 활용. 키워드: 환율, exchange rate, 통화 변환, currency conversion, ECB, 유럽중앙은행, USD, KRW, EUR, 시계열 데이터, API
Frankfurter Currency Exchange API
Frankfurter는 무료 오픈소스 환율 API입니다. API 키나 인증이 필요 없으며, 사용량 제한도 없습니다.
빠른 시작 (Quick Start)
최신 환율 조회
curl "https://api.frankfurter.dev/v1/latest?base=USD&symbols=KRW"
curl "https://api.frankfurter.dev/v1/latest?base=USD&symbols=KRW&amount=100"
과거 환율 조회
curl "https://api.frankfurter.dev/v1/2024-01-15?base=USD&symbols=KRW"
curl "https://api.frankfurter.dev/v1/2024-02-13?base=USD&symbols=KRW"
curl "https://api.frankfurter.dev/v1/2024-02-07?base=USD&symbols=KRW"
curl "https://api.frankfurter.dev/v1/2024-01-14?base=USD&symbols=KRW"
📅 날짜 관련 중요 사항:
- 날짜 형식:
YYYY-MM-DD (예: 2024-02-14)
- 데이터 범위: 1999년 1월 4일부터 제공
- UTC 기준 저장: 타임존 차이로 의도한 날짜와 다를 수 있음
- 주말/휴일: 해당 날짜에 데이터 없으면 최근 영업일 환율 반환
- 오늘 날짜 사용 주의: 데이터가 불안정하므로 안전하게 어제 날짜 사용 권장
시계열 데이터
curl "https://api.frankfurter.dev/v1/2024-01-01..2024-01-31?base=USD&symbols=KRW"
curl "https://api.frankfurter.dev/v1/2024-02-07..?base=USD&symbols=KRW"
curl "https://api.frankfurter.dev/v1/2024-01-14..?base=USD&symbols=KRW"
curl "https://api.frankfurter.dev/v1/2024-01-01..2024-12-31?base=USD&symbols=KRW"
주요 기능
| 기능 | 엔드포인트 | 설명 |
|---|
| 최신 환율 | /v1/latest | 가장 최근 영업일 환율 (매일 16:00 CET 업데이트) |
| 과거 환율 | /v1/{YYYY-MM-DD} | 특정 날짜의 환율 (1999년부터 제공) |
| 시계열 데이터 | /v1/{start}..{end} | 기간별 환율 추이 분석 |
| 통화 목록 | /v1/currencies | 지원 통화 코드 및 이름 |
기본 파라미터
| 파라미터 | 설명 | 기본값 | 예시 |
|---|
base | 기준 통화 (3자리 코드) | EUR | base=USD |
symbols | 대상 통화 (쉼표 구분) | 전체 | symbols=KRW,JPY |
amount | 변환할 금액 | 1 | amount=100 |
응답 형식
{
"amount": 100,
"base": "USD",
"date": "2024-01-15",
"rates": {
"KRW": 135050.00
}
}
지원 통화 (31개)
AUD, BGN, BRL, CAD, CHF, CNY, CZK, DKK, EUR, GBP,
HKD, HUF, IDR, ILS, INR, ISK, JPY, KRW, MXN, MYR,
NOK, NZD, PHP, PLN, RON, SEK, SGD, THB, TRY, USD, ZAR
주요 특징
✅ API 키 불필요 - 인증 없이 바로 사용
✅ 무제한 사용 - 사용량 제한 없음
✅ 무료 상업 이용 - 상업적 목적으로도 무료
✅ 신뢰할 수 있는 데이터 - 유럽중앙은행(ECB) 공식 데이터
✅ 10년 이상 운영 - 안정적인 서비스
✅ 자체 호스팅 가능 - Docker 이미지 제공
사용 시 주의사항
⚠️ 실시간 데이터 아님: 매일 16:00 CET에 한 번 업데이트
⚠️ 타임존 고려: UTC 기준 저장으로 시간대 차이 발생 가능
⚠️ 당일 데이터 불안정: 오늘 날짜 조회 시 데이터 변경 가능
⚠️ 주말/휴일: 최근 영업일 환율 반환
상세 문서
더 자세한 API 정보, 구현 예시, 에러 처리, 모범 사례는 다음 문서를 참조하세요:
📖 완전한 API 레퍼런스 - 모든 엔드포인트, 파라미터, 응답 형식, 구현 예시 (JavaScript/Python/Dart), 에러 처리, 캐싱 전략, 자체 호스팅 가이드 포함
테스트 스크립트
API 동작을 확인하기 위한 테스트 스크립트:
./scripts/test_frankfurter.sh
dart run scripts/test_frankfurter.dart
구현 예시 (빠른 참조)
JavaScript - 날짜별 환율 조회
async function getYesterdayRate(from, to) {
const yesterday = new Date();
yesterday.setDate(yesterday.getDate() - 1);
const dateStr = yesterday.toISOString().split('T')[0];
const response = await fetch(
`https://api.frankfurter.dev/v1/${dateStr}?base=${from}&symbols=${to}`
);
const data = await response.json();
return data.rates[to];
}
async function getWeekAgoRate(from, to) {
const weekAgo = new Date();
weekAgo.setDate(weekAgo.getDate() - 7);
const dateStr = weekAgo.toISOString().split('T')[0];
const response = await fetch(
`https://api.frankfurter.dev/v1/?base=&symbols=`
);
data = response.();
data.[to];
}
yesterdayRate = (, );
.();
weekAgoRate = (, );
.();
Python - 날짜별 환율 조회
import requests
from datetime import datetime, timedelta
def get_yesterday_rate(from_currency, to_currency):
yesterday = datetime.now() - timedelta(days=1)
date_str = yesterday.strftime('%Y-%m-%d')
url = f"https://api.frankfurter.dev/v1/{date_str}"
params = {'base': from_currency, 'symbols': to_currency}
response = requests.get(url, params=params)
data = response.json()
return data['rates'][to_currency]
def get_week_ago_rate(from_currency, to_currency):
week_ago = datetime.now() - timedelta(days=7)
date_str = week_ago.strftime('%Y-%m-%d')
url = f"https://api.frankfurter.dev/v1/{date_str}"
params = {'base': from_currency, 'symbols': to_currency}
response = requests.get(url, params=params)
data = response.json()
return data['rates'][to_currency]
yesterday_rate = get_yesterday_rate('USD', 'KRW')
print(f"어제: 1 USD = {yesterday_rate} KRW")
week_ago_rate = get_week_ago_rate('USD', 'KRW')
print(f"일주일 전: 1 USD = {week_ago_rate} KRW")
더 자세한 구현 예시와 에러 처리는 API 레퍼런스를 참조하세요.