실시간 금 가격 차트는 어떻게 작동할까?
실시간 금 가격 차트가 현물 호가, OHLC 바, UTC 타임스탬프, 제어된 폴링을 결합하는 방식을 TypeScript와 SVG 예제로 알아봅니다.
읽기 →Reddit에서 반복해서 나오는 실시간 금 스트리밍 질문에 답한다. 금 WebSocket이 존재하는지, goldprice.dev의 XAU·XAG 틱 스트림이 처음부터 끝까지 어떻게 동작하는지, 그리고 실제로 WebSocket을 제공하는 다른 API는 어디인지(대부분의 금속 API는 폴링만 한다).
몇 주에 한 번씩 r/algotrading이나 r/options에서 똑같은 질문의 변주가 올라온다. 금 가격에 대한 WebSocket이 존재하는가, 아니면 매초 REST 엔드포인트를 폴링하는 수밖에 없는가. 질문하는 사람들은 대개 가격이 움직이는 순간 그 값을 받아야 하는 봇이나, 실시간 XAU 시세를 보여주는 대시보드를 만들고 있고, REST API를 1초 루프로 두드리는 방식이 옳지 않다고 느낀다. 그 느낌은 맞다. 폴링은 요청 쿼터를 태우고, 평균적으로 폴링 간격의 절반만큼 지연을 더하며, 그러고도 두 요청 사이에 찍힌 틱은 여전히 놓친다.
짧은 답: 그렇다, goldprice.dev는 금과 은의 틱이 찍힐 때마다 WebSocket으로 밀어낸다. 더 긴 답은 애초에 어떤 API가 스트리밍을 제공하는가인데, 전용 금 API 대부분은 그렇지 않기 때문이다. 둘 다 아래에 있다.
wss://api.goldprice.dev/v1/stream은 Realtime Pro 플랜의 WebSocket이다. 연결하고, 키로 인증하고, 원하는 심볼을 구독하면, 가격이 갱신될 때마다 서버가 프레임을 하나씩 보낸다. 금(XAU-USD-SPOT)과 은(XAG-USD-SPOT)이 현재의 두 실시간 심볼이며, 하나의 연결로 최대 여덟 개까지 구독할 수 있다.
틱 하나는 이렇게 생겼다:
{"type":"tick","symbol":"XAU-USD-SPOT","price":"3976.379","conf":"0.829","computed_at":"2026-07-01T02:13:25Z"}
price는 십진 문자열이므로 부동소수점 반올림 오차를 물려받지 않고 파싱할 수 있다. conf는 그 가격의 신뢰 구간이며, 기반 소스들이 일치할수록 좁아지고 어긋날수록 넓어진다. computed_at은 서버 쪽에서 값이 계산된 시점으로, 여기에 대고 자신의 종단 간 지연을 측정하면 된다.
메시지 세 개면 스트리밍이 시작된다: 연결, 인증, 구독.
import WebSocket from "ws";
const ws = new WebSocket("wss://api.goldprice.dev/v1/stream");
ws.on("open", () => {
ws.send(JSON.stringify({ action: "auth", api_key: process.env.GOLDPRICE_API_KEY }));
});
ws.on("message", (raw) => {
const msg = JSON.parse(raw);
if (msg.type === "welcome") {
// 인증 완료. 이제 원하는 것을 말한다.
ws.send(JSON.stringify({ action: "subscribe", symbols: ["XAU-USD-SPOT", "XAG-USD-SPOT"] }));
} else if (msg.type === "tick") {
console.log(`${msg.computed_at} ${msg.symbol} ${msg.price}`);
}
});
ws.on("close", (code) => {
// 4401 키 오류/누락, 4403 Realtime Pro 미만 플랜, 4429 연결 수 초과.
console.error("stream closed", code);
});
연결하면 서버는 당신의 등급과 심볼 한도가 담긴 welcome 프레임을 보낸다. 구독한 뒤에는 subscribed 확인 응답과 함께 각 심볼의 가장 최근 가격 스냅샷을 즉시 보내주므로, 다음 틱이 도착하기 전에도 빈 필드 대신 렌더링할 값이 있다. 약 20초 동안 아무것도 찍히지 않으면(한산한 시장이거나 주말이거나), {"type":"heartbeat"}를 받는다. 연결이 멈춘 게 아니라 살아 있다는 것을 알 수 있게 해준다.
재연결은 각자의 몫이다. 소켓이 끊기면 새로 열고 auth와 subscribe를 다시 보내야 한다. 사람들이 가장 자주 놓치는 단계가 바로 이것이다. 재연결은 하는데 재구독을 잊고서, 왜 틱이 하나도 안 들어오는지 의아해한다.
이건 짚고 넘어갈 가치가 있다. "실시간 금 가격 API"라는 말이 느슨하게 쓰이는 탓에, 대부분의 결과는 스트림이 아니라 새로고침이 빠른 폴링이기 때문이다. 2026년 중반 기준으로 흔히 거론되는 이름들의 공개 문서를 훑어보았다. 두 그룹으로 갈린다.
전용 금속 API는 거의 다 REST 전용이다. GoldAPI.io, MetalpriceAPI, Metals.dev는 어떤 등급에서도 WebSocket이 없다. 정해진 간격으로 폴링해야 한다. Metals-API는 하나를 명시하고 있지만, 연 약 $25,000부터 시작하는 맞춤형 Enterprise 계약 안에서만 제공되고 공개된 스트리밍 문서도 없어서, 일반적인 프로젝트라면 사실상 선택지가 아니다. Alpha Vantage는 금속을 훨씬 넘어서는 범위를 다루지만, 최상위 플랜에서도 여전히 REST 전용이다.
실제로 금을 스트리밍하는 API는 폭넓은 시장 데이터 플랫폼들이다. 그곳에서는 금이 수만 개 심볼 중 하나일 뿐이고, 스트리밍은 더 높은 등급 뒤에 놓여 있다.
| API | WebSocket | WebSocket에 금이 있는가 | 스트리밍 진입 지점 |
|---|---|---|---|
| goldprice.dev | 있음 | 있음 (XAU, XAG) | Realtime Pro, $80/월 |
| Twelve Data | 있음 | 있음 (XAU/USD가 그들 문서의 예시) | 실제 스트리밍 크레딧은 연간 결제 Pro 약 $191/월부터 |
| TraderMade | 있음 | 있음 (XAU/USD) | 유료 등급 약 £599/월부터 |
| Finage | 있음 | 있음 (XAU/USD, forex/CFD 피드를 통해) | 유료 WebSocket 약 $299/월부터 |
| Polygon.io (현 Massive) | 있음 | forex 통화쌍은 지원, 문서상 XAU 포함 여부는 불명확 | 유료 currencies 등급 |
| Finnhub | 있음 (무료 등급 포함) | 브로커 forex는 지원, XAU는 명확히 문서화되어 있지 않음 | 무료, 최대 50개 심볼 |
| GoldAPI.io | 없음 | — | REST 폴링만 |
| MetalpriceAPI | 없음 | — | REST 폴링만 |
| Metals.dev | 없음 | — | REST 폴링만 |
| Metals-API | Enterprise 전용 | 미문서화 | 연 약 $25,000 맞춤형 |
| Alpha Vantage | 없음 | — | REST 폴링만 |
(공개 문서, 2026년 중반 기준. 경쟁사의 가격과 커버리지는 계속 바뀌므로, 정하기 전에 각 사의 최신 페이지를 확인하라.)
이 표가 보여주는 것은 하나의 공백이다. 금을 WebSocket으로 받고 싶다면, 지금까지의 선택지는 대체로 둘 중 하나였다. 금이 forex의 곁다리에 불과하고 스트리밍이 월 $200 근처에서 시작하는 대형 다자산 플랫폼이거나, 폴링을 강요하는 금속 API였다. goldprice.dev는 금속을 중심에 두고, $80에 금과 은을 스트리밍한다.
WebSocket은 연결을 계속 열어 두고 1초 미만의 움직임에 신경 쓸 때 제값을 한다. 실시간 시세, 체결 화면, 임계값을 지켜보는 봇 같은 경우다. 몇 분마다 한 번씩 가격을 확인하는 작업이라면, /v1/spot/XAU-USD-SPOT의 평범한 REST 엔드포인트가 더 단순하고 소켓을 유지할 필요도 없다. 그리고 Realtime Pro 플랜 없이 푸시를 원한다면, Pro 등급에는 /v1/prices/stream의 Server-Sent Events 스트림이 있다. Server-Sent Events로 실시간 금 가격 스트리밍하기에서 그쪽을 다루는데, WebSocket 클라이언트가 아예 필요 없다.
아직 API를 도입할 가치가 있는지 저울질하는 중이라면, Reddit의 금 가격 API: 개발자 질문에 답한다에서 무료 등급, 한도, 그 숫자가 어디서 오는지를 다룬다. 시작은 무료 키 발급 1분이면 된다. WebSocket 자체는 Realtime Pro에 있다.
관련 가이드
실시간 금 가격 차트가 현물 호가, OHLC 바, UTC 타임스탬프, 제어된 폴링을 결합하는 방식을 TypeScript와 SVG 예제로 알아봅니다.
읽기 →확정된 XAU/USD 일별 바(bar)와 과거 환율 관측치를 결합해, 당시에는 알 수 없었던 환율을 실수로 사용하지 않고 현지 통화로 금 전략을 테스트한다.
읽기 →iframe 하나로 WordPress에 무료로 설정 가능한 실시간 금 시세 위젯을 추가한다. Gutenberg와 Elementor에서 모두 작동하며, API 키도 플러그인도 필요 없다.
읽기 →goldprice.dev
실시간 금 시세, 과거 OHLC 데이터, 다중 소스 집계 — REST 및 SSE로 제공됩니다.