비트코인기술 입문

멤풀 (Mempool) - 비트코인 트랜잭션 대기실

멤풀은 아직 블록에 포함되지 않은 미확인 트랜잭션들이 대기하는 공간입니다.

· 5분

**멤풀 (Mempool, Memory Pool)**은 아직 블록에 포함되지 않은 미확인 트랜잭션들이 대기하는 공간입니다. 각 비트코인 노드는 자신만의 독립적인 멤풀을 유지하므로, 엄밀히 말해 "하나의 멤풀"이 아니라 네트워크에 분산된 수만 개의 개별 멤풀이 존재합니다.

graph LR
  USER["👤 사용자"] -->|"트랜잭션 생성"| NODE["📡 노드"]
  NODE -->|"전파"| MEMPOOL["🔄 멤풀
(미확인 트랜잭션 대기)"] MEMPOOL -->|"채굴자가 선택
(높은 수수료 우선)"| BLOCK["⛏️ 블록"] BLOCK -->|"검증 후 추가"| CHAIN["⛓️ 블록체인"] style MEMPOOL fill:#f7931a,stroke:#f7931a,color:#000 style CHAIN fill:#3fb950,stroke:#3fb950,color:#000

트랜잭션의 라이프사이클

비트코인 트랜잭션은 생성부터 최종 확인까지 명확한 단계를 거칩니다.

생성 단계: 사용자가 지갑 소프트웨어를 통해 트랜잭션을 구성합니다. 소비할 UTXO를 입력으로 선택하고, 수신 주소와 금액을 출력으로 지정하며, 개인키로 서명합니다. 이 시점에서 트랜잭션은 아직 네트워크에 전파되지 않은 상태입니다.

전파 단계: 서명된 트랜잭션이 연결된 피어 노드에게 전송됩니다. 수신 노드는 inv 메시지로 다른 피어들에게 새 트랜잭션의 존재를 알리고, 관심 있는 피어가 getdata로 요청하면 실제 트랜잭션 데이터를 전달합니다. 이 가십 방식으로 트랜잭션은 수 초 내에 네트워크 전체로 확산됩니다.

검증 단계: 각 노드는 수신한 트랜잭션에 대해 독립적으로 검증을 수행합니다. 서명의 유효성, 참조된 UTXO의 존재 여부, 이중 지불 시도 여부, 스크립트 실행 결과, 수수료의 적정성 등을 확인합니다. 검증에 실패한 트랜잭션은 즉시 폐기됩니다.

멤풀 대기 단계: 검증을 통과한 트랜잭션은 노드의 멤풀에 추가됩니다. 여기서 채굴자가 블록에 포함시켜줄 때까지 대기합니다. 수수료가 높은 트랜잭션일수록 빠르게 채굴될 확률이 높습니다.

채굴 및 확인 단계: 채굴자가 멤풀에서 수수료율(sat/vB)이 높은 순으로 트랜잭션을 선택하여 후보 블록을 구성하고, 유효한 작업증명을 찾으면 블록이 네트워크에 전파됩니다. 해당 블록에 포함된 트랜잭션은 멤풀에서 제거되고, 1-확인(confirmation) 상태가 됩니다.

멤풀 정책: 최소 릴레이 수수료와 만료

노드는 멤풀 관리를 위한 정책 규칙을 적용합니다. **최소 릴레이 수수료(minRelayTxFee)**는 기본적으로 1 sat/vB로 설정되어 있으며, 이보다 낮은 수수료의 트랜잭션은 멤풀에 추가되지도 않고 다른 노드에 중계되지도 않습니다. 이는 스팸 트랜잭션으로 멤풀이 넘치는 것을 방지하는 첫 번째 방어선입니다.

멤풀 만료 시간은 기본적으로 336시간(2주)으로 설정되어 있습니다. 이 기간 동안 채굴되지 않은 트랜잭션은 멤풀에서 자동 제거됩니다. 또한 멤풀 크기에 상한(기본 300MB)이 설정되어 있으며, 이를 초과하면 수수료가 가장 낮은 트랜잭션부터 퇴출됩니다.

수수료 조정: RBF와 CPFP

멤풀에 들어간 트랜잭션의 수수료가 너무 낮으면, 두 가지 메커니즘으로 대기열에서 순위를 끌어올릴 수 있습니다. 각각 전용 항목으로 정리되어 있습니다.

  • RBF(Replace-by-Fee) — 송신자가 같은 입력을 사용하는 더 높은 수수료의 트랜잭션으로 갇힌 트랜잭션을 교체합니다.
  • CPFP(Child-Pays-for-Parent) — 수신자를 포함해 소비 가능한 출력을 가진 누구든지 높은 수수료의 자식 트랜잭션을 붙여 채굴자가 패키지를 함께 확인하도록 만듭니다.

멤풀 상태 읽기, 수수료 추정, full-RBF 논쟁, 0-확인 결제의 위험까지 실전 단계로 다루는 내용은 실용 글 **내 비트코인 거래가 10분째 안 되는 이유**에서 확인하세요.

연결되는 개념

관련 글