JavaScript와 Node.js로 통화 변환하기
fetch로 환율을 받고 JSON 결과로 계산한 뒤 currency.js로 금액과 표시 형식을 처리합니다.
브라우저에서는 키 없이 시작할 수 있습니다. Node.js와 서버에서는 키를 환경 변수에 두고 source와 관측 시각도 저장하세요.
핵심 요점
fetch는 Node 18+, Deno, Bun, 최신 브라우저에서 동작합니다. currency.js는 금액과 형식을 처리하며 환율을 가져오지는 않습니다. HTTP 상태를 확인하고 429에서는 Retry-After를 따르세요. 필요하면 source와 effective_at을 함께 표시하세요. 브라우저에서 호출하기
작은 계산기나 테스트라면 키 없는 호출로 충분합니다. 필요한 symbols만 요청하고 timeout을 설정하세요.
키를 서버로 옮기기
실제 애플리케이션은 Node.js, Route Handler 또는 서버 서비스에서 호출해야 합니다. 키는 서버 환경에만 둡니다.
금액 계산과 표시
currency.js는 금액, 정밀도, 형식을 다룹니다. 먼저 API에서 환율을 받은 뒤 금액을 계산하세요.
신선도와 오류 읽기
sources, effective_at, source, market_session을 확인하세요. 429에서는 물러났다가 재시도하고 환율은 지표값으로 취급합니다.
자주 묻는 질문
javascript · no keycopy
const response = await fetch("https://api.exchangerate.dev/v1/latest/USD?symbols=EUR,GBP", {
signal: AbortSignal.timeout(10_000),
});
if (!response.ok) throw new Error(`HTTP ${response.status}; Retry-After: ${response.headers.get("Retry-After")}`);
const data = await response.json();
console.log(data.rates.EUR);
console.log(data.sources.EUR, data.effective_at.EUR);
console.log(data.market_session);javascript · authenticated call with error handlingcopy
// Node.js server only. Never put an account key in browser code.
const KEY = process.env.EXCHANGERATE_API_KEY;
if (!KEY) throw new Error("Set EXCHANGERATE_API_KEY on your server");
async function getLatest(base = "USD") {
const response = await fetch(`https://api.exchangerate.dev/v1/latest/${encodeURIComponent(base)}`, {
headers: { Authorization: `Bearer ${KEY}` },
redirect: "error",
signal: AbortSignal.timeout(10_000),
});
if (!response.ok) throw new Error(`HTTP ${response.status}; Retry-After: ${response.headers.get("Retry-After")}`);
return response.json();
}
const data = await getLatest("USD");
console.log(data.rates.GBP, data.effective_at.GBP);javascript · convert 100 USD to EURcopy
// Node.js server only.
const KEY = process.env.EXCHANGERATE_API_KEY;
if (!KEY) throw new Error("Set EXCHANGERATE_API_KEY on your server");
const response = await fetch("https://api.exchangerate.dev/v1/convert/USD/EUR/100", {
headers: { Authorization: `Bearer ${KEY}` },
redirect: "error",
signal: AbortSignal.timeout(10_000),
});
if (!response.ok) throw new Error(`HTTP ${response.status}; Retry-After: ${response.headers.get("Retry-After")}`);
const data = await response.json();
console.log(data.rate, data.converted);JavaScript · currency.jscopy
import currency from "currency.js";
const response = await fetch("https://api.exchangerate.dev/v1/latest/USD?symbols=EUR", {
signal: AbortSignal.timeout(10_000),
});
if (!response.ok) throw new Error(`HTTP ${response.status}`);
const data = await response.json();
const rate = data.rates.EUR;
if (!Number.isFinite(rate) || rate <= 0) throw new Error("Invalid rate");
const euros = currency("100.00", { precision: 2, symbol: "€" }).multiply(rate);
console.log(euros.format());