2026년 8월 17일 · 전체 API 이력 대사 완료 · 15세도 이해할 수 있는 설명

손익 숫자, 이제 어디까지 믿어도 될까?

2020년부터 현재까지의 기관 API 기록을 따로 모아 DB와 대조했습니다. 결론은 “아무 숫자나 믿으면 안 되지만, 이전보다 훨씬 분명히 구분할 수 있다”입니다.

먼저 결론

빨강 · 확정 장부로 쓰면 안 됨

원가가 비어 있는 KIS·키움 스냅샷과, 시작 보유분을 알 수 없는 경우입니다.

노랑 · 방향은 알지만 금액이 흔들림

API와 DB 수수료 차이, 키움의 거래번호 형식 변경, 수동 보정 거래입니다.

초록 · 대사로 확인됨

업비트·빗썸의 API 거래는 DB 거래와 수수료가 고유 거래번호 기준으로 일치합니다.

무엇을 실제로 비교했나?

각 기관 API에서 2020-01-01부터 2026-08-17까지의 거래를 다시 받아, 운영 DB는 건드리지 않고 별도 감사 저장소에 보관했습니다. 응답 파일마다 해시를 검사했고 불일치는 0건이었습니다.

기관완료 기간 창API 거래 행DB와의 핵심 결과
업비트347785API 거래 전체 반영 · 가상 잔고 보정 1건은 실제 주문이 아님
빗썸347203API 거래 전체 반영 · 수동/가상 보정 5건은 실제 주문이 아님
토스증권81147실제 주문 147건 일치 · 수동 시작원가 보정 2건 존재
키움증권346289거래번호 형식 변경과 집계/체결 중복이 있어 경제값 기준 대사 필요
KIS346별도 조회거래·손익·원가 조회 증적 수집 완료, 스냅샷 원가 매핑은 아직 비어 있음
중요: API 행 수와 DB 행 수가 꼭 같아야만 정상인 것은 아닙니다. DB에는 시작 보유분을 설명하기 위한 수동 보정과 가상 잔고 보정이 남아 있기 때문입니다. 이 페이지에서는 그 보정을 실제 매매로 세지 않았습니다.

빨강 1 · 원가 NULL은 “0원에 샀다”가 아니라 “가격표가 빠졌다”는 뜻

평가손익은 지금 가치 − 산 가격입니다. 산 가격이 비어 있으면, 화면에 나온 이익·손실을 기관 원본 기준으로 확정할 수 없습니다.

기관 스냅샷
현재 보유 사진을 받음
원가 칸이 NULL
‘모름’이지 0원이 아님
거래원장 FIFO로 복원
참고값은 만들 수 있음
문제 구간원가가 비어 있는 평가 범위거래원장 복원 결과판정
KIS 보유 주식189,752,300원평가손익 약 -8,346,000원기관 스냅샷만으로는 확정 불가
키움 보유 주식1,913,203원평가손익 약 -9,048,644원기관 스냅샷만으로는 확정 불가

최대 오차를 하나의 숫자로 못 박을 수는 없습니다. 시작부터 보유했던 주식, 입출고, 액면분할처럼 거래원장 밖의 일이 있었다면 원가 자체가 달라질 수 있기 때문입니다. 다만 현재 거래원장만으로 복원한 두 금액은 “가장 그럴듯한 추정치”이며, 기관의 평균매입단가 또는 공식 거래명세로 확인해야 확정됩니다.

빨강 2 · 실현손익 표는 이제 만들었지만, 6건은 일부러 빼고 계산한다

전체 매도731건
실현 이벤트1,209건
실현손익 합계+210,367,003원

실현 이벤트가 매도 건수보다 많은 이유는 한 번의 매도가 여러 개의 과거 매수 묶음(lot)을 나눠 사용하기 때문입니다. 계산식 오류는 0건이었습니다: 모든 이벤트가 ‘매도금액 − 취득원가 − 수수료 = 실현손익’과 일치합니다.

매도 6건(총 거래금액 8,301,580원, 수수료 1,190원)은 키움의 같은 날 집계 거래와 체결별 거래가 겹친 사례입니다. 둘 다 더하면 같은 매도를 두 번 센 셈이므로 체결별 6건을 억제했습니다. 억제하지 않았다면 보유 수량과 손익이 중복될 수 있었습니다.

남은 위험: 억제 규칙이 잘못된 경우 이 묶음의 경제적 영향 상한은 매도금액 830만 원 범위입니다. 하지만 수량이 정확히 같고, 집계금액 차이가 20원·50원 수준이며, 원본 체결 수수료 1,190원이 확인돼 현재 판정은 적합합니다.

노랑 1 · 수수료 보정 결과

최신 API 증적과 같은 주문번호를 다시 대조해, 원본 거래의 수수료 필드만 갱신했습니다.

기관보정 주문 수반영 수수료결과
토스증권92건+223,894.07원최신 API 값으로 갱신
키움증권2건+5,250원집계 거래에 체결 수수료 연결
토스 수동 보정3건48,592.99원의도적 0원 고정이라 자동 변경 제외
현재 상태: 자동으로 검증 가능한 차이 229,144.07원은 반영했습니다. 남은 48,592.99원은 액면분할·원가 수동 보정과 연결된 3건이므로, 실제 거래명세 확인 전에는 API 값으로 덮어쓰지 않습니다.

노랑 2 · 키움은 같은 거래를 두 모양으로 보냅니다

키움 API는 어떤 날에는 거래를 한 줄로 합친 결과와 여러 체결 줄을 함께 제공합니다. 예를 들어 2026-07-07에 082270 200주와 287840 250주는 DB의 집계 줄과 API의 분할 체결 줄이 서로 대응합니다. 금액 차이는 각각 20원·50원 수준이지만, 수수료는 분할 체결 줄에 있습니다.

거래집계 거래금액분할 체결 합계차이분할 체결 수수료
082270 · 200주2,201,400원2,201,380원20원320원
287840 · 250주6,100,250원6,100,200원50원870원

현재 억제수칙의 평가는 조건부 적합입니다. 제공자·계좌·종목·날짜·매매 방향이 같고, 합계 수량이 정확히 같으며 금액 차이가 아주 작을 때만 숨기고 원본은 삭제하지 않습니다. 이 사례에서는 안전합니다. 하지만 독립 주문이 우연히 비슷해 보이는 경우까지 완전히 배제할 수 없으므로, 830만 원 이상 묶음은 자동 억제 뒤 사람이 한 번 확인하는 규칙이 필요합니다.

FIFO와 이동평균은 언제 같은가?

같은 시작 보유분, 모든 매수·매도·수수료가 포함, 마지막에 전량 매도라는 세 조건이 맞으면 누적 실현손익은 FIFO와 이동평균이 같습니다. 중간에 일부만 팔았을 때만 어느 매수를 먼저 썼다고 보느냐에 따라 시점별 숫자가 달라집니다.

따라서 지금 차이는 “FIFO가 틀렸다”는 뜻이 아니라, 원가 NULL·수수료 차이·시작 보유분·중복 보정이 조건을 깨뜨릴 수 있다는 경고입니다.

최종 적합성 판정

API 수집 증적

적합. 4개 기관 전체 기간 수집 완료, 원본 응답 해시 불일치 0건.

현재 손익 화면

조건부 적합. 거래원장 FIFO는 작동하지만 수수료·원가 경고를 함께 보여야 합니다.

세무·회계 확정값

아직 부적합. KIS 원가와 토스·키움 수수료 대사 전에는 확정 장부로 사용하면 안 됩니다.

마지막으로 할 일

  1. 토스 API 수수료·세금의 272,487.06원 차이를 주문별로 DB에 반영합니다.
  2. 키움의 집계/체결 대표 거래에 수수료를 옮기고, 거래번호 변경을 자연키로 연결합니다.
  3. KIS 평균매입단가 또는 거래명세를 스냅샷 원가에 저장해 NULL을 없앱니다.
  4. 수동 보정·중복 억제·매칭 불가 거래를 매 실행 후 자동 대사합니다.
이 보고서의 한계

이 페이지는 2026년 8월 17일에 동결한 DB와 API 응답을 대조한 결과입니다. API가 과거에 이미 정정한 내역, 계좌 밖 입출고, 최초 보유분의 공식 원가까지 자동으로 증명하지는 않습니다. 그래서 빨강·노랑 항목은 ‘확정값’이 아니라 확인이 필요한 위험으로 표시했습니다.