전체 글
가이드

솔라나 샌드위치 공격: 성공한 스왑에서 돈이 새는 이유

스왑은 성공이라고 뜨는데 돈은 조금씩 빠져나갑니다. 샌드위치 공격이 한 블록 안에서 하는 일과 슬리피지, 거래 분할로 MEV 피해를 줄이는 방법을 정리했습니다.

읽는 시간 9분 J Tools Editorial
솔라나 샌드위치 공격과 MEV 방어를 다룬 안내 글의 편집용 표지 일러스트입니다

스왑은 성공이라고 떴고 차트도 평소와 같습니다. 그런데 지갑에 들어온 토큰 수량이 확인 화면에서 처음 본 숫자보다 조금 적습니다. 이 몇 달러의 차이를 설명하는 이름이 샌드위치 공격입니다.

알려진 추정치는 샌드위치 봇이 솔라나의 평범한 트레이더에게서 가져간 금액을 5억 달러 안팎으로 이야기합니다. 한 번에 몇 달러씩, 차트가 조용해 보이는 동안 빠져나간 돈입니다. 이 글은 샌드위치 공격이 한 블록 안에서 무엇을 하는지, MEV가 왜 솔라나에서도 통하는지, 오늘 바로 적용할 수 있는 방어가 무엇인지를 순서대로 다룹니다.

샌드위치 공격이란 무엇입니까

스왑은 한 토큰을 다른 토큰으로 바꾸는 거래입니다. 공항 환전소에서 달러를 유로로 바꾸는 일과 비슷합니다. 다만 토큰을 사면 그 매수 자체가 가격을 조금 밀어 올립니다. 수요가 늘면 가격이 오르는 풀의 구조가 그렇습니다.

샌드위치 공격은 봇이 내 거래 앞뒤에 자기 거래를 끼워 넣어 차액을 걷어 가는 방식입니다. 봇은 들어오는 내 주문을 보고 세 가지를 한 블록 안에서 해치웁니다. 블록은 네트워크가 한 번에 확정하는 거래 묶음이고, 솔라나는 1초가 채 안 되는 시간에 하나를 만듭니다.

  1. 내 거래 바로 앞에서 같은 토큰을 사서 가격을 밀어 올립니다.
  2. 내 거래가 그다음에 들어가면서 올라간 가격에 체결됩니다.
  3. 봇이 곧바로 팔아 내 거래가 들어 올린 가격에서 차액을 챙깁니다.

샌드위치의 속재료가 나이고 봇이 양쪽 빵입니다. 내 거래는 여전히 성공으로 표시되니 화면은 초록색으로 바뀌고 나는 그냥 넘어갑니다. 왕복이 같은 순간에 시작되고 끝났기 때문에 차트도 멀쩡해 보입니다.

MEV란 무엇이고 왜 솔라나에서 일어납니까

이 공격의 엔진에는 이름이 있습니다. 최대 추출 가능 가치, 줄여서 MEV입니다. 쉽게 말하면 봇이 내 거래 주변의 순서를 바꾸거나 사이에 거래를 끼워 넣어 짜내는 돈입니다. 한 블록 안에서 거래 순서를 정하는 쪽은 그 순서로 이익을 낼 기회를 쥡니다.

여기서 많이들 오해합니다. 이더리움에는 확정을 기다리는 거래가 줄을 서는 공개 대기실(mempool)이 있습니다. 솔라나에는 그런 대기실이 없습니다. 내 거래는 연결 제공자, 곧 거래를 네트워크로 전달하는 서비스를 거쳐 다음 블록을 만드는 검증자에게 곧장 갑니다. 그런데도 봇이 내 거래를 미리 보는 이유는 두 군데가 새기 때문입니다.

  • 일부 연결 제공자가 대기 중인 내 거래를 자기와 약정을 맺은 봇 네트워크에 조용히 흘립니다.
  • 블록을 만드는 검증자의 대기열을 그와 함께 일하는 봇이 읽을 수 있습니다.

그러니까 솔라나의 문제는 유리로 된 대기실이 아니라 열린 옆문 두 개입니다. 이런 공격의 대부분은 Jito를 통해 밀려 들어옵니다. Jito는 봉인된 거래 묶음, 곧 번들을 정해진 순서와 팁과 함께 제출하면 검증자가 전부 넣거나 전부 빼는 방식으로 처리하는 시스템입니다.

기억할 만한 반전이 하나 있습니다. 봇이 악용하는 그 번들 구조는 내가 직접 쓰면 방어 수단이 됩니다. 무엇을 보장하고 무엇을 보장하지 않는지는 Jito 번들이 보장하는 것과 아닌 것에 정리해 두었고, 전부 아니면 전무라는 규칙 자체는 Jito 공식 기술 문서에 그대로 적혀 있습니다.

1초도 안 되는 사이에 벌어지는 일

숫자를 넣어 보겠습니다. SOL 1,000달러어치를 작은 밈코인으로 바꾸려 하고, 가격 보호 한도는 활짝 열어 둔 상태입니다. 확인 버튼을 누릅니다. 다음 순서가 그 한 블록 안에서 전부 지나갑니다.

  • 봇이 들어오는 1,000달러 매수를 보고 순식간에 앞질러 사서 가격을 약 5% 밀어 올립니다.
  • 내 거래는 나빠진 가격에 체결되고, 화면이 처음 보여 준 것보다 적은 수량이 들어옵니다.
  • 봇은 내 거래가 올려놓은 가격에 곧바로 팔고 약 40달러를 들고 떠납니다.

지갑에는 성공한 스왑이 남고 밈코인도 손에 있습니다. 40달러가 샜다는 사실은 기대한 환율과 실제 환율을 나중에 맞춰 보기 전까지 보이지 않습니다. 이것이 하루 수천 건이면 앞에서 말한 추정치가 어디에서 나왔는지 짐작이 됩니다.

슬리피지, 가장 싼 방어

이 글에서 딱 하나만 기억한다면 슬리피지입니다. 슬리피지는 거래가 자동으로 취소되기 전까지 허용하는 가격 악화의 최대치입니다. 친구에게 빵을 3달러에 사 오되 3달러 30센트를 넘으면 그냥 건너뛰라고 말해 두는 것과 같습니다. 그 3달러 30센트가 내 슬리피지 값입니다.

좁은 상한은 봇이 가져갈 수 있는 몫에 뚜껑을 씌웁니다. 봇이 가격을 내 한도 너머로 밀면 거래는 그냥 취소되고, 샌드위치는 그 자리에서 무너집니다. 봇은 걸려들지 않은 거래를 잡으려고 사들인 토큰을 그대로 떠안습니다.

취소된 거래가 남기는 비용은 아주 작은 네트워크 수수료 하나뿐입니다. 트랜잭션이 전체로 성공하거나 전체로 되돌려지고 수수료는 어느 쪽이든 부과된다는 점은 솔라나 트랜잭션 공식 문서에 적혀 있습니다. 성공한 샌드위치가 거래 금액의 몇 퍼센트를 떼어 가는 쪽과 비교하면 훨씬 싼 결말입니다.

얼마나 좁게 잡을지는 풀 깊이가 정합니다. 풀은 스왑이 상대하는 두 토큰의 공동 더미입니다. SOL과 USDC처럼 깊은 풀은 안에 든 돈이 많아 거래가 가격을 거의 밀지 못합니다. 갓 나온 밈코인처럼 얇은 풀은 작고 잘 튀어서 여유를 조금 더 줘야 취소가 반복되지 않습니다.

풀 종류예시권장 슬리피지
깊고 큰 풀SOL과 USDC 쌍0.5%에서 1%
중간 규모 풀자리를 잡은 중형 토큰1%에서 2%
얇고 새로운 풀갓 나온 밈코인2%에서 3%

슬리피지를 50%처럼 크게 잡는 것은 어떤 가격에든 체결해 달라고 외치는 일입니다. 지켜보던 샌드위치 봇을 전부 불러 모으는 신호가 됩니다. 반대로 잘 튀는 밈코인에 0.1%처럼 얇게 잡으면 평범한 가격 흔들림에도 거래가 계속 취소되어, 보호는 얻지 못한 채 거래만 막힙니다. 구간을 풀에 맞추세요.

좁은 슬리피지가 무엇을 막는지 보여 주는 그림으로, 열린 수로 옆에서 물방울 뒤로 닫히는 한쪽 방향 밸브를 나란히 놓았습니다

토큰과 경로에 따라 값을 더 촘촘하게 고르는 방법은 슬리피지 설정값을 고르는 방법에 상황별로 정리해 두었습니다.

샌드위치 공격을 피하는 네 단계

전문가가 될 필요는 없습니다. 평범한 거래를 하는 사람이 순서대로 밟으면 되는 네 단계입니다.

  1. 슬리피지를 좁게 잡습니다. 위의 구간을 그대로 쓰면 소액 거래를 노리는 공격 대부분이 여기서 끝납니다.
  2. 경로가 정직한 원클릭 스왑을 씁니다. 거래를 아무렇게나 뿌리는 대신 신중하게 길을 잡는 도구를 고르세요. 원클릭 토큰 스왑 도구는 Jupiter로 경로를 잡고, 서명 전에 실시간 견적을 보여 주며, 온체인 실행 점검을 함께 돌립니다.
  3. 거래를 작게 유지하거나 큰 거래를 쪼갭니다. 샌드위치 봇 대부분은 대략 500달러에서 1,000달러 아래 거래를 건너뜁니다. 네트워크 수수료에 팁까지 더하면 남는 몫이 없기 때문입니다. 큰 금액을 표적이 되지 않게 옮기려면 여러 지갑 스왑 분할 도구가 같은 스왑을 여러 지갑에 엄격한 순서로 돌려, 한 덩어리를 봇의 기준선 아래로 떨어지는 조각들로 바꿉니다. 수수료는 도구 페이지에 현재 값이 표시됩니다.
  4. 풀을 먼저 봅니다. 소유가 몇몇 지갑에 몰린 토큰은 그만큼 조작하기 쉬운 풀입니다. 토큰 홀더 스냅샷 도구가 누가 들고 있는지, 얼마나 몰려 있는지 보여 줍니다.

처음 시작하는 사람에게 가장 안심이 되는 사실은 이것입니다. 봇은 보통 소액 거래를 무시합니다. 50달러나 100달러를 적당한 슬리피지로 바꾸고 있다면 거의 확실하게 레이더 아래에 있습니다. 위험은 거래가 봇의 수고를 들일 만큼 커지는 순간부터 시작됩니다.

2026년에 달라진 것

올해는 방어하는 쪽도 바빴습니다. 샌드위치 공격의 판을 다시 짜는 변화가 세 가지 있습니다.

  • Jito DontFront: 내 거래를 번들의 맨 앞자리에 고정해 바로 앞에서 사는 단순한 수법을 막습니다. 도움이 크지만 더 넓은 유형까지 전부 지우지는 못합니다.
  • JitoBAM, 암호화된 멤풀: 보안 하드웨어를 써서 내 거래를 실행되는 순간까지 암호화된 상태로 숨깁니다. 읽을 수 없는 것을 두고 공격을 설계할 수는 없습니다. 지금 단계적으로 적용되고 있습니다.
  • Alpenglow 업그레이드: 진행 중인 업그레이드로, 거래가 영구히 확정되는 순간인 파이널리티를 약 150밀리초 아래로 당깁니다. 이전보다 대략 100배 빠른 속도이고, 봇이 기대는 시간 창이 그만큼 좁아집니다.

어느 것도 마법의 버튼은 아닙니다. 방어는 층으로 쌓는 일이고, 어떤 층이 맞는지는 거래 규모와 풀 깊이가 정합니다. 아래 표로 빠르게 고를 수 있습니다.

내 상황알맞은 방어
500달러 미만의 소액 거래좁은 슬리피지 하나로 대개 충분하고, 봇은 대체로 지나갑니다
1,000달러 이상의 단일 거래좁은 슬리피지에 더해 여러 지갑으로 쪼개기
얇고 새로운 밈코인 거래풀을 먼저 확인한 다음 2%에서 3%
런칭 동시 진입(고급)스나이퍼가 끼어들지 못하도록 직접 만든 봉인 번들

고급: 런칭 운영자와 여러 지갑을 돌리는 사람에게

여기서부터는 고급 내용입니다. 토큰 런칭을 운영하거나 지갑 여럿을 한꺼번에 맞추는 사람을 위한 이야기이고, 평범한 트레이더는 넘어가도 좋습니다.

토큰을 띄우면서 내 지갑 여럿이 깔끔하게 들어가기를 원할 때, 열린 경로는 스나이퍼에게 틈을 남깁니다. 스나이퍼는 토큰이 살아나는 그 순간에 사려고 달려드는 봇입니다. 봇이 악용하는 그 번들 구조를 여기서는 갑옷으로 돌려 쓸 수 있습니다.

직접 만든 봉인 번들, 곧 검증자가 전부 넣거나 전부 빼는 고정 순서 묶음을 제출하면 내 거래들의 순서가 잠깁니다. 바깥 봇이 그 사이에 트랜잭션을 끼워 넣을 자리가 사라지고, 런칭 당일에 지갑들이 함께 착지합니다. 이런 봇이 어떻게 움직이는지는 스나이퍼 봇이 토큰을 노리는 방식에 정리해 두었습니다.

지갑들이 하나의 봉인된 번들로 모이는 그림으로, 괄호 바깥에는 희미한 봇 실루엣이 갇혀 있습니다

번들 거래 도구는 Jito 번들로 여러 지갑의 매수를 같은 블록에 넣고 Raydium과 Pump.fun, Moonshot을 지원합니다. 같은 봉인 순서 개념은 나가는 쪽에도 그대로 적용되며, 수수료는 도구 페이지에 현재 값이 표시됩니다.

방어처럼 보이지만 아닌 것들

널리 퍼진 몇 가지 요령은 안전하다는 착각만 줍니다. 여기에 기대지 마세요.

  • 프리플라이트 점검 끄기. 전송 전 점검을 꺼도 내 거래가 봇에게서 숨겨지지 않습니다. 안전장치 하나가 사라질 뿐이고, 점검이 걸러 냈을 실패할 거래가 그대로 나갈 수 있습니다.
  • 새벽 3시에 거래하기. 봇은 잠들지 않습니다. 서버에서 하루 24시간 돌아가는 소프트웨어라 사람에게 조용한 시간도 봇에게는 평범한 시간입니다.
  • 샌드위치 없는 거래소라는 배지. 마케팅 문구는 보장이 아닙니다. 실제로 어떻게 작동하는지 물어보고 답이 모호하면 장식으로 보세요.
  • 모든 거래에 0.1% 슬리피지. 깊은 풀에서는 괜찮지만 얇은 밈코인에서는 보호받고 있다고 믿는 동안 거래만 계속 실패합니다.

샌드위치 공격과 프런트러닝, 백러닝의 차이

세 단어가 자주 섞여 쓰이지만 봇이 하는 동작은 서로 다릅니다. 어떤 도구가 무엇을 막아 주는지 읽으려면 구분이 필요합니다.

  • 프런트러닝은 내 주문 바로 앞에 놓는 매수 하나입니다. 봇이 내 거래를 보고 먼저 들어가 내 거래가 만드는 가격 상승을 탑니다.
  • 백러닝은 내 거래 바로 뒤에 놓는 거래 하나입니다. 내 거래가 열어 둔 가격 차이를 줍는 쪽이라 내게 직접 비용을 물리지 않는 경우가 많습니다.
  • 샌드위치 공격은 둘을 동시에 합니다. 앞에서 사고, 내 거래가 가격을 올리게 둔 다음, 내가 열어 둔 슬리피지 안쪽으로 팔아 치웁니다.

모든 샌드위치에는 프런트러닝이 들어 있지만, 모든 프런트러닝이 샌드위치는 아닙니다. 뒤쪽 매도는 내 상한이 남겨 둔 여유가 있어야 수지가 맞습니다. 그 여유를 줄이면 샌드위치는 봇이 수고를 들일 값어치를 잃습니다.

자주 묻는 질문

샌드위치 공격으로 잃은 돈을 돌려받을 수 있습니까?

돌려받을 수 없습니다. 거래는 체인 위에서 정산되었고 봇의 이익도 같은 블록 안에서 빠져나갔으니 요청할 상대가 없습니다. 바꿀 수 있는 것은 다음 거래입니다. 상한을 좁히고 경로를 신중하게 고르면 같은 공격이 더 이상 수지를 맞추지 못합니다.

소액 거래도 샌드위치를 당합니까?

드뭅니다. 샌드위치 봇 대부분은 대략 500달러에서 1,000달러 아래 거래를 건너뜁니다. 네트워크 수수료와 팁이 이익을 먹어 버리기 때문입니다. 100달러짜리 스왑을 적당한 슬리피지로 넣고 있다면 보통은 봇이 수고를 들일 대상이 아닙니다.

프라이빗 RPC를 쓰면 샌드위치가 막힙니까?

일부만 막힙니다. 솔라나에는 공개 대기실이 없으므로 유출은 주문 흐름을 공유하는 제공자와 블록을 만드는 검증자의 대기열에서 나옵니다. 내 거래를 조용히 들고 있는 제공자를 쓰면 노출이 줄지만, 여전히 대부분의 일은 좁은 슬리피지가 합니다.

Jito를 쓰면 샌드위치 공격이 막힙니까?

부분적으로 막힙니다. 앞자리 고정 규칙인 DontFront는 내 거래를 번들의 맨 앞에 세워 바로 앞에서 사는 가장 단순한 수법을 막습니다. 다만 모든 유형을 지우지는 못하고, 합리적인 슬리피지를 대신하지도 못합니다. 평범한 단일 스왑이라면 번들 자체가 필요하지 않습니다.

슬리피지는 얼마나 좁게 잡아야 합니까?

풀이 정합니다. SOL과 USDC처럼 깊은 쌍에서는 0.5%에서 1%면 체결되면서 나쁜 가격도 막아 줍니다. 자리를 잡은 중형 토큰은 1%에서 2%, 갓 나온 밈코인은 2%에서 3% 구간이 현실적입니다. 그보다 훨씬 넓혀야 통과하는 거래라면 상한을 여는 대신 주문을 줄이세요.

다음 거래에서 무엇부터 하면 됩니까?

세 가지면 충분합니다. 상한을 풀 깊이에 맞추고, 큰 금액은 여러 조각으로 나누고, 처음 보는 토큰이면 홀더 분포를 먼저 확인하세요. 이 셋은 무료이고 몇 초면 끝납니다. 봉인 번들은 런칭을 운영할 때만 필요합니다.

평범한 트레이더에게 남는 것

샌드위치 봇은 실재하고 적지 않은 돈을 가져갔으며, 오랫동안 대부분의 사람은 자기가 깎이고 있다는 사실조차 몰랐습니다. 다행인 부분은 평범한 트레이더의 해법이 대체로 무료이고 대체로 단순하다는 점입니다. 소매 규모의 작은 거래라면 좁은 슬리피지 하나만으로도 매력 없는 표적이 되기에 충분합니다.

깊이를 읽는 법은 솔라나 유동성 풀의 깊이를 읽는 법에, 어디에서 스왑할지 고르는 기준은 Jupiter와 Raydium, Orca를 비교한 글에 정리해 두었습니다.

이 글은 교육 목적이며 투자 조언이 아닙니다. 토큰 거래에는 원금을 잃을 수 있는 실제 위험이 따르고, 어떤 방어도 그 위험을 없애지 못합니다. 스스로 조사하고 스스로 결정하며, 잃어도 괜찮은 범위에서만 거래하세요.

J
작성자
J Tools Editorial

J Tools 팀에서 작성한 글입니다.

J Tools Editorial의 글 전체 보기 →

관련 글