---
title: "Mempool이란?"
description: "목적과 접근 방법"
---

# Mempool이란?

블록체인 트랜잭션에서 멤풀(mempool, memory pool)이란 노드의 검증을 거쳐 블록체인 상의 블록에 커밋되기를 기다리는 대기 중인 트랜잭션의 목록입니다. 이는 전통적인 소프트웨어 개발에서 프로덕션에 배포하기 전 테스트와 품질 관리를 수행하기 위해 'Staging' 환경을 사용하는 것과 유사합니다.

전통적인 'Staging' 환경이 중앙화되어 있는 것과 달리, 각 노드는 자신만의 멤풀을 관리합니다. 멤풀의 목적과, 멤풀에 접근함으로써 어떤 중요한 정보를 얻을 수 있는지 이해하기 위해 트랜잭션 흐름을 살펴보겠습니다.

## **Ethereum 트랜잭션 흐름**

Ethereum 트랜잭션은 3가지 유형으로 나뉩니다:

1\) 단순 전송(Simple Transfer) - 한 공개 주소에서 다른 주소로 가치가 전송됩니다. NFT나 서비스에 대한 결제일 수 있습니다.

2\) 스마트 컨트랙트 배포 - 스마트 컨트랙트가 블록체인에 배포될 때마다 트랜잭션이 생성됩니다.

3\) 스마트 컨트랙트 실행 - 어떤 주소가 스마트 컨트랙트 주소로 자금이나 데이터를 보내고자 하는 경우입니다.

Alchemy의 모니터링 도구를 사용하여 [Ethereum 트랜잭션을 모니터링](https://www.alchemy.com/monitor)할 수 있으며, Alchemy Transfers API와 같은 도구를 사용하여 특정 주소의 트랜잭션 내역을 찾을 수 있습니다.

모든 유형의 Ethereum 트랜잭션은 동일한 트랜잭션 생명주기를 따릅니다:

1\) 사용자가 트랜잭션을 생성하고 자신의 개인 키(private key)로 서명합니다.

2\) 노드가 트랜잭션을 수신하여 멤풀에 저장합니다.

3\) 멤풀에 있는 동안, 노드는 트랜잭션의 검증 테스트를 수행합니다. 멤풀에서 이 테스트를 통과하면, 트랜잭션 상태는 'Pending'으로 변경됩니다.

4\) 노드는 네트워크의 다른 모든 노드에 pending 상태의 트랜잭션을 브로드캐스트하여 각 노드가 자신의 멤풀에 해당 트랜잭션을 추가하도록 합니다.

5\) 새 블록이 생성될 때, 블록 생성자(block constructor)는 가스 가격이 가장 높은 트랜잭션들을 포함시킵니다. 이로써 트랜잭션은 'Successful' 상태로 변경됩니다.

6\) 트랜잭션이 포함된 블록 이후 노드가 새 블록을 추가할 때마다 트랜잭션은 컨펌(confirmation)을 받습니다. 시간이 지날수록 블록 [재구성(reorganizing)](https://www.alchemy.com/overviews/what-is-a-reorg)의 위험이 감소하므로, 이는 트랜잭션이 블록체인에 영구적으로 추가되었다는 확신을 제공합니다.

<ImageBlock
  src="https://media.alchemy.com/1703772601-ethereum-transaction-flow.jpeg"
  alt="서명부터 mempool을 거쳐 컨펌까지, Ethereum 트랜잭션 라이프사이클 다이어그램"
  width={1335}
  height={1600}
  caption="Ethereum 트랜잭션 흐름"
/>

트랜잭션 전송에 대해 더 알아보고 직접 전송해보려면 [여기](https://www.alchemy.com/docs/how-to-send-transactions-on-ethereum)를 참고하세요.

## **멤풀의 목적**

블록체인은 불변(immutable)하기 때문에, 블록체인에 입력되는 트랜잭션이 유효하고 오류가 없어야 하는 것이 중요합니다. 멤풀을 호스팅하는 노드는 블록체인에 커밋하는 과정이 시작되기 전에 각 트랜잭션을 검증하는 중요한 역할을 합니다.

개발자에게는 트랜잭션이 왜 실패하거나 'Pending' 상태에 머물러 있을 수 있는지 이해하기 위해 이러한 검증 테스트를 이해하는 것이 중요합니다:

### 1. 자금의 가용성

노드는 발신자 주소가 전송되는 자금과 트랜잭션 완료에 필요한 가스 비용을 모두 충당할 만큼 충분한 자금을 가지고 있는지 검증합니다. 이 검증에 실패하면, 트랜잭션은 멤풀에서 제거됩니다. 이 검증을 통과하려면 전송 및 대상 주소의 올바른 파라미터를 사용하는 것이 중요합니다.

### **2. 트랜잭션 서명의 유효성**

각 트랜잭션은 발신자 주소로 서명되어야 합니다. 이는 발신자가 실제로 해당 주소의 소유자임을 확인하기 위한 것입니다. 노드는 발신자 주소에 첨부된 서명이 올바른 것인지 검증합니다.

<ImageBlock
  src="https://media.alchemy.com/1703772721-validity-of-transaction-signatures.png"
  alt="노드가 발신자 주소에 대해 트랜잭션 서명을 검증하는 다이어그램"
  width={553}
  height={408}
  caption="트랜잭션 서명의 유효성 [출처]"
/>

### 3. 올바른 nonce 값

nonce 값은 발신자 주소에서 전송된 트랜잭션의 개수입니다. 발신 주소가 새 트랜잭션을 보낼 때마다 nonce 값은 1씩 증가합니다. nonce 값은 특정 주소에서 발생하는 각 트랜잭션이 전송된 순서대로 처리되도록 강제하기 때문에 중요합니다.

<ImageBlock
  src="https://media.alchemy.com/1703772853-correct-nonce-value.png"
  alt="노드가 트랜잭션의 nonce 값을 검증하는 다이어그램"
  width={849}
  height={498}
  caption="Nonce 값에 대한 노드 검증"
/>

트랜잭션의 nonce 값이 중복되거나 건너뛰어질 수 없기 때문에, 이는 이중 지불(double-spending)이나 가용 자금의 초과 지출 문제를 방지합니다. 노드는 pending 상태의 트랜잭션에 올바른 nonce 값이 첨부되어 있는지 검증합니다. 이 테스트에 실패하면, 트랜잭션은 진행되지 않습니다.

### **4. 가스 가격**

멤풀에 따라, 한 번에 멤풀에 있을 수 있는 트랜잭션 수에는 제한이 있습니다. 대중적인 Ethereum 클라이언트인 [Geth](https://www.alchemy.com/overviews/what-is-a-geth-node-and-how-to-run-one)는 기본적으로 pending 트랜잭션 4096개, queued 트랜잭션 1024개로 제한을 두고 있습니다. 이 한도에 도달하면, 공간을 관리하기 위해 가스 가격이 가장 낮은 트랜잭션들이 풀에서 제거됩니다.

## **멤풀 접근하기**

멤풀 구조의 큰 장점 중 하나는 대체 트랜잭션(replacement transaction)을 통해 pending 상태의 트랜잭션을 덮어써서 수정하거나, 속도를 높이거나, 아예 취소할 수 있다는 점입니다.

멤풀에 멈춰 있는 pending 트랜잭션을 수정하는 것 외에도, 멤풀에 접근하는 것은 다음과 같은 다른 경우에도 유용할 수 있습니다:

**1. 가스 비용 추정(Estimating Gas Fees)**

현재 pending 상태의 트랜잭션 목록과 그에 연결된 수수료를 살펴보면 수수료를 과다 지불하는 것을 방지하는 데 도움이 됩니다.

**2. NFT 마이닝(NFT Mining)**

**‍**멤풀 스캐너를 사용하면, 사용자는 NFT 컨트랙트와 상호작용하는 pending 트랜잭션에 대한 정보를 얻고 더 높은 가스 수수료로 해당 트랜잭션을 앞지를 수 있습니다.

**3. 성능 인사이트(Performance Insights)**‍

[Notify API](https://www.alchemy.com/docs/reference/webhooks-overview)와 같은 서비스를 사용하면, 스마트 컨트랙트 개발자는 멤풀에서 스마트 컨트랙트 활동에 대한 인사이트를 얻을 수 있습니다. pending 트랜잭션은 스마트 컨트랙트의 버그와 취약점에 대한 정보를 제공할 수 있습니다.

## **결론**

멤풀은 블록체인의 기능과 상태(health)에서 중요한 역할을 합니다. 노드가 트랜잭션을 검증하고 마이너가 가스 수수료에 따라 pending 트랜잭션의 우선순위를 정할 수 있도록 하는 것은 트랜잭션 흐름에 필수적인 부분입니다.

개발자는 또한 멤풀이 제공하는 데이터를 사용하여 스마트 컨트랙트의 비용과 문제를 줄일 수 있습니다. 멤풀은 종종 블록체인의 "다크 포레스트(dark forest)"로 묘사되어 왔지만, [Alchemy Monitoring](https://www.alchemy.com/blog/application-monitoring-tools)과 같은 도구를 제공하는 플랫폼은 사용자가 이 중요한 단계에 대해 더 명확하게 파악할 수 있게 해줍니다.
