본문 바로가기
🍊⚡️ Bitcoin/technical-theory

비트코인 기술(멤풀, Mempool)

by devhertz 2026. 10. 29.

멤풀이란

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

지갑에서 전송 버튼을 누르면 트랜잭션은 즉시 블록에 기록되지 않는다. 전송 시점과 블록 포함 시점 사이에는 반드시 대기 구간이 있다. 이 공간이 멤풀(Mempool, Memory Pool) 이다.

정의

멤풀은 아직 블록에 포함되지 않은 미확인(unconfirmed) 트랜잭션들이 대기하는 임시 저장 공간이다. 비트코인 블록은 평균 10분마다 생성되므로, 그 사이에 발생한 트랜잭션은 멤풀에서 자기 차례를 기다린다. 채굴자가 다음 블록을 만들 때 멤풀에서 트랜잭션을 선택해 담는다.

흐름은 다음과 같다.
지갑 전송 → 네트워크 전파 → 멤풀 대기 → 채굴자 선택 → 블록 포함 → 확인 완료

“하나의 멤풀”은 없다

흔히 “비트코인 멤풀”이라고 단일한 장소처럼 말하지만, 실제로는 각 노드가 자기만의 멤풀을 독립적으로 관리한다.

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

  • 전파 지연: 트랜잭션이 모든 노드에 도달하는 데 시간이 걸린다.
  • 노드 설정 차이: 최소 수수료율, 멤풀 최대 크기 등이 다르다.
    • Bitcoin Core 30 이후로는 큰 OP_RETURN 거래도 어떤 노드의 멤풀에는 있고 어떤 노드에는 없다.
      (최신이슈: OP_RETURN 논쟁)
  • 연결 상태: 연결된 피어에 따라 수신하는 트랜잭션이 다를 수 있다.

따라서 “멤풀에 있다”는 말은 정확히 “특정 노드의 멤풀에 있다”는 뜻이다.
대부분의 경우 수초 내에 네트워크 전체로 퍼지므로 실용적으로는 큰 차이가 없다.

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

  1. 브로드캐스트: 지갑이 서명된 트랜잭션을 연결된 노드에 전송한다.
  2. 노드 검증: 서명 유효성, 이중지불 여부, 최소 수수료율, 스크립트 유효성 등을 확인한다.
  3. 멤풀 추가: 검증을 통과하면 해당 노드의 멤풀에 넣는다.
  4. 전파: 연결된 다른 노드에 알리고, 그 노드들도 같은 과정을 반복한다.

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

채굴자의 선택 기준

채굴자는 블록 공간(최대 4MB = 4,000,000 weight units)이 한정되어 있으므로 모든 트랜잭션을 담을 수 없다.
선택 기준은 단순하다. 수수료율(sat/vbyte)이 높은 트랜잭션부터 우선 포함한다.

채굴자의 수익은 블록 보상 + 수수료이므로, 같은 공간에 더 많은 수수료를 담는 것이 합리적이다.

멤풀 혼잡과 수수료 경쟁

멤풀에 트랜잭션이 쌓이면 경쟁이 치열해진다. 빠른 확인을 원하면 더 높은 수수료율을 내야 한다.

  • 한산: 1~2 sat/vB → 다음 블록 가능
  • 보통: 5~15 sat/vB → 수 시간
  • 혼잡: 50~200 sat/vB 이상 → 수일 또는 더 김

멤풀 퍼징(Purging) 조건:

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

멤풀이 한도에 도달하면(기본 300MB) 노드는 수수료율이 가장 낮은 트랜잭션부터 제거(purge)한다. 14일 이상 미확인된 트랜잭션도 만료 처리된다. 제거된 트랜잭션은 취소된 것이 아니다. 해당 UTXO는 여전히 소유자의 것이며, 새 트랜잭션을 만들어 다시 보낼 수 있다.

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

수수료가 너무 낮아 확인이 지연될 때 쓰는 두 가지 방법이다.

RBF (Replace-By-Fee)

같은 입력을 사용하되 수수료율을 높인 새 트랜잭션을 브로드캐스트해 기존 것을 교체한다. 원래 트랜잭션에 RBF 신호(BIP 125, nSequence < 0xfffffffe)가 있어야 한다. 송신자가 실행한다.

CPFP (Child-Pays-For-Parent)

미확인 출력을 사용해 높은 수수료의 자식 트랜잭션을 만든다. 채굴자가 자식을 포함하려면 부모도 함께 포함해야 하므로, 자식의 높은 수수료가 부모를 끌어올린다. 수신자(또는 송신자)가 실행할 수 있다.

현재는 full-RBF가 기본값으로 활성화되어 있다. 모든 미확인 트랜잭션이 교체될 수 있다고 가정해야 한다.

0-conf의 위험성

멤풀에 들어갔지만 아직 블록에 포함되지 않은 상태를 0-conf라 한다. 일부 서비스가 빠른 결제를 위해 수락하지만 위험하다.

  • RBF로 수신 주소를 바꾼 새 트랜잭션으로 교체 가능
  • 채굴자가 다른 트랜잭션을 선택할 수 있음
  • 동일 UTXO를 쓰는 두 트랜잭션이 동시에 전파되면 노드마다 먼저 받은 것이 다를 수 있음

최소 1컨펌을 받아야 확정적이다. 고액 거래는 6컨펌(약 1시간)을 기다리는 것이 관행이다. 멤풀에 있다는 것은 “네트워크에 알려졌다”는 뜻이지 “확정되었다”는 뜻이 아니다.

정리

멤풀은 트랜잭션이 블록에 들어가기 전 대기하는 임시 공간이다. 각 노드가 독립적으로 관리하며, 채굴자는 수수료율이 높은 것부터 선택한다. 혼잡하면 수수료 경쟁이 치열해지고, RBF·CPFP로 사후 조정이 가능하다. 멤풀 상태를 확인하고 적절한 수수료율을 설정하는 것이 효율적 사용의 핵심이다.

 

출처: https://learn.txid.uk/ko/

댓글