비트코인 UTXO 구조와 지갑 잔액이 계산되는 방식

비트코인 UTXO 구조와 지갑 잔액이 계산되는 방식

비트코인 지갑 앱은 보통 0.015 BTC처럼 하나의 잔액을 보여 주지만, 비트코인 네트워크에 은행 계좌와 같은 잔액 칸이 저장되는 것은 아닙니다. 실제로는 과거 거래가 만든 여러 출력 가운데 아직 다음 거래의 입력으로 소비되지 않은 출력, 즉 UTXO(Unspent Transaction Output)를 찾아 합산합니다. 이 구조를 이해하면 송금액보다 큰 금액이 움직이는 이유, 거스름돈 주소가 생기는 이유, 수수료가 어떻게 결정되는지, 블록 탐색기에서 무엇을 확인해야 하는지를 한 흐름으로 읽을 수 있습니다.

이 글은 교육 목적이며 특정 자산의 매수·매도를 권하지 않습니다. 예시의 BTC 가격과 수수료율은 설명을 위한 가정일 뿐 미래 수익률이나 실제 체결 비용을 보장하지 않습니다. 비트코인은 가격 변동, 키 분실, 피싱, 거래소·수탁기관 장애, 잘못된 주소 전송 등으로 원금 손실이 발생할 수 있습니다.

UTXO의 정확한 정의와 계좌 잔액과의 차이

거래 출력(transaction output)은 일정량의 사토시와 그 금액을 앞으로 누가 어떤 조건으로 쓸 수 있는지를 나타내는 잠금 스크립트를 담습니다. 이후 거래의 입력이 그 조건을 충족해 출력을 참조하면 해당 출력은 소비된 것으로 처리됩니다. 아직 참조되어 소비되지 않은 출력이 UTXO입니다. 1 BTC는 100,000,000사토시이므로 구현과 검증에서는 BTC 소수보다 정수 사토시 단위를 쓰는 편이 안전합니다.

계좌형 원장에서는 이전 잔액에 입금과 출금을 더하고 빼 현재 잔액을 갱신합니다. UTXO형 원장에서는 개별 출력을 통째로 소비하고 새로운 출력을 만듭니다. 특정 거래의 몇 번째 출력을 새 거래가 참조한다고 이해해야 정확합니다.

비교 항목 계좌형 잔액 관점 비트코인 UTXO 관점
상태의 기본 단위 주소·계좌별 잔액 아직 소비되지 않은 개별 출력
지출 방식 잔액에서 금액 차감 선택한 UTXO 전체를 입력으로 소비
잔돈 처리 계좌에 남음 새 거스름돈 출력으로 생성
추적 식별자 계좌와 거래번호 이전 TXID와 출력 인덱스(outpoint)
병렬 검증 같은 계좌 상태 충돌 가능 서로 다른 UTXO는 독립적으로 검증 가능

거래 입력·출력·outpoint의 계산 구조

비트코인 거래에는 하나 이상의 입력과 출력이 들어갈 수 있습니다. 일반 입력은 이전 거래의 TXID와 출력 인덱스를 묶은 outpoint를 가리킵니다. 인덱스는 첫 번째 출력부터 0으로 셉니다. 예컨대 TXID가 abc인 거래의 두 번째 출력은 개념상 (abc, 1)로 식별됩니다. Bitcoin Developer Reference는 non-coinbase 입력이 이전 outpoint를 소비하고, 출력에는 사토시 금액과 잠금 조건이 기록된다고 설명합니다.

정상적인 일반 거래의 기본 관계는 다음과 같습니다.

선택한 입력 UTXO 합계 = 수취인 출력 합계 + 거스름돈 출력 합계 + 채굴 수수료

따라서 수수료는 별도의 명시적 출력이 아니라 입력 합계에서 출력 합계를 뺀 차액입니다. 채굴 수수료 = 모든 입력의 사토시 합계 – 모든 출력의 사토시 합계입니다.

코인베이스 거래는 예외입니다. 새 블록의 첫 거래인 코인베이스 거래는 이전 outpoint를 소비하지 않고 블록 보조금과 해당 블록의 거래 수수료를 배분합니다. 일반 송금의 입력 합계 규칙과 혼동하면 안 됩니다.

지갑 잔액은 어떻게 합산되는가

지갑은 자신이 제어할 수 있는 스크립트 조건과 관련된 UTXO 집합을 추적하고 그 금액을 합산합니다. 단순화한 잔액 공식은 지갑 잔액 = 지갑이 지출 권한을 가진 미소비 출력의 합입니다. 주소 하나의 잔액과 지갑 전체 잔액은 다를 수 있습니다. HD 지갑은 여러 수신 주소와 거스름돈 주소를 파생하므로, 한 주소만 탐색하면 지갑 전체 자금을 놓칠 수 있습니다.

지갑에 0.004 BTC, 0.007 BTC, 0.010 BTC의 UTXO가 있다면 표시 총액은 0.021 BTC입니다. 그러나 모든 금액이 즉시 같은 조건으로 쓸 수 있는 것은 아닙니다. 미확인 거래의 출력, 코인베이스 성숙도, 시간 잠금, 지갑의 확인 수 정책에 따라 사용 가능 잔액과 총 잔액이 달라질 수 있습니다. 거래소 화면의 잔액은 거래소 내부 장부일 수도 있어 온체인 UTXO와 일대일 대응한다고 단정할 수 없습니다.

코인 선택과 거스름돈이 생기는 이유

송금할 때 지갑은 필요한 금액을 충당할 UTXO 조합을 선택합니다. UTXO는 일부만 잘라 입력으로 넣을 수 없으므로 선택한 출력은 전액 소비됩니다. 입력 합계가 송금액과 수수료보다 크면 차액을 보통 지갑이 제어하는 새 거스름돈 주소로 보냅니다. 거스름돈 출력을 빼먹으면 남는 차액 전체가 수수료가 될 수 있으므로 지갑 구현에서 매우 중요한 부분입니다.

보유 UTXO 선택 여부 선택 이유
0.004 BTC 제외 단독으로 송금액 부족
0.007 BTC 선택 다른 UTXO와 조합
0.010 BTC 선택 송금액·수수료 충당
입력 합계 0.017 BTC 결과 수취 0.012 BTC와 수수료·거스름돈 재배분

지갑의 코인 선택 알고리즘은 단순히 가장 큰 UTXO부터 고르지 않을 수 있습니다. 입력 개수가 늘면 거래 가상 크기(vbytes)가 커져 수수료가 늘 수 있고, 너무 작은 거스름돈은 나중에 쓰는 비용이 더 클 수 있습니다. 반대로 특정 UTXO들을 합치면 주소 간 연관성을 추정할 단서를 제공해 프라이버시가 낮아질 수 있습니다. 비용, 프라이버시, UTXO 단편화 사이에는 trade-off가 있습니다.

숫자를 넣은 송금·수수료 계산 예시

2026년 7월 25일에 계산 연습을 한다고 가정하겠습니다. 지갑이 0.007 BTC와 0.010 BTC를 입력으로 선택하고, 수취인에게 0.012 BTC를 보내려 합니다. 예상 거래 크기는 200 vB, 선택한 수수료율은 5 sat/vB라고 가정합니다. 이는 실제 권장 수수료가 아니라 계산 예시입니다.

  1. 입력 합계: 0.007 + 0.010 = 0.017 BTC = 1,700,000 sat
  2. 예상 수수료: 200 vB × 5 sat/vB = 1,000 sat = 0.00001000 BTC
  3. 수취인 출력: 0.012 BTC = 1,200,000 sat
  4. 거스름돈: 1,700,000 – 1,200,000 – 1,000 = 499,000 sat = 0.00499000 BTC
  5. 검산: 1,200,000 + 499,000 + 1,000 = 1,700,000 sat
계산 항목 사토시 BTC 성격
입력 2개 합계 1,700,000 0.01700000 기존 UTXO 소비
수취인 출력 1,200,000 0.01200000 새 UTXO 후보
거스름돈 출력 499,000 0.00499000 지갑 소유 새 UTXO 후보
수수료 1,000 0.00001000 입력 합계와 출력 합계의 차액

달러나 원화 환산액은 기준 시각의 가격을 별도로 기록해야 합니다. BTC 가격이 바뀌어도 온체인 사토시 계산은 바뀌지 않지만 법정통화 평가액은 바뀝니다. 수수료율이 10 sat/vB로 상승하면 같은 200 vB 가정에서 수수료는 2,000 sat가 되고 거스름돈은 498,000 sat로 줄어듭니다.

블록 탐색기에서 단계별 확인하는 방법

첫째, TXID가 맞는지 확인합니다. 피싱 링크나 비슷한 TXID를 피하려면 지갑에서 직접 복사하고 앞뒤 문자를 대조합니다. 둘째, 입력 목록에서 각 입력이 참조한 이전 TXID와 출력 인덱스를 확인합니다. 셋째, 출력 목록에서 수취 주소 또는 스크립트, 금액, 거스름돈으로 추정되는 출력을 봅니다. 탐색기가 거스름돈이라고 표시해도 이는 휴리스틱 추정일 수 있습니다.

넷째, 입력 합계에서 출력 합계를 직접 빼 탐색기가 표시한 수수료와 일치하는지 검산합니다. 다섯째, 거래의 가상 크기와 sat/vB를 구분합니다. 총수수료가 낮아 보여도 크기가 작은 거래라면 수수료율은 높을 수 있습니다. 여섯째, 확인 수와 블록 높이를 봅니다. 0확인은 아직 블록에 포함되지 않은 상태이고, 확인이 늘어도 잘못 보낸 주소로 자동 반환되는 것은 아닙니다.

지표 조합별로 읽는 법

UTXO 개수만으로 네트워크 이용이나 투자 매력을 판단해서는 안 됩니다. 지갑 수준에서는 UTXO 개수 + 평균 입력 크기 + 예상 거래 vB + 현재 수수료율을 함께 봐야 실제 송금 비용을 추정할 수 있습니다. UTXO가 많고 각각 작으면 표시 잔액이 충분해도 합치는 데 많은 입력이 필요해 비용이 커질 수 있습니다.

네트워크 수준에서는 미확인 거래량 + 수수료율 분포 + 블록 공간 수요를 함께 봐야 합니다. 단순 거래 건수 증가는 배치 처리, 스크립트 유형, 데이터 기록 방식에 따라 경제적 전송량과 다르게 움직일 수 있습니다. 주소 수 증가도 사용자 수 증가와 같지 않습니다. 한 사용자가 여러 주소를 만들고 한 거래소가 다수 사용자의 자금을 묶을 수 있기 때문입니다.

시장과 수수료가 다르게 반응하는 이유

비트코인 가격과 온체인 수수료는 같은 방향으로 움직일 의무가 없습니다. 가격은 현물·파생상품 수급, 거시경제, 규제 기대, 위험 선호 등 여러 시장에서 형성됩니다. 반면 단기 수수료율은 제한된 블록 공간을 두고 거래들이 경쟁하는 정도에 더 직접적으로 반응합니다. 가격이 하락해도 대규모 이동이나 특정 온체인 활동이 몰리면 수수료가 오를 수 있고, 가격이 상승해도 거래소 내부 장부 거래가 많으면 온체인 혼잡이 제한적일 수 있습니다.

지갑이 제시한 예상 수수료도 확정값이 아닙니다. 다음 블록들의 수요, 지갑의 목표 확인 시간, RBF(수수료 대체) 지원 여부, 자식 거래로 수수료를 보완하는 방식 등에 따라 포함 시점이 달라집니다. 낮은 수수료는 원금 손실과 별개로 거래 지연 위험을 키울 수 있습니다.

흔한 오해와 바로잡기

첫째, 주소에 코인이 들어 있다는 표현은 편의적입니다. 정확히는 해당 주소 또는 스크립트의 지출 조건을 만족할 키가 특정 UTXO를 쓸 권한을 가집니다. 둘째, 입력에 보인 주소가 반드시 한 사람의 소유라는 보장은 없습니다. 공동 거래나 코인조인 등에서는 여러 주체의 입력이 한 거래에 포함될 수 있습니다.

셋째, 거스름돈 주소는 타인에게 보낸 금액으로 오해하기 쉽지만 지갑이 새로 파생한 내부 주소일 수 있습니다. 넷째, 작은 UTXO가 많으면 부자가 더 잘게 나뉜 것일 뿐 그 자체로 수익이나 네트워크 건전성을 뜻하지 않습니다. 다섯째, 거래가 확인되었다고 자산 가격 변동이나 수탁 위험이 사라지는 것은 아닙니다.

데이터와 해석의 한계

공개 원장에서는 거래 구조를 볼 수 있지만 주소와 실제 개인·기관의 신원을 자동으로 알 수 없습니다. 블록 탐색기의 엔터티 라벨, 거스름돈 분류, 거래 유형 표시는 분석 업체의 추정일 수 있습니다. 서로 다른 탐색기는 미확인 거래, 수수료 환산, 스크립트 분류를 다르게 표시할 수 있으므로 중요한 판단에는 Bitcoin Core 또는 복수의 독립 자료로 교차 확인하는 편이 좋습니다.

UTXO 집합은 새 블록이 연결되면서 바뀝니다. 체인 재구성, 미확인 부모 거래, 대체 거래가 있으면 짧은 시간 동안 관찰 결과가 달라질 수 있습니다. 또한 라이트 지갑은 전체 UTXO 집합을 직접 검증하지 않고 서버나 필터에 의존할 수 있습니다. 데이터 출처, 조회 시각, 블록 높이, 확인 수를 함께 기록해야 재현할 수 있습니다.

원금 손실 위험과 보안 주의사항

UTXO 구조를 이해해도 비트코인의 시장 위험은 사라지지 않습니다. 가격 급락으로 원금 손실이 날 수 있고, 개인키나 복구 문구를 잃으면 UTXO를 지출할 권한을 사실상 되찾기 어렵습니다. 악성코드가 주소를 바꾸거나, 네트워크를 잘못 선택하거나, 수탁기관이 출금을 중단하는 운영 위험도 있습니다. 큰 금액은 먼저 소액 테스트 전송을 하고 주소·네트워크·수수료·수신 조건을 재확인해야 합니다.

복구 문구는 웹사이트나 메신저에 입력하지 말고, 거래 서명 전에 하드웨어 지갑 화면의 주소와 금액을 확인합니다. 프라이버시를 위해 무리하게 낯선 혼합 서비스를 이용하면 사기·규제·자금 출처 증빙 위험이 생길 수 있습니다. 기술적 기능과 법적·세무적 적합성은 별도 문제입니다.

실전 체크리스트

  • TXID, 네트워크, 수취 주소의 앞뒤 문자를 원본과 대조했는가?
  • 입력이 참조한 이전 TXID와 출력 인덱스를 확인했는가?
  • 입력 합계에서 출력 합계를 빼 수수료를 사토시 단위로 검산했는가?
  • 거스름돈 출력이 자신의 지갑으로 돌아오는지 확인했는가?
  • 총수수료와 sat/vB 수수료율, 거래 vB를 구분했는가?
  • 미확인·확인 상태와 조회 블록 높이·시각을 기록했는가?
  • 작은 UTXO가 많을 때 입력 증가와 향후 통합 비용을 고려했는가?
  • 주소 수를 사용자 수로, 온체인 활동을 투자 수익 신호로 단정하지 않았는가?
  • 복구 문구 노출, 잘못된 주소 전송, 수탁기관 장애와 원금 손실 가능성을 점검했는가?

공식 1차 출처와 확인 기준

아래 공식 기술 자료를 2026년 7월 25일에 다시 확인했습니다. Bitcoin Developer Guide의 거래 설명은 UTXO, 입력, 출력, 수수료와 원시 거래 흐름을 설명하고, Developer Reference는 outpoint·TxIn·TxOut의 직렬화 필드와 사토시 단위 제약을 제시합니다. 비트코인 백서는 거래를 전자서명의 연쇄로 설명하는 원 설계 문서입니다. 구현 세부 사항은 소프트웨어 버전과 정책에 따라 달라질 수 있으므로 실제 거래 전에는 사용 중인 지갑과 Bitcoin Core 문서도 함께 확인해야 합니다.

위로 스크롤