---
title: Doctor
description: 설치 후 한 번 실행해 환경이 제대로 잡혔는지 확인하는 명령입니다. API 키, 데이터베이스, FX 캐시를 점검하고, 빠진 항목이 있으면 바로 해결 명령까지 보여줍니다.
---

export const checks = [
  { cmd: 'Finnhub API key',   desc: '가격 동기화, 뉴스, 내부자 거래, 실적, 재무제표에 필요' },
  { cmd: 'FRED API key',      desc: '거시경제, 스트레스 지수, 레짐, 환율 이력에 필요' },
  { cmd: 'Display currency',  desc: <>기본값은 USD. <code>firma config set currency KRW</code>로 변경</> },
  { cmd: 'Transactions',      desc: '기록된 거래 수와 현재 보유 종목 수' },
  { cmd: 'Balance entries',   desc: '월별 순자산 스냅샷. 0이면 아직 자산 이력 없음' },
  { cmd: 'Cash flow entries', desc: '월별 수입/지출 기록' },
  { cmd: 'FX rate cache',     desc: <>행 수, 통화, 기간. <code>firma sync fx</code>로 채워집니다</> },
];

export const optionsRows = [
  { cmd: <code>firma doctor</code>,        desc: '사람이 읽기 좋은 출력 + 해결 제안' },
  { cmd: <code>firma doctor --json</code>, desc: <>기계가 읽기 좋은 JSON 출력. 각 검사 항목에 <code>status</code>, <code>detail</code>, <code>fix</code>가 포함됩니다</> },
];

<Section label="firma doctor">
일곱 가지 검사를 순서대로 실행합니다. 각 행에는 상태, 검사 항목, 결과 값이
표시됩니다. 전부 녹색이면 바로 사용할 준비가 된 상태입니다.

<div className="terminal">
  <div className="terminal-line">
    <span className="term-prompt">$</span>
    <span className="term-cmd">firma doctor</span>
  </div>
  <table className="term-table">
    <tbody>
      <tr className="sep"><td colSpan={3}/></tr>
      <tr><td className="td-green">✓</td><td>Finnhub API key</td><td className="td-muted">set</td></tr>
      <tr><td className="td-green">✓</td><td>FRED API key</td><td className="td-muted">set</td></tr>
      <tr><td className="td-green">✓</td><td>Display currency</td><td className="td-muted">KRW</td></tr>
      <tr><td className="td-green">✓</td><td>Transactions</td><td className="td-muted">117 recorded · 4 active holdings</td></tr>
      <tr><td className="td-green">✓</td><td>Balance entries</td><td className="td-muted">36 entries</td></tr>
      <tr><td className="td-green">✓</td><td>Cash flow entries</td><td className="td-muted">36 entries</td></tr>
      <tr><td className="td-green">✓</td><td>FX rate cache</td><td className="td-muted">9525 rows · 8 currencies · 2018-08-28 → 2026-04-17</td></tr>
      <tr className="sep"><td colSpan={3}/></tr>
    </tbody>
    <tfoot>
      <tr><td className="td-muted" colSpan={3}>All systems ready. Run `firma brief` for a daily snapshot.</td></tr>
    </tfoot>
  </table>
</div>
</Section>

<Section label="문제가 있을 때">
실패한 검사 바로 아래에는 <code>→</code> 형태로 해결 명령이 표시됩니다.
각 항목을 고친 뒤 <code>firma doctor</code>를 다시 실행해 확인하면 됩니다.

<div className="terminal">
  <div className="terminal-line">
    <span className="term-prompt">$</span>
    <span className="term-cmd">firma doctor</span>
  </div>
  <table className="term-table">
    <tbody>
      <tr className="sep"><td colSpan={3}/></tr>
      <tr><td className="td-green">✓</td><td>Finnhub API key</td><td className="td-muted">set</td></tr>
      <tr><td className="td-orange">✗</td><td>FRED API key</td><td className="td-orange">not set</td></tr>
      <tr><td/><td colSpan={2} className="td-muted">→ firma config set fred-key &lt;key&gt;</td></tr>
      <tr><td className="td-green">✓</td><td>Display currency</td><td className="td-muted">USD (default)</td></tr>
      <tr><td className="td-orange">✗</td><td>FX rate cache</td><td className="td-orange">empty</td></tr>
      <tr><td/><td colSpan={2} className="td-muted">→ firma sync fx</td></tr>
      <tr className="sep"><td colSpan={3}/></tr>
    </tbody>
    <tfoot>
      <tr><td className="td-muted" colSpan={3}>2 issues found. Fix them and re-run firma doctor.</td></tr>
    </tfoot>
  </table>
</div>
</Section>

<Section label="검사 항목">
  <CommandTable rows={checks} />

  <Note>
    <code>firma doctor</code>는 데이터베이스를 읽기만 합니다. 데이터를 쓰거나
    수정하지 않으니, 설정을 바꾸거나 sync를 돌린 뒤에도 부담 없이 다시 실행해도 됩니다.
  </Note>
</Section>

<Section label="옵션">
  <CommandTable rows={optionsRows} />
</Section>
