비트코인기술 중급

내 비트코인 거래가 10분째 안 되는 이유

비트코인 트랜잭션이 블록에 포함되기 전 대기하는 멤풀(Mempool)의 작동 원리를 설명한다. 각 노드의 독립적 멤풀, 채굴자의 트랜잭션 선택, 수수료 경쟁, RBF와 CPFP, 제로 컨펌 위험성까지.

· 12분

비트코인 지갑에서 전송 버튼을 누르면 무슨 일이 벌어질까. 트랜잭션은 즉시 블록에 기록되지 않는다. 전송 버튼을 누른 시점과 블록에 포함되는 시점 사이에는 반드시 대기 구간이 존재한다. 이 대기 공간이 바로 멤풀(Mempool)이다.

멤풀의 정의

멤풀은 Memory Pool의 줄임말이다. 비트코인 네트워크에서 아직 블록에 포함되지 않은 미확인(unconfirmed) 트랜잭션들이 대기하는 임시 저장 공간이다.

비트코인 블록은 평균 10분마다 하나씩 생성된다. 그 10분 사이에 발생하는 모든 트랜잭션은 즉시 처리되지 못하고, 멤풀에서 자기 차례를 기다린다. 채굴자가 다음 블록을 만들 때 멤풀에서 트랜잭션을 꺼내 블록에 담는다.

[지갑에서 전송] → [네트워크 전파] → [멤풀 대기] → [채굴자 선택] → [블록 포함] → [확인 완료]

"하나의 멤풀"은 없다

흔히 "비트코인 멤풀"이라고 하나의 장소처럼 말하지만, 실제로는 단일한 멤풀이 존재하지 않는다. 비트코인 네트워크에 참여하는 각 노드가 자기만의 멤풀을 독립적으로 관리한다.

서울에 있는 노드의 멤풀과 뉴욕에 있는 노드의 멤풀은 대부분 비슷하지만, 완전히 동일하지는 않다. 그 이유는 다음과 같다.

  • 전파 지연: 트랜잭션이 모든 노드에 도달하는 데 시간이 걸린다.
  • 노드 설정 차이: 최소 수수료율, 멤풀 최대 크기 등 설정이 노드마다 다르다.
  • 연결 상태: 노드가 연결된 피어(peer)에 따라 수신하는 트랜잭션이 다를 수 있다.

따라서 "멤풀에 트랜잭션이 있다"는 것은 정확히 말하면 "특정 노드의 멤풀에 해당 트랜잭션이 있다"는 뜻이다. 대부분의 경우 트랜잭션은 수초 내에 네트워크 전체로 퍼지므로, 실용적으로는 큰 차이가 없다.

트랜잭션이 멤풀에 들어오는 과정

트랜잭션이 생성되어 블록에 포함되기까지 다음 단계를 거친다.

1단계: 브로드캐스트 지갑 소프트웨어가 서명된 트랜잭션을 연결된 비트코인 노드에 전송한다.

2단계: 노드 검증 트랜잭션을 수신한 노드는 유효성을 검증한다. 주요 검증 항목은 다음과 같다.

검증 항목내용
서명 유효성개인키 소유자가 서명했는가
이중지불 여부입력 UTXO가 이미 소비되지 않았는가
수수료 충족최소 수수료율(min relay fee)을 충족하는가
스크립트 유효성잠금/해제 스크립트가 올바른가

3단계: 멤풀에 추가 검증을 통과하면 노드는 해당 트랜잭션을 자신의 멤풀에 추가한다.

4단계: 주변 노드에 전파 노드는 연결된 다른 노드들에게 새 트랜잭션을 알린다. 수신한 노드도 같은 검증 과정을 거쳐 자신의 멤풀에 추가하고, 다시 주변에 전파한다. 이 과정이 반복되어 트랜잭션이 네트워크 전체에 퍼진다.

검증에 실패한 트랜잭션은 멤풀에 추가되지 않으며 전파도 되지 않는다.

채굴자의 트랜잭션 선택

채굴자는 새 블록을 만들 때 멤풀에서 트랜잭션을 선택한다. 모든 트랜잭션을 담을 수 없다. 블록에는 크기 제한이 있기 때문이다.

비트코인의 블록 크기 한계는 **4MB(4,000,000 weight units)**다. 일반적인 블록에 약 2,000~4,000개의 트랜잭션이 들어간다.

채굴자의 선택 기준은 단순하다. 수수료율(sat/vbyte)이 높은 트랜잭션부터 우선 포함한다. 채굴자의 수익은 블록 보상과 수수료의 합이므로, 같은 블록 공간이라면 수수료를 더 많이 지불하는 트랜잭션을 담는 것이 합리적이다.

멤풀의 트랜잭션들 (수수료율 높은 순):

  50 sat/vbyte  ████████████  ← 다음 블록에 포함
  30 sat/vbyte  ██████████    ← 다음 블록에 포함
  15 sat/vbyte  ████████      ← 다음 블록에 포함
  ─────────────────────────── 블록 크기 한계 (4MB weight)
   8 sat/vbyte  ██████        ← 대기
   3 sat/vbyte  ████          ← 대기
   1 sat/vbyte  ██            ← 대기 (장시간)

멤풀 혼잡과 수수료 경쟁

멤풀에 트랜잭션이 많아지면 경쟁이 치열해진다. 한 블록에 담을 수 있는 트랜잭션 수는 제한되어 있으므로, 빠른 확인을 원하면 더 높은 수수료율을 설정해야 한다.

네트워크 혼잡도에 따른 수수료율 변화 예시:

네트워크 상태미확인 TX 수다음 블록 수수료율예상 대기 시간 (1 sat/vbyte)
한산수천 건1~2 sat/vbyte10~20분
보통수만 건5~15 sat/vbyte수 시간
혼잡10만+ 건50~200 sat/vbyte수일~무기한

2024년 비트코인 반감기 전후로 수수료율이 수백 sat/vbyte까지 치솟은 사례가 있다. 반대로 주말이나 한국시간 기준 새벽(UTC 기준 오전)에는 멤풀이 비교적 한산해지는 경향이 있다.

멤풀 퍼징(Purging)

각 노드의 멤풀은 무한정 트랜잭션을 보관하지 않는다. 비트코인 코어의 기본 설정은 멤풀 최대 크기 300MB다.

멤풀이 한도에 도달하면 노드는 **수수료율이 가장 낮은 트랜잭션부터 제거(purge)**한다. 제거된 트랜잭션은 해당 노드의 멤풀에서 사라지지만, 네트워크에서 완전히 사라진 것은 아니다. 다른 노드의 멤풀에는 여전히 남아있을 수 있다.

또한 비트코인 코어는 기본적으로 14일(336시간) 이상 멤풀에 머문 트랜잭션을 만료 처리한다.

멤풀 퍼징 조건:
1. 멤풀 크기가 300MB(기본값)에 도달
2. 수수료율이 가장 낮은 TX부터 제거
3. 최소 릴레이 수수료율(minrelaytxfee) 미만인 TX 거부
4. 14일 이상 미확인 TX 만료

멤풀에서 제거된 트랜잭션은 취소된 것이 아니다. 해당 UTXO는 여전히 원래 소유자의 것이며, 새로운 트랜잭션을 만들어 다시 전송할 수 있다.

RBF와 CPFP: 수수료를 조정하는 두 가지 방법

멤풀에 트랜잭션이 들어간 뒤 수수료가 너무 낮아 확인이 지연되는 경우, 두 가지 방법으로 수수료를 조정할 수 있다.

RBF (Replace-By-Fee)

수수료를 높여 새 버전의 트랜잭션으로 교체하는 방법이다.

  • 원리: 같은 입력(UTXO)을 사용하되, 수수료율을 높인 새 트랜잭션을 브로드캐스트한다. 노드는 기존 트랜잭션을 새 트랜잭션으로 교체한다.
  • 조건: 원래 트랜잭션이 RBF 신호(BIP 125)를 포함해야 한다. nSequence 값이 0xfffffffe 미만이면 RBF가 활성화된다.
  • 사용 시나리오: 수수료를 낮게 설정했다가 급히 확인이 필요해진 경우.
원래 트랜잭션: 5 sat/vbyte → 멤풀 대기 중
RBF 트랜잭션:  25 sat/vbyte → 원래 TX를 교체 → 빠른 확인

CPFP (Child-Pays-For-Parent)

수신자가 미확인 트랜잭션의 출력을 사용해 높은 수수료의 자식 트랜잭션을 만드는 방법이다.

  • 원리: 채굴자는 자식 트랜잭션을 포함하려면 부모 트랜잭션도 함께 포함해야 한다. 자식의 높은 수수료가 부모의 낮은 수수료를 보상한다.
  • 사용 시나리오: 수신자가 빨리 확인받고 싶은 경우, 또는 송신자가 RBF를 설정하지 않은 경우.
비교 항목RBFCPFP
실행 주체송신자수신자(또는 송신자)
원리기존 TX 교체새 TX 추가로 묶음 수수료 상승
사전 조건RBF 신호 필요미확인 출력 존재 필요
효율성높음(추가 데이터 없음)낮음(자식 TX 크기만큼 추가 비용)

각 방법의 전체 메커니즘 — BIP-125 opt-in 규칙, 증분 릴레이 수수료, 지갑별 사용법, 자식 수수료 계산식 — 은 전용 항목인 RBF(Replace-by-Fee)CPFP(Child-Pays-for-Parent)에서 확인할 수 있다.

Full-RBF: opt-in 신호의 종말

opt-in RBF 신호(BIP 125)는 처음부터 합의 규칙이 아니라 릴레이 정책상의 관행이었다. 채굴자는 원래 트랜잭션이 교체 가능을 "신호"했는지와 무관하게, 더 높은 수수료를 내는 트랜잭션을 포함시킬 경제적 인센티브가 있다. Bitcoin Core 24.0(2022년)에서 도입된 full-RBF 옵션(mempoolfullrbf=1)은 이를 명시적으로 만들어, opt-in 신호 없이도 모든 미확인 트랜잭션을 교체할 수 있게 했다.

이를 둘러싼 논쟁은 비트코인 커뮤니티의 중요한 정책 토론 중 하나였다. 찬성 측은 어차피 미확인 트랜잭션은 최종성이 보장되지 않으므로, RBF 신호에 의존하는 것은 허위 보안감을 줄 뿐이며 full-RBF는 채굴자의 현실을 코드에 반영할 뿐이라고 주장했다. 반대 측은 0-확인 결제를 수락하는 상인과 서비스에 미칠 영향을 우려했다. 결과적으로 논쟁은 현실로 정리되었다. Bitcoin Core 28.0에서 full-RBF가 기본값으로 활성화된 것이다. 이제는 모든 미확인 트랜잭션이 교체될 수 있다고 가정해야 하며, 아래의 0-conf 위험이 중요한 이유가 바로 이것이다.

수수료율 깊이 보기: sat/vB와 가중치 단위

수수료 추정에서 가장 중요한 단위는 **sat/vB(사토시/가상바이트)**다. 세그윗 이후 블록 용량은 **가중치 단위(weight unit)**로 측정되며, 1 가상바이트(vByte) = 4 weight units이고, 한 블록은 최대 4,000,000 weight units를 담는다. 채굴자는 가용 블록 공간을 수수료율이 높은 트랜잭션부터 채우므로, 확인 우선순위를 결정하는 것은 총 수수료(사토시)가 아니라 수수료율이다. 1만 사토시 수수료는 절대 금액으로는 넉넉해 보여도 트랜잭션 크기가 크면 느리고, 훨씬 적은 수수료라도 vByte당 비율이 충분히 높으면 즉시 확인될 수 있다.

RBF가 단순한 비상 도구가 아니라 비용 절감 전략인 이유가 여기 있다. 불확실한 멤풀 상태에서는 일단 보수적인 수수료율로 전송한 뒤, 제때 확인되지 않을 때만 올리면 된다. "빠른" 포함을 위해 늘 과지불하는 습관을 피할 수 있다. mempool.space나 stats.txid.uk 같은 도구로 현재 수수료 분포를 확인할 수 있고, 급하지 않은 트랜잭션은 주말이나 한가한 시간대를 노리면 수수료율이 크게 떨어진다.

멤풀을 네트워크 건강 지표로 읽기

멤풀 크기는 네트워크 수요의 실시간 지표다. 멤풀이 비어 있으면 최소 수수료 트랜잭션도 다음 블록에 들어가고, 멤풀이 수백 MB까지 부풀면 블록 공간 수요가 공급을 크게 초과해 수수료가 급등한다. 역사적으로 혼잡은 시장 급변, NFT/Ordinals 붐, 스팸 물결과 함께 나타났다. 2017년 말 가격 급등기에는 멤풀이 수십만 건의 미확인 트랜잭션으로 넘쳤고 트랜잭션당 수수료가 수십 달러에 달했는데, 이런 사건들은 세그윗·배치 처리·라이트닝 네트워크 채택을 앞당기는 계기가 되었다. 수수료가 급등하는 이유를 더 깊이 보려면 수수료가 갑자기 폭등하는 진짜 이유를 참고하라.

실습: txid.uk에서 멤풀 현황 읽기

txid.uk 홈 화면에서는 현재 멤풀의 상태를 실시간으로 확인할 수 있다.

확인 가능한 정보:

  • 미확인 트랜잭션 수: 현재 멤풀에 대기 중인 트랜잭션의 총 수
  • 멤풀 크기: 대기 중인 트랜잭션의 총 데이터 크기(MB)
  • 권장 수수료율: 목표 확인 시간(다음 블록, 30분, 1시간 등)에 따른 수수료율

미확인 TX 수가 많고 멤풀 크기가 크면 혼잡한 상태이므로 높은 수수료율이 필요하다. 반대로 멤풀이 거의 비어있다면 최소 수수료율(1 sat/vbyte)로도 다음 블록에 포함될 수 있다. stats.txid.uk에서는 멤풀 크기, 평균 수수료율 등의 추세를 시계열 그래프로 확인할 수 있어, 수수료가 낮은 시점을 예측하는 데 도움이 된다.

멤풀과 0-conf(제로 컨펌) 거래의 위험성

트랜잭션이 멤풀에 들어갔지만 아직 블록에 포함되지 않은 상태를 **0-conf(제로 컨펌)**이라 한다. 일부 상점이나 서비스에서 빠른 결제를 위해 0-conf 거래를 수락하지만, 이는 위험하다.

  • RBF 이중지불: 송신자가 RBF로 수신자 주소를 바꾼 새 트랜잭션을 교체할 수 있다.
  • 채굴자 협력: 채굴자가 원래 트랜잭션 대신 다른 트랜잭션을 블록에 포함시킬 수 있다.
  • 전파 경쟁: 동일 UTXO를 사용하는 두 트랜잭션이 동시에 브로드캐스트되면, 노드마다 먼저 받은 것이 다를 수 있다.

블록에 포함되어 최소 1컨펌을 받아야 트랜잭션이 확정적으로 유효하다. 고액 거래에서는 6컨펌(약 1시간)을 기다리는 것이 관행이다. 멤풀에 있다는 것은 "네트워크에 알려졌다"는 뜻이지, "확정되었다"는 뜻이 아니다.

정리

멤풀은 비트코인 트랜잭션이 블록에 포함되기 전 대기하는 임시 공간이다. 각 노드가 독립적으로 자신의 멤풀을 관리하며, 채굴자는 수수료율이 높은 트랜잭션부터 블록에 담는다. 네트워크가 혼잡하면 수수료 경쟁이 치열해지고, RBF와 CPFP를 통해 수수료를 사후 조정할 수 있다. 멤풀의 상태를 확인하고 적절한 수수료율을 설정하는 것이 비트코인을 효율적으로 사용하는 핵심이다. txid.uk에서 실시간 멤풀 현황을 확인하는 습관을 들이자.

관련 글:

관련 글