결제 기능을 만들면서 돈이 실제로 어떻게 국경을 넘는지 궁금했던 적이 있다면, 그 답은 거의 항상 낯선 라틴어 이름을 가진 두 계좌와 연결됩니다. 바로 노스트로(nostro)와 보스트로(vostro)입니다. 이들은 모든 국제 송금, 해외 송금, 다중 통화 지급의 배후에 있는 배관입니다. 노스트로 계좌와 보스트로 계좌에 대한 대부분의 설명은 사전적 정의에서 멈춥니다. 이 가이드는 한 걸음 더 나아갑니다. 개념을 쉬운 말로 설명하고, 복식부기 예시를 처음부터 끝까지 따라가며, 그런 다음 환율 API를 사용해 이 잔액을 코드에서 모델링·평가·대사하는 방법을 보여 줍니다. 핀테크, 재무(트레저리), 회계 소프트웨어를 개발한다면, 이것이 바로 당신에게 필요한 사고 모델입니다.
노스트로 계좌와 보스트로 계좌란?
Nostro와 vostro는 이탈리아어(라틴어 경유)에서 왔습니다. nostro는 "우리의", vostro는 "너희의"라는 뜻입니다. 이 둘은 은행 관계의 반대편 두 쪽에서 본 같은 계좌에 대한 두 가지 이름표입니다.
- 노스트로 계좌는 "우리 돈이 너희에게 있다"입니다. 어떤 은행이 외국 은행에 개설하여 그 외화로 표시한 계좌입니다. 본국 은행의 장부에서는 자산입니다.
- 보스트로 계좌는 "너희 돈이 우리에게 있다"입니다. 자금을 보관하는 은행 관점에서 본 바로 그 같은 계좌입니다. 그 장부에서는 부채입니다.
개발자에게 핵심 통찰은 이것입니다. 노스트로와 보스트로는 서로 다른 두 계좌가 아니라, 두 관점에서 기술된 하나의 계좌다. A 은행이 B 은행에 있는 자행의 USD 노스트로라고 부르는 것을, B 은행은 A 은행을 위한 보스트로라고 부릅니다. 같은 잔액, 같은 거래, 두 개의 원장, 반대 부호입니다.
전형적인 예시입니다. 독일의 한 은행이 고객을 위해 미국 달러 지급을 해야 하지만, 미국에 지점도 없고 달러 청산에 대한 직접 접근도 없습니다. 그래서 미국의 코레스(환거래) 은행에 USD 계좌를 개설하고 그곳에 달러를 보관합니다.
- 독일 은행에게 그 USD 계좌는 노스트로입니다("우리 달러, 저 멀리에").
- 미국 은행에게 그 같은 계좌는 보스트로입니다("독일 측 달러, 여기 우리에게").
노스트로 대 보스트로: 핵심 차이
차이는 전적으로 관점에 있습니다. 이 표가 요약합니다.
| 속성 | 노스트로 계좌 | 보스트로 계좌 |
|---|---|---|
| 의미 | "우리 돈이 너희에게" | "너희 돈이 우리에게" |
| 누구의 관점 | 자금을 소유한 은행 | 자금을 보관하는 은행 |
| 어디에 개설 | 외국 코레스 은행 | 국내(보관) 은행 |
| 통화 | 외화 | 보관 은행의 현지 통화 |
| 재무상태표 처리 | 소유자에게 자산 | 보관자에게 부채 |
| 전형적 용도 | 외화 출금 결제 | 외국 은행이 현지 통화로 지급하도록 |
로로(loro) 계좌는 어디에 위치하는가
가끔 세 번째 용어인 로로(loro, "그들의")를 보게 됩니다. 로로 계좌는 새로운 종류의 계좌가 아니라, 다른 두 은행에 속한 계좌를 말할 때 한 은행이 사용하는 참조입니다. A 은행이 B 은행이 C 은행을 위해 보유한 계좌를 논한다면, A 은행은 그것을 로로 계좌라고 부릅니다. 이는 주로 여러 은행에 걸친 결제 체인에서 SWIFT 메시지의 명확성을 위해 중요하며, 직접 모델링할 일은 거의 없습니다.
이 계좌들이 존재하는 이유: 코레스(환거래) 은행 업무
모든 나라에 지점을 둔 은행도 없고, 모든 나라의 국내 청산 시스템에 직접 가입한 은행도 없습니다. 코레스 은행 업무가 이를 해결합니다. 더 작은 "응답 은행(respondent)"이 실제로 현지 접근권을 가진 더 큰 "코레스 은행(correspondent)"과 제휴하고, 그곳에 노스트로 계좌를 사전에 자금 예치합니다. 이제 응답 은행은 현지 인프라를 전혀 구축하지 않고도 그 통화로 지급을 제공할 수 있습니다.
하나의 대형 은행은 결제해야 하는 통화마다 하나씩, 전 세계에 수십 개의 노스트로 계좌를 유지할 수 있으며, 각각은 사전에 자금이 예치된 유동성 풀입니다. 반대편에서는 대형 코레스 은행이 전 세계 응답 은행들을 위해 수백 개의 보스트로 계좌를 운영합니다. 이 계좌들 사이에서 잔액을 이동시키는 지시는 표준화된 메시지로 SWIFT 네트워크를 통해 전달됩니다(점점 더 ISO 20022 형식으로).
그래서 "단순한" 국경 간 지급이 서너 개 은행을 거치고, 하루에서 사흘이 걸리며, 도중에 수수료와 환 스프레드로 일부를 잃을 수 있는 것입니다. 각 홉은 어딘가의 노스트로 또는 보스트로 잔액에 대한 차변과 대변입니다.
실제 예시: 노스트로/보스트로 쌍에 걸친 복식부기
돈을 따라가면 개념은 빠르게 구체화됩니다. FNBA(호주의 은행)가 CMB(미국의 은행)에 USD 노스트로를 보유한다고 합시다. FNBA는 합의된 환율로 고객 C에게 AUD 1,000,000을 팔고 USD 2,000,000을 받습니다.
FNBA의 원장에서(그 노스트로는 USD 자산):
Dr USD Nostro @ CMB 2,000,000 USD
Cr FX Trading (USD) 2,000,000 USD
Dr FX Trading (AUD) 1,000,000 AUD
Cr Customer C (AUD) 1,000,000 AUDCMB의 원장에서 그 같은 USD 계좌는 보스트로(FNBA에게 진 부채)입니다:
Dr Customer C (USD) 2,000,000 USD
Cr FNBA Vostro (USD) 2,000,000 USD거울상에 주목하세요. FNBA는 자신이 보유한 달러가 늘었음을 기록하려고 자행의 노스트로를 차기(debit)하고, CMB는 자신이 진 달러가 늘었음을 기록하려고 동일한 보스트로를 대기(credit)합니다. 두 은행의 계좌에 대한 관점을 더하면, 설계상 0으로 대사됩니다. 이 거울상이 바로 핵심이며, 정확히 당신의 대사 코드가 활용할 성질입니다.
개발자로서 노스트로/보스트로 잔액 모델링하기
재무, 원장, 결제 소프트웨어를 만든다면, 이 모델을 사용하기 위해 은행이 될 필요는 없습니다. 타인을 대신해 여러 통화로 잔액을 보유하는 모든 시스템 — 다중 통화 지갑, 마켓플레이스 정산 엔진, 네오뱅크 원장 — 은 같은 문제에 직면합니다. 여러 통화로 실제 잔액을 보유하고 있으며, 그 합산 가치를 하나의 기준 통화로 보고해야 합니다.
최소한의 스키마부터 시작하세요. 각 노스트로형 잔액은 그저 통화, 금액, 그리고 그것을 보관하는 상대방입니다:
CREATE TABLE nostro_balances (
id BIGSERIAL PRIMARY KEY,
correspondent TEXT NOT NULL, -- who holds the funds
currency CHAR(3) NOT NULL, -- ISO 4217 code, e.g. 'USD'
balance NUMERIC(20,4) NOT NULL DEFAULT 0,
updated_at TIMESTAMPTZ NOT NULL DEFAULT now()
);두 개 이상의 통화를 보유하는 순간 보고상의 질문이 생깁니다. 지금 이 순간, 합계가 우리 기준 통화로 얼마의 가치가 있는가? USD, EUR, JPY를 그냥 더할 수는 없습니다. 먼저 각 잔액을 현재 환율로 평가해야 합니다. 바로 여기서 통화 API가 제 몫을 합니다. 다음은 선택한 기준 통화로 일련의 노스트로 잔액을 평가하는 Python 함수입니다:
import requests
FINEXLY_KEY = "YOUR_API_KEY"
def value_nostros(balances, home="EUR"):
"""balances: dict of {currency: amount}. Returns total in `home`."""
symbols = ",".join(c for c in balances if c != home)
resp = requests.get(
"https://api.finexly.com/v1/latest",
params={"base": home, "symbols": symbols},
headers={"Authorization": f"Bearer {FINEXLY_KEY}"},
timeout=5,
)
resp.raise_for_status()
rates = resp.json()["rates"] # e.g. {"USD": 1.0842, "JPY": 161.4}
total = 0.0
for currency, amount in balances.items():
if currency == home:
total += amount
else:
# rates[X] = units of X per 1 home unit, so divide to convert back
total += amount / rates[currency]
return round(total, 2)
nostros = {"USD": 2_000_000, "JPY": 500_000_000, "GBP": 750_000}
print(value_nostros(nostros, home="EUR"))이 API 호출은 깔끔한 환율 객체 — {"base": "EUR", "date": "2026-08-08", "rates": {"USD": 1.0842, ...}} — 를 반환하므로, 각 외화 잔액을 기준 통화로 되돌리는 환산은 나눗셈 한 번입니다. 엔드포인트와 파라미터의 전체 설명은 환율 API 문서를 참고하세요. 처음이라면 무료 통화 API 요금제로도 전체를 프로토타이핑하기에 충분합니다.
노스트로 대사와 환차익/환차손
실제 노스트로 운영에서는 두 가지 문제가 지배적이며, 둘 다 명백히 개발자의 일입니다.
1. 대사. 노스트로와 그 거울상인 보스트로는 일치해야 하므로, 대사란 그 계좌에 대한 내부 기록을 코레스 은행이 보내는 명세서(오늘날 보통 SWIFT MT940/camt.053 명세서)와 맞춰 보는 것을 의미합니다. 당신 장부의 각 분개에는 상대 장부에 대응하는 분개가 있어야 합니다. 불일치(브레이크) — 한쪽에는 있지만 다른 쪽에는 없는 분개 — 는 유동성이나 컴플라이언스 문제가 되기 전에 조사해야 할, 누락·중복·지연된 거래를 나타냅니다. 위 예시의 거울상 성질이 바로 자동 매칭을 가능하게 합니다.
2. 환 재평가. 노스트로 잔액은 외화로 보유되지만, 보고는 기준 통화로 합니다. 환율이 움직이므로, 고정된 외화 잔액의 기준 통화 가치는 매일 변합니다. 그 차이가 미실현 환차익 또는 환차손이며, 회계 기준은 이를 인식하도록 요구합니다. 패턴은 이렇습니다. 잔액이 설정된 시점의 환율을 스냅숏으로 남기고, 오늘의 환율과 비교하여, 그 차이를 계상합니다.
const FINEXLY_KEY = "YOUR_API_KEY";
async function fxGainLoss(currency, amount, rateAtBooking, home = "EUR") {
const url = `https://api.finexly.com/v1/latest?base=${home}&symbols=${currency}`;
const res = await fetch(url, {
headers: { Authorization: `Bearer ${FINEXLY_KEY}` },
});
const { rates } = await res.json();
const currentRate = rates[currency]; // currency units per 1 home unit
const valueAtBooking = amount / rateAtBooking;
const valueNow = amount / currentRate;
return {
home,
valueAtBooking: +valueAtBooking.toFixed(2),
valueNow: +valueNow.toFixed(2),
unrealizedPnl: +(valueNow - valueAtBooking).toFixed(2),
};
}
// 2,000,000 USD booked at 1.0800, revalued at today's rate
fxGainLoss("USD", 2_000_000, 1.08).then(console.log);기간 말 보고와 감사 추적을 위해서는 실시간뿐 아니라 과거 환율도 필요합니다 — 과거 특정 일자의 정확한 종가 환율을 가져오는 것입니다. 그것이 과거 환율 엔드포인트의 용도이며, 몇 달 뒤에 월말 재평가를 재현하는 데 필수적입니다. 잔액 수와 대사 빈도가 늘어남에 따라, 요청량을 산정하려면 요금제를 확인하세요. 수십 개 통화를 몇 분마다 갱신하는 재무 대시보드는 금세 쌓입니다.
이 잔액 위에서 최종 사용자에게 실시간 환산을 노출하고 싶다면 — 예를 들어 고객이 자기 통화로 표시된 지급액을 볼 수 있게 하려면 — 호스팅형 통화 변환기나 동일한 latest 엔드포인트가 이를 직접 구동합니다.
현대적 대안: 노스트로/보스트로의 향방
노스트로/보스트로 모델은 수 세기 전부터 있었고 여전히 국경 간 가치의 대부분을 움직이지만, 그 마찰 — 수십 개 계좌에 묶인 사전 예치 유동성, 여러 날에 걸친 결제, 불투명한 수수료 — 이 업계를 대안으로 밀어붙였습니다:
- SWIFT gpi는 계좌를 대체하지 않고 기존 코레스 레일 위에 종단 간 추적과 당일 결제를 추가합니다.
- 스테이블코인과 토큰화 예금은 각 통화로 노스트로를 사전 예치하지 않고도 기관이 몇 분 만에 결제할 수 있게 합니다. 다만 규제 명확성은 아직 따라잡는 중입니다.
- CBDC와 도매 결제 파일럿(여러 중앙은행이 국경 간 회랑을 시험 중)은 중개자 사슬을 통째로 단축하는 것을 목표로 합니다.
그래도 앞으로 몇 년간 당신이 만들 대부분의 소프트웨어에서는, 이 계좌들 — 그리고 위의 대사·재평가 로직 — 은 어디로도 가지 않습니다. 그것들을 이해하는 것은 오래 유효한 기술입니다.
자주 묻는 질문
노스트로 계좌와 보스트로 계좌의 차이는 무엇인가요? 둘은 두 쪽에서 본 같은 계좌입니다. 노스트로는 소유 은행 관점에서 "우리 돈이 너희에게"(외화 표시 자산)이고, 보스트로는 보관 은행 관점에서 "너희 돈이 우리에게"(현지 통화 표시 부채)입니다.
노스트로 계좌는 자산인가요, 부채인가요? 노스트로 계좌는 소유 은행의 재무상태표에서 자산입니다 — 코레스 은행에 예치한 자행의 자금을 나타냅니다. 거울상인 보스트로는 그 자금을 보관하는 은행에게는 부채입니다.
은행은 왜 노스트로 계좌와 보스트로 계좌가 필요한가요? 어떤 은행도 모든 나라에 지점이나 직접 청산 접근권을 갖고 있지 않기 때문입니다. 노스트로/보스트로 잔액으로 뒷받침되는 코레스 관계는 은행이 현지 거점이 없는 통화로도 지급을 주고받을 수 있게 합니다.
노스트로 계좌는 어떻게 대사하나요?
그 계좌의 내부 원장을 코레스 은행의 명세서(예: SWIFT camt.053)와 맞춰 봅니다. 각 분개는 양쪽에 나타나야 하며, 매칭되지 않는 분개("브레이크")는 조사합니다. 노스트로와 보스트로는 서로 거울상이므로, 두 기록은 합해서 0이 되어야 합니다.
통화 API는 노스트로/보스트로 회계에 어떻게 도움이 되나요? 잔액은 여러 외화에 있지만, 보고는 하나의 기준 통화로 합니다. 통화 API는 각 잔액을 평가하고, 미실현 환차익/환차손을 계산하며, 일관된 다중 통화 보고서를 만드는 데 필요한 실시간 및 과거 환율을 제공합니다.
직접 사용해 보기
실제 환율로 다중 통화 잔액을 평가·대사할 준비가 되셨나요? 무료 Finexly API 키 받기 — 신용카드가 필요 없습니다. 월 1,000회 무료 요청으로 시작해, 170개 이상 통화의 실시간 및 과거 환율을 가져오고, 재무 로직이 성장함에 따라 업그레이드하세요.
Explore More
Vlado Grigirov
Senior Currency Markets Analyst & Financial Strategist
Vlado Grigirov is a senior currency markets analyst and financial strategist with over 14 years of experience in foreign exchange markets, cross-border finance, and currency risk management. He has wo...
View full profile →