성경 출판사가 자체 환율 서비스를 운영하는 이유
국경을 넘어 상품을 판매하는 기업이라면 누구나 반복되는 작지만 동일한 문제에 직면합니다. '이 금액이 오늘날 얼마의 가치를 지니는가, 그리고 청구서가 작성된 당일에는 얼마의 가치였는가?' 달러, 유로, 파운드로 청구하는 노르웨이 출판사의 경우, 이 질문은 일주일에 몇 번씩 발생합니다. 회계, 가격 책정, 계약서 작성, 견적서 작성을 돕는 AI 어시스턴트와의 대화 등에서 말이죠.
시중에는 수백 개의 환율 API가 존재합니다. 그럼에도 저희는 자체 서비스를 구축했습니다. 이 글은 구축 이유, 소요 비용, 기능, 그리고 다른 서비스를 사용해야 하는 경우에 대한 솔직한 기록입니다.
대부분의 환율 가이드가 옳게 짚는 점, 그리고 놓치는 점
통화 API를 비교할 때 대개 지원 통화 수, 업데이트 빈도, 1,000회 호출당 비용을 기준으로 순위를 매깁니다. 구매자 입장에서는 적절한 질문일 수 있습니다. 하지만 오랫동안 유지할 인프라를 구축하는 입장에서는 잘못된 질문입니다.
흔히 묻지 않는 질문은 바로 이것입니다. '단일 진실 공급원(source of truth)은 누구이며, 데이터가 고시되지 않는 날에는 무슨 일이 일어나는가?' 거의 모든 상용 환율 피드는 데이터 공백을 부드럽게 메웁니다. 중앙은행이 일요일에 아무것도 고시하지 않아도, 고객에게 빈 응답은 버그처럼 보이기 때문에 API는 여전히 숫자를 반환합니다. 그 숫자는 사실로 위장된 보간값(interpolation)일 뿐이며, 일단 원장에 기록되고 나면 둘을 구분할 수 없게 됩니다.
회계와 계약에 있어서는 누락된 환율이 지어낸 환율보다 훨씬 더 유용하다는 것이 저희의 결론이었습니다.
구매하는 대신 자체 구축한 이유
중요도 순으로 세 가지 이유가 있습니다.
단일 진실 공급원. Norges Bank는 공식 노르웨이 크로네 환율을 고시합니다. 노르웨이 기업에게 이 수치는 과세 당국, 감사인, 법원 모두가 인정하는 공식 수치입니다. 다른 모든 피드는 중간 유통자를 거친 사본에 불과합니다.
자체 연산에 대한 과금 방지. 이 서비스는 가격 책정, 청구서 발행, 보고 등 다른 Publifye 시스템에서 발생하는 수천 건의 내부 호출을 처리합니다. 저희는 중앙은행이 무료로 고시하는 수치를 사용하는 데 호출당 요금이 매겨지는 것을 원치 않았습니다.
AI 어시스턴트의 직접적인 필요성. 저희 인프라 전반의 모든 서비스는 Model Context Protocol을 지원하므로, 어시스턴트가 훈련 데이터에서 기억을 떠올리는 대신 대화 도중 실제 환율을 직접 조회할 수 있습니다. AI가 기억해 낸 환율은 날짜를 알 수 없는 환율이며, 이는 환율 데이터가 전혀 없는 것보다 더 나쁩니다.
이 서비스의 실체
Currency Exchange는 저희가 운영하는 가장 작은 규모의 서비스입니다. 매일 Norges Bank SDMX API로부터 데이터를 동기화하며, 공개 웹사이트, 가벼운 읽기 전용 웹 API, AI 어시스턴트용 MCP 도구라는 세 가지 방식으로 결과를 제공합니다.
| Property | What it is |
|---|---|
| Source | Norges Bank SDMX REST API, the official Norwegian rates |
| Currencies | 38 against the krone, including the I-44, TWI and IMF Special Drawing Rights indices |
| History | Back to roughly 1980, with 326,970 daily observations stored |
| Publication | Norges Bank posts around 16:00 CET on business days |
| Gaps | Left as gaps; the service never interpolates |
| Buying-power index | 202 countries from World Bank data, 1990 to 2025 |
| Interfaces | Website, read-only JSON API, and eight MCP tools |
공백을 채우지 않겠다는 원칙은 다른 모든 설계의 기준이 되는 결정입니다. 노르웨이 공휴일에는 환율이 고시되지 않으며, 서비스는 이를 있는 그대로 알립니다. 주말에 금액을 환산하는 경우, 최대 5일 전까지 거슬러 올라가 마지막으로 실제 고시된 환율을 찾고 어느 날짜의 환율을 사용했는지 명시합니다.
엔지니어링: 소규모 서비스의 안정적인 운영 비결
운영하기 지루할 정도로 손이 가지 않아야 구축할 가치가 있는 서비스입니다. 세 가지 설계 선택이 이 서비스를 단순하고 안정적으로 만듭니다.
네트워크 없이 시작되는 기동
전체 환율 이력이 압축된 데이터 형태로 바이너리 내부에 포함되어 배포되므로, 새 컨테이너가 시작되는 즉시 정확한 응답을 제공할 수 있습니다. 이후 데이터베이스로부터 캐시를 예열(warm up)하고, 백그라운드에서 Norges Bank의 누락된 데이터를 보충합니다. 서비스가 실행 중이면서 잘못된 데이터를 반환하는 공백 시간은 존재하지 않습니다.
2계층 캐싱 구조
모든 읽기 작업은 보유한 모든 환율이 저장된 인메모리 맵에서 이루어집니다. 뒤에 있는 데이터베이스는 영구 스토리지이자 쓰기 경로일 뿐, 읽기 경로가 아닙니다. 따라서 환율 조회는 메모리 맵 조회에 불과합니다.
날조가 아닌 침묵을 택하는 장애 대응
Norges Bank에 연결할 수 없는 경우, 어제의 데이터는 정확한 상태로 유지되고 오늘의 데이터는 단순히 비어 있게 됩니다. 코드 경로 어디에도 임의로 숫자를 만들어내는 로직은 없습니다.
구매력 평가 지수: 통화가 아닌 국가에 맞춘 가격 책정
가격을 환산하는 것은 단순한 산수이지만, 제품의 가격을 책정하는 것은 그렇지 않습니다.
249크로네짜리 책은 오슬로에서는 평범한 가격이지만 마닐라에서는 매우 비쌉니다. 환율만으로는 이러한 맥락을 알 수 없습니다. 따라서 이 서비스는 세계은행 데이터를 기반으로 구축된 202개국의 구매력 평가 지수도 함께 제공하며, 이를 통해 저희 스토어는 단순히 숫자를 환산하는 것이 아니라 현지 구매력에 맞춰 가격을 조정할 수 있습니다.
이는 통화만의 문제가 아니기 때문에 일반적인 통화 API에서는 얻을 수 없는 요소입니다. 이것이 바로 특정 국가에서 실제로 판매가 이루어지는 것과 단순히 노출만 되는 것의 차이입니다.
AI가 이를 활용하는 방식
서비스를 어시스턴트에 연결하면 다음과 같은 기능을 즉시 활용할 수 있습니다.
| Tool | What it answers |
|---|---|
| get_rate | The rate for one currency on one date |
| convert | An amount from one currency to another, cross-rated through the krone |
| get_rates_range | A series over a date range, for charts and trends |
| get_all_rates | Every rate on a single date |
| list_currencies | The 38 codes and their names |
| get_buying_power | The buying-power index for one country |
| list_buying_power | The full country index |
| service_status | Health, version, and when it last synced |
생성해야 할 API 키나 설치할 클라이언트는 없습니다. 연결 방식은 다른 인프라 서비스와 동일하며, 자세한 내용은 AI를 Darash, Junifye, Lexifye에 연결하는 방법에서 설명합니다.
다른 서비스를 사용해야 하는 경우
사용하면서 뒤늦게 발견하게 하기보다는 솔직하게 말씀드리는 편이 낫다고 봅니다.
실시간 매매 환율이 필요한 경우. 이 서비스의 환율은 영업일마다 한 번씩 고시되는 일일 기준환율입니다. 실제 금융 거래를 실행하는 경우라면 중앙은행 기준환율이 아니라 시장 데이터 피드가 필요합니다.
크로네 중심의 기준이 필요 없는 경우. 이곳의 모든 환율은 노르웨이 크로네를 기준으로 고시됩니다. 다른 두 통화 간의 교차 환율은 크로네를 거쳐 계산되므로, 계산상 정확하긴 하지만 변환 단계가 하나 더 추가됩니다. 비즈니스가 노르웨이와 전혀 관련이 없다면 유로나 달러를 기준으로 삼는 소스가 더 적합합니다.
제공되지 않는 통화가 필요한 경우. Norges Bank에서 고시하는 통화는 38개뿐입니다. 전 세계의 모든 통화를 다루지는 않습니다.
출판사와 이 서비스가 무슨 상관인가
성경을 출판하는 회사가 환율 서비스를 운영하는 이유에 대해 의문을 품는 것은 당연합니다.
답은 '인프라도 곧 제품'이라는 점입니다. 저희는 자체 스토어를 통해 여러 국가에서 다양한 통화로 도서를 판매합니다. 올바른 가격을 책정하려면 환율과 구매력 데이터가 필요합니다. 청구서 발행에는 감사인이 인정할 수 있는 특정 과거 일자의 공식 환율이 필요합니다. 자체 AI 어시스턴트가 금액 관련 질문에 답할 때 숫자를 환각하지 않아야 합니다.
저희 인프라의 모든 서비스는 이와 같은 이유로 존재합니다. 성경 엔진은 눈에 보이는 절반에 불과합니다. Darash는 히브리어 및 그리스어 연구를 수행하고, Junifye는 책을 출판합니다. 그리고 이 작은 서비스는 계약서가 서명되던 날 1달러의 가치가 얼마였는지를 조용히 답해 줍니다.
FAQ
환율 데이터의 출처는 어디인가요?
노르웨이 중앙은행인 Norges Bank의 공개 SDMX API에서 가져옵니다. 노르웨이 공식 기준환율입니다.
업데이트 주기는 어떻게 되나요?
영업일마다 1회, 중앙유럽 표준시(CET) 약 16:00에 고시됩니다. 주말이나 노르웨이 공휴일에는 고시 자체가 이루어지지 않으므로 환율 데이터가 제공되지 않습니다.
주말 날짜의 환율을 요청하면 어떻게 되나요?
환산 시 최대 5일 전까지 거슬러 올라가 가장 최근에 고시된 환율을 가져오며, 실제로 사용된 날짜를 알려줍니다. 별도의 안내 없이 임의로 지어낸 숫자를 제공하는 일은 절대 없습니다.
과거 이력 데이터는 언제까지 조회할 수 있나요?
Norges Bank 시계열 데이터가 제공되는 대략 1980년까지 소급됩니다. 이는 38개 통화에 걸쳐 약 326,970건의 일별 관측치에 해당합니다.
무료로 이용할 수 있나요?
웹사이트와 읽기 전용 API는 공개되어 있어 로그인 없이 이용할 수 있습니다. MCP를 통한 AI 접근의 경우 평가용 무료 플랜이 제공되며, 그 이상은 유료 플랜으로 운영됩니다.
회계 용도로 사용해도 되나요?
바로 그 용도로 구축되었습니다. 환율은 고시된 정확한 날짜의 노르웨이 공식 환율이며, 데이터가 없는 날짜에 대해 환율을 임의로 조작하지 않습니다.
구매력 평가 지수는 무엇에 쓰이나요?
가격 책정에 사용됩니다. 202개국에 대한 세계은행 데이터를 활용하여 특정 금액이 해당 국가에서 실제로 어느 정도의 가치를 지니는지 나타내므로, 단순한 환율 환산이 아니라 현지 구매력에 맞춰 가격을 조정할 수 있습니다.
결론
Currency Exchange는 대단히 기교를 부린 서비스가 아닙니다. 하루에 한 번 공개 데이터셋을 가져오고, 결코 임의로 추정하지 않으며, 그 결과를 웹사이트, API, AI 어시스턴트에 전달할 뿐입니다.
바로 그것이 핵심입니다. 인프라에서 평소에 전혀 신경 쓸 필요가 없는 구성요소야말로 제대로 구축된 것입니다. 서비스가 어떻게 작동하는지 확인하고 싶으시다면 환율과 환율 계산기는 공개되어 있으며 계정 없이도 바로 둘러보실 수 있습니다.
새로운 것을 출시하면 이메일로 알려드립니다. 뉴스레터 구독하기