---
title: FX 히스토리
description: 과거 통화 변환에 사용되는 로컬 FX 환율 캐시를 조회합니다. Firma sync (또는 firma sync fx)로 FRED에서 채웁니다. KRW, JPY, EUR, CNY, GBP, HKD, INR, TWD에 대해 "USD 1당 외화" 형태로 저장됩니다.
---

export const usageFeatures = [
  {
    icon: '📊',
    title: 'show balance / show flow',
    desc: <>각 항목은 자기 날짜의 환율로 변환됩니다. 출력 푸터에 <code>FX @ 2026-03-31: 1 USD = 1523.5 KRW</code>가 표시되어 변환 과정을 검증할 수 있습니다.</>,
  },
  {
    icon: '📈',
    title: 'report (시계열)',
    desc: '각 기간은 해당 시점의 환율로 집계됩니다. 순자산 추세는 "오늘 USD 가치 × 오늘 환율"이 아니라 실제로 그 시점에 보유했던 홈 통화 기준 가치를 반영합니다.',
  },
  {
    icon: '💼',
    title: 'show portfolio Net Worth',
    desc: '가장 최근 자산 기간의 과거 환율을 사용. 포트폴리오 시가(현재 보유 자산)는 실시간 환율을 그대로 사용. 두 개념은 구분됩니다.',
  },
];

<Section label="firma show fx">
인자 없이 실행하면 캐시의 통화별 커버리지를 보여줍니다. 통화별 행 수와 날짜
범위. 백필이 완료됐고 캐시가 가장 이른 항목 날짜를 포함하는지 검증할 때
유용합니다.

<div className="terminal">
  <div className="terminal-line">
    <span className="term-prompt">$</span>
    <span className="term-cmd">firma show fx</span>
  </div>
  <table className="term-table">
    <thead>
      <tr><th>CURRENCY</th><th>ROWS</th><th>FIRST</th><th>LAST</th></tr>
    </thead>
    <tbody>
      <tr className="sep"><td colSpan={4}/></tr>
      <tr><td className="td-bold">CNY</td><td className="td-muted">1905</td><td className="td-muted">2018-08-28</td><td className="td-muted">2026-04-17</td></tr>
      <tr><td className="td-bold">EUR</td><td className="td-muted">1905</td><td className="td-muted">2018-08-28</td><td className="td-muted">2026-04-17</td></tr>
      <tr><td className="td-bold">GBP</td><td className="td-muted">1905</td><td className="td-muted">2018-08-28</td><td className="td-muted">2026-04-17</td></tr>
      <tr><td className="td-bold">HKD</td><td className="td-muted">1905</td><td className="td-muted">2018-08-28</td><td className="td-muted">2026-04-17</td></tr>
      <tr><td className="td-bold">INR</td><td className="td-muted">1905</td><td className="td-muted">2018-08-28</td><td className="td-muted">2026-04-17</td></tr>
      <tr><td className="td-bold">JPY</td><td className="td-muted">1905</td><td className="td-muted">2018-08-28</td><td className="td-muted">2026-04-17</td></tr>
      <tr><td className="td-bold">KRW</td><td className="td-muted">1905</td><td className="td-muted">2018-08-28</td><td className="td-muted">2026-04-17</td></tr>
      <tr><td className="td-bold">TWD</td><td className="td-muted">1905</td><td className="td-muted">2018-08-28</td><td className="td-muted">2026-04-17</td></tr>
      <tr className="sep"><td colSpan={4}/></tr>
    </tbody>
  </table>
</div>

  <Note>
    USD는 행이 없습니다. 기준 통화로 코드에서 항상 1.0입니다.
    FIRST 날짜는 가장 이른 거래/자산/현금흐름 항목의 날짜에 가깝습니다 (백필의 시작점).
  </Note>
</Section>

<Section label="firma show fx <currency>">
통화 코드와 함께 실행하면 가장 최근의 N개 환율을 표시합니다 (기본 30):

<div className="terminal">
  <div className="terminal-line">
    <span className="term-prompt">$</span>
    <span className="term-cmd">firma show fx KRW --limit 5</span>
  </div>
  <table className="term-table">
    <thead><tr><th>DATE</th><th>KRW per USD</th></tr></thead>
    <tbody>
      <tr className="sep"><td colSpan={2}/></tr>
      <tr><td className="td-muted">2026-04-17</td><td>1461.6600</td></tr>
      <tr><td className="td-muted">2026-04-16</td><td>1478.1900</td></tr>
      <tr><td className="td-muted">2026-04-15</td><td>1474.4100</td></tr>
      <tr><td className="td-muted">2026-04-14</td><td>1471.5100</td></tr>
      <tr><td className="td-muted">2026-04-13</td><td>1486.9400</td></tr>
      <tr className="sep"><td colSpan={2}/></tr>
    </tbody>
  </table>
</div>

  <Note>
    최신 순 정렬. 모든 통화의 방향은 일관됩니다. USD 1당 외화. USD 가치에 환율을
    곱하면 홈 통화 가치가 나옵니다.
  </Note>
</Section>

<Section label="기간 지정">
명시적 기간을 지정하려면 <code>--from</code>과 <code>--to</code>를 사용합니다
(기간이 설정되면 기본 limit은 무시됩니다):

<div className="terminal">
  <div className="terminal-line">
    <span className="term-prompt">$</span>
    <span className="term-cmd">firma show fx KRW --from 2020-03-01 --to 2020-04-01</span>
  </div>
  <pre className="term-pre">{`DATE            KRW per USD
──────────────────────────────
2020-03-31      1217.4200
2020-03-30      1224.5500
2020-03-27      1218.0800
2020-03-26      1232.0100
2020-03-25      1241.4900
2020-03-24      1247.9800
2020-03-23      1267.2500   ← COVID crash peak
...`}</pre>
</div>
</Section>

<Section label="JSON 출력">
<code>--json</code>은 두 형태(커버리지 요약, 통화별 시계열) 모두에서 동작합니다:

<div className="terminal">
  <div className="terminal-line">
    <span className="term-prompt">$</span>
    <span className="term-cmd">firma show fx KRW --json --limit 2</span>
  </div>
  <pre className="term-pre">{`{
  "currency": "KRW",
  "count": 2,
  "observations": [
    { "date": "2026-04-17", "currency": "KRW", "rate_to_usd": 1461.66 },
    { "date": "2026-04-16", "currency": "KRW", "rate_to_usd": 1478.19 }
  ]
}`}</pre>
</div>
</Section>

<Section label="firma의 캐시 사용 방식">
USD가 아닌 통화로 과거 데이터를 표시할 때, firma는 *각 항목을 자기 날짜의
환율로* 변환합니다. 여기서 조회됩니다.

  <FeatureList items={usageFeatures} />
</Section>

<Section label="캐시 미스와 폴백">
어떤 날짜가 캐시에 없으면(주말, 공휴일, 또는 마지막 sync 이후 새로 추가된
항목의 날짜), firma는 7일 lookback 윈도우 내에서 가장 가까운 직전 환율로
폴백합니다. 그것마저 없으면 <code>open.er-api.com</code>의 실시간 환율을
최후의 수단으로 사용합니다. 오래된 데이터를 추가한 뒤 <code>firma sync fx</code>를
실행하면 캐시가 전체 이력을 포함하도록 보장됩니다.
</Section>
