멤풀 (Mempool) — 비트코인 트랜잭션 대기실
멤풀은 아직 블록에 포함되지 않은 미확인 트랜잭션들이 대기하는 공간입니다.
**멤풀 (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 (Replace-by-Fee)와 CPFP (Child-Pays-for-Parent)
**RBF(Replace-by-Fee)**는 이미 멤풀에 있는 트랜잭션을 더 높은 수수료로 교체할 수 있는 메커니즘입니다. BIP125에 정의된 opt-in RBF는 트랜잭션의 시퀀스 번호가 0xfffffffe 미만일 때 교체 가능함을 표시합니다. 교체 트랜잭션은 원래 트랜잭션의 모든 입력을 포함해야 하며, 절대 수수료(총 수수료)가 원래보다 높아야 합니다.
**CPFP(Child-Pays-for-Parent)**는 수수료가 낮아 멤풀에 갇힌 트랜잭션의 출력을 소비하는 새로운 트랜잭션(자식)을 높은 수수료로 생성하는 기법입니다. 채굴자는 부모와 자식 트랜잭션을 패키지로 평가하여, 결합된 수수료율이 충분히 높으면 둘 다 블록에 포함합니다. CPFP는 수신자 측에서도 수수료 부스팅이 가능하다는 점에서 RBF와 보완적인 관계입니다.
Full-RBF 논쟁
Bitcoin Core 24.0(2022년)에서 도입된 full-RBF 옵션(mempoolfullrbf=1)은 opt-in 신호 없이도 모든 미확인 트랜잭션의 교체를 허용합니다. 이 기능을 둘러싼 논쟁은 비트코인 커뮤니티의 중요한 정책 토론이었습니다.
찬성 측은, 어차피 미확인 트랜잭션은 최종성이 보장되지 않으므로 RBF 신호에 의존하는 것은 허위 보안감을 줄 뿐이라고 주장했습니다. 채굴자는 경제적 합리성에 따라 더 높은 수수료의 트랜잭션을 선택할 인센티브가 있으며, full-RBF는 이 현실을 코드에 반영할 뿐이라는 것입니다. 반대 측은, 0-확인 결제에 의존하는 상인과 서비스에 부정적 영향을 미친다고 우려했습니다. Bitcoin Core 28.0에서는 full-RBF가 기본값으로 활성화되었습니다.
수수료 추정 전략과 실전 팁
효율적인 수수료 설정은 확인 속도와 비용 사이의 균형입니다. mempool.space와 같은 시각화 도구를 통해 현재 멤풀의 수수료 분포를 확인할 수 있습니다. 급하지 않은 트랜잭션은 주말이나 네트워크가 한가한 시간대를 활용하면 수수료를 크게 절약할 수 있습니다.
수수료 추정에서 중요한 단위는 **sat/vB(사토시/가상바이트)**입니다. 세그윗 이후 블록 용량은 가중치 단위(weight unit)로 계산되며, 1 vByte = 4 weight units입니다. 채굴자는 블록의 가용 공간에 가장 높은 수수료율의 트랜잭션을 우선 배치하므로, 총 수수료가 아니라 수수료율이 확인 우선순위를 결정합니다.
RBF를 지원하는 지갑을 사용하면, 처음에 낮은 수수료로 전송한 뒤 필요시 수수료를 올릴 수 있어 과도한 수수료 지불을 피할 수 있습니다. 이는 불확실한 멤풀 상태에서의 합리적 전략입니다.
멤풀 크기 변동과 네트워크 상태 해석
멤풀 크기는 비트코인 네트워크의 실시간 건강 지표입니다. 멤풀이 비어 있으면 네트워크 사용량이 적어 최소 수수료로도 다음 블록에 포함될 수 있음을 의미합니다. 반대로 멤풀이 수백 MB까지 팽창하면 블록 공간에 대한 수요가 공급을 크게 초과하고 있음을 나타내며, 수수료가 급등합니다.
역사적으로 멤풀 폭주는 시장 급변(급등 또는 급락 시 이동 수요), NFT/Ordinals 붐, 스팸 공격 등과 연관되어 왔습니다. 2017년 말 비트코인 가격 급등기에는 멤풀이 수십만 건의 미확인 트랜잭션으로 넘쳤고, 수수료가 트랜잭션당 수십 달러에 달했습니다. 이러한 혼잡 이벤트는 세그윗 채택, 배치 처리 도입, 라이트닝 네트워크 사용 확대 등 확장성 솔루션의 채택을 촉진하는 계기가 되었습니다.