비트코인기술 입문

멤풀이란 무엇인가

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

· 6분

비트코인 지갑에서 전송 버튼을 누르면 무슨 일이 벌어질까. 트랜잭션은 즉시 블록에 기록되지 않는다. 전송 버튼을 누른 시점과 블록에 포함되는 시점 사이에는 반드시 대기 구간이 존재한다. 이 대기 공간이 바로 멤풀(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 크기만큼 추가 비용)

실습: 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에서 실시간 멤풀 현황을 확인하는 습관을 들이자.

관련 글:

관련 글