샌드위치 공격이란? MEV 봇이 DEX 거래에서 이익을 빼앗는 방법

샌드위치 공격은 MEV(Maximal Extractable Value) 착취의 한 유형으로, 봇이 대기 중인 스왑 트랜잭션을 감지하여 피해자의 거래 앞뒤에 자신의 거래를 배치하고, 그로 인한 가격 변동에서 이익을 추출하는 것입니다.

이 공격은 AMM 기반 탈중앙 거래소가 있는 모든 블록체인에서 발생합니다 — Solana, Ethereum, BSC, Base 등. DEX 트레이더가 예상치 못한 손실을 겪는 가장 빈번한 원인 중 하나이며, 대부분의 피해자는 공격을 당했는지조차 모릅니다.

이 가이드는 샌드위치 공격의 메커니즘, 수익성을 높이는 조건, 보호 방법을 다룹니다.

블록체인 트랜잭션이 처리되는 방식

샌드위치 공격이 어떻게 작동하는지 이해하려면, Solana, Ethereum, BSC 같은 블록체인에서 트랜잭션이 어떻게 처리되는지 먼저 이해하는 것이 도움이 됩니다.

블록체인은 "스왑"을 클릭하는 순간 트랜잭션을 하나씩 처리하지 않습니다. 대신 일괄 처리합니다. 블록체인은 들어오는 모든 트랜잭션을 수집하고, 함께 그룹화하여, 전체 배치를 한 번에 처리합니다. 각 배치를 블록이라 하고, 하나의 블록을 생성하는 데 걸리는 시간을 블록 타임이라 합니다.

블록체인블록 타임
Solana~0.4초
Monad~0.4초
Arbitrum~0.25초
Base~2초
Polygon~2초
Optimism~2초
Avalanche~2초
BNB Chain~3초
Ethereum~12초

Ethereum에서는 약 12초마다 새로운 블록이 생성됩니다. 다음 예시는 같은 12초 창 내에 서로 다른 시간에 제출된 5개의 트랜잭션이 모두 함께 확인되지만 — 제출 순서와는 무관한 순서로 실행되는 것을 보여줍니다:

트랜잭션제출 시간확인 시간실행 순서
트랜잭션 A오후 3:00:01오후 3:00:123번째
트랜잭션 B오후 3:00:03오후 3:00:121번째
트랜잭션 C오후 3:00:05오후 3:00:125번째
트랜잭션 D오후 3:00:08오후 3:00:122번째
트랜잭션 E오후 3:00:11오후 3:00:124번째

5개의 트랜잭션은 모두 블록이 생성되는 오후 3:00:12에 확인됩니다. 그러나 실행 순서 — 실제로 누가 먼저 거래하는지를 결정하는 순서 — 는 먼저 제출한 사람이 아니라 블록을 생성하는 밸리데이터가 결정합니다.

우선 수수료, MEV 팁, 또는 밸리데이터와의 직접적인 관계 같은 요인이 트랜잭션이 시퀀스에서 어디에 배치되는지에 영향을 미칩니다. 트랜잭션 B는 두 번째로 제출되었지만 첫 번째로 실행되었습니다. 트랜잭션 A는 첫 번째로 제출되었지만 세 번째로 실행되었습니다.

이것이 샌드위치 공격이 가능한 근본적인 이유입니다. MEV 봇은 파이프라인에서 대기 중인 트랜잭션을 모니터링하고, 더 높은 수수료를 지불하여 블록 내 실행 순서를 조작해 자신의 트랜잭션을 당신의 앞뒤에 배치할 수 있습니다.

샌드위치 공격의 작동 방식

샌드위치 공격은 스왑이 유동성 풀에서 토큰 가격을 이동시킨다는 사실을 이용합니다. 단계별로 어떻게 진행되는지 설명합니다.

  1. 스왑을 제출합니다: DEX에서 토큰 X를 구매하는 트랜잭션을 제출합니다. 이 트랜잭션이 블록에 포함되기 전에, 네트워크의 트랜잭션 파이프라인에 들어갑니다 — Ethereum에서는 공개 멤풀, Solana에서는 트랜잭션 전달 레이어 — 여기서 잠시 보입니다.
  2. 봇이 트랜잭션을 감지합니다: 파이프라인을 지속적으로 스캔하는 MEV 봇이 대기 중인 스왑을 발견합니다. 얼마나 구매하는지 보고 거래가 가격을 얼마나 이동시킬지 계산합니다. 풀의 유동성 대비 거래가 클수록 가격이 더 많이 움직이고 — 공격이 더 수익성이 높아집니다.
  3. 봇이 프론트런합니다: 봇은 더 높은 우선 수수료로 자신의 매수 트랜잭션을 제출하여, 같은 블록에서 당신의 거래 앞에 실행되도록 합니다. 봇의 매수가 토큰 가격을 올립니다.
  4. 당신의 트랜잭션이 실행됩니다: 스왑이 이제 더 높아진 가격에서 진행됩니다. 봇의 간섭이 없었을 때보다 더 적은 토큰을 받게 됩니다.
  5. 봇이 백런합니다: 당신의 트랜잭션 직후, 봇은 3단계에서 구매한 토큰을 매도합니다. 당신의 매수가 추가적인 상승 가격 압력을 만들었고, 봇은 그 더 높은 가격에 매도합니다.

봇의 매도 후 가격은 다시 떨어집니다. 당신은 지불한 것보다 이제 가치가 낮은 토큰을 보유하게 됩니다. 봇은 매수와 매도 가격 사이의 스프레드를 포착했습니다 — 당신의 거래에서 직접 추출한 가치입니다.

이 전체 시퀀스는 단일 블록 내에서 발생합니다.

Ethereum DEX에서의 실제 샌드위치 공격 예시

위 이미지는 Ethereum Uniswap V2 Pool에서 포착된 실제 샌드위치 공격을 보여줍니다. 같은 블록 내에서 정확히 같은 시간(오전 06:28:23)에 세 개의 트랜잭션이 실행되었습니다:

  1. 1FaE13 (MEV 봇)이 $616.13 상당의 DAT 토큰을 매수합니다 — 프론트런.
  2. 8a23ff (피해자)가 $1.9 상당의 DAT 토큰을 매수합니다 — 이제 더 높아진 가격에서 실행.
  3. 1FaE13 (MEV 봇)이 $617.84 상당의 DAT 토큰을 매도합니다 — 백런, 약 $1.71의 이익을 포착.

피해자의 $1.9 거래는 작았지만, 봇이 이익을 추출하기에 충분했습니다. 전체 공격 — 매수, 피해자, 매도 — 이 단일 블록에서 일어났습니다.

거래가 샌드위치 공격 대상이 되는 경우

모든 스왑이 샌드위치 공격을 받는 것은 아닙니다. MEV 봇은 예상 이익이 비용을 초과할 때만 공격합니다. 다음 조건이 거래를 대상으로 만듭니다:

  • 풀 크기 대비 큰 거래. $500 유동성의 풀에서 $50 스왑은 가격을 약 10% 이상 이동시킵니다 — 샌드위치 봇의 수익성 있는 대상입니다. $5,000,000 유동성의 풀에서 같은 $50은 가격을 거의 이동시키지 않아 공격할 가치가 없습니다.
  • 높은 슬리피지 허용. 슬리피지를 10% 이상으로 설정하면 상당히 나쁜 가격도 수용하겠다는 신호를 보냅니다. 이는 봇이 트랜잭션이 되돌려지기 전에 가격을 밀어올릴 여지를 더 줍니다.
  • 저유동성 토큰. 새로 런칭된 토큰과 밈코인은 작은 풀을 가지는 경향이 있습니다. 적당한 스왑도 봇이 이용할 수 있을 만큼의 가격 변동을 만듭니다.

샌드위치 공격 방어 방법

1. MEV 보호 트랜잭션 라우팅 사용

가장 효과적인 보호는 봇이 애초에 트랜잭션을 볼 수 없게 하는 것입니다.

  • Solana에서: Jito 번들은 공개 트랜잭션 파이프라인을 우회하여 스왑을 Jito 블록 엔진으로 직접 보내며, MEV 봇이 관찰할 수 없습니다. 대부분의 Solana 거래 도구는 이미 이를 지원합니다 — "Jito Tip" 필드가 보이면 트랜잭션이 Jito를 통해 라우팅되고 있습니다. Jito는 또한 jitodontfront 메커니즘을 제공하여, 트랜잭션이 포함된 모든 번들에서 반드시 첫 번째로 나타나도록 합니다.
  • Ethereum 및 EVM 체인에서: Flashbots Protect, MEV Blocker, 프라이빗 RPC 같은 서비스가 공개 멤풀 대신 프라이빗 멤풀을 통해 트랜잭션을 라우팅합니다. 일부 지갑과 DEX 프론트엔드에서 내장 옵션으로 제공합니다.

2. 슬리피지를 타이트하게 설정

슬리피지 허용은 수용할 최악의 가격을 정의합니다. 슬리피지를 1%로 설정하면 예상보다 1% 이상 나쁜 가격에서는 실행되지 않고 트랜잭션이 실패합니다.

이는 봇의 이익 마진을 제한합니다. 봇이 트랜잭션이 되돌려지기 전에 아주 적은 양만 추출할 수 있다면, 봇 자체의 수수료와 팁 비용을 감안하면 공격이 수익성이 없어집니다.

대부분의 스왑에서 1–3% 슬리피지면 충분합니다. 극도로 변동성이 큰 토큰이나 더 나쁜 가격을 수용할 의향이 있는 런칭 시에만 높이세요.

3. 대량 거래 분할

하나의 트랜잭션으로 대량 스왑하는 대신 여러 작은 스왑으로 분할하세요. 각 작은 거래는 가격 충격이 적어 샌드위치 봇에게 덜 매력적입니다.

단점은 더 많은 트랜잭션과 더 많은 수수료이지만, 샌드위치 공격을 피함으로써 절약하는 금액이 보통 추가 비용을 상회합니다.

4. 극도로 낮은 유동성 풀 피하기

풀의 유동성이 매우 낮으면 작은 거래도 엄청난 가격 충격을 만듭니다. 이런 풀은 샌드위치 봇의 가장 쉬운 대상입니다. 스왑 전에 DEXScreener, Birdeye, DexTools에서 풀의 유동성을 확인하세요.

5. 사후 트랜잭션 확인

sandwiched.me 같은 도구로 지갑이 샌드위치 공격의 영향을 받았는지 확인할 수 있습니다. 과거 트랜잭션을 검토하면 패턴을 식별하고 전략을 조정하는 데 도움이 됩니다 — 더 타이트한 슬리피지, 더 작은 거래, 또는 MEV 보호 라우팅으로 전환.

샌드위치 공격 vs. 다른 가격 하락

매수 후 모든 손실이 샌드위치 공격은 아닙니다.

  • 샌드위치 공격: 트랜잭션 직전에 가격이 급등하고 직후에 떨어집니다 — 같은 블록 또는 다음 블록 내에서. 블록 탐색기에서 같은 지갑이나 프로그램에서 당신 바로 앞의 대량 매수와 바로 뒤의 대량 매도를 볼 수 있습니다.
  • 일반 매도 압력: 매수 후 수분에서 수시간에 걸쳐 가격이 점진적으로 하락합니다. 다른 보유자들이 매도하는 것으로 정상적인 시장 행동입니다.
  • 러그풀: 개발자가 풀에서 모든 유동성을 제거합니다. 가격이 즉시 거의 0으로 떨어지고 토큰이 거래 불가능해집니다.

요약

샌드위치 공격은 DEX 가격이 풀 유동성 대비 거래 크기에 따라 움직이고, 블록 내 트랜잭션 순서가 먼저 제출한 사람이 아니라 밸리데이터에 의해 제어된다는 사실을 이용합니다.

자신을 보호하려면: MEV 보호 라우팅 사용(Solana에서 Jito, Ethereum에서 Flashbots Protect), 타이트한 슬리피지 설정, 대량 거래 분할, 스왑 전 풀 유동성 확인.

FAQ

어떤 체인에서든 샌드위치 공격을 받을 수 있나요?

네. AMM 기반 DEX가 있는 모든 체인이 취약합니다 — Solana, Ethereum, BSC, Base, Polygon, Arbitrum 등. 취약성은 특정 체인이나 DEX가 아니라 AMM이 가격을 계산하는 방식에서 비롯됩니다.

높은 슬리피지는 반드시 샌드위치 공격을 당한다는 뜻인가요?

자동적으로 그렇지는 않지만, 위험이 크게 증가합니다. 높은 슬리피지는 더 나쁜 가격을 수용하겠다고 네트워크에 알려주어, 봇이 이익을 추출할 여지를 더 줍니다. 슬리피지를 가능한 한 낮게 유지하세요.

샌드위치 공격은 불법인가요?

대부분의 관할권에서 명확한 법적 프레임워크가 없습니다. Solana에서는 Solana Foundation과 Jito가 샌드위치 공격에 참여하는 밸리데이터를 위임 프로그램에서 제거하는 조치를 취했습니다. Ethereum에서는 Flashbots와 기타 인프라 제공자들이 MEV 추출을 줄이기 위해 노력하고 있습니다.