← 블로그 목록
Uniswap AMM
DeFi 시리즈 2

DeFi 시리즈 2 — Uniswap

AMM과 유동성 혁명 완전 해부 · v1 → v2 → v3 → v4

$2.4T+

누적 거래량

역대 DEX 1위

$6B+

TVL (2026)

v3 중심

12+

지원 네트워크

Ethereum, Arbitrum 등

4개

수수료 티어

0.01% ~ 1%

01 · Uniswap이란

Uniswap은 이더리움 기반 탈중앙화 거래소(DEX)다. 기존 거래소는 오더북(매수/매도 주문 장부)으로 작동한다. Uniswap은 다르다. 오더북이 없다. 대신 스마트컨트랙트 안의 유동성 풀과 수학 공식 하나로 가격을 결정한다.

2018년 Hayden Adams가 이더리움 그랜트 $65,000을 받아 혼자 개발했다. "오더북 없이 거래소를 만들 수 있다"는 아이디어는 당시엔 말도 안 되는 것처럼 보였다. 지금은 누적 거래량 $2.4T(조)를 돌파한 DeFi의 핵심 인프라다.

v12018

최초 AMM DEX. ETH↔ERC-20만 지원

v22020

ERC-20↔ERC-20 페어. 플래시 스왑. TWAP 오라클

v32021

집중 유동성. 수수료 티어 다변화. NFT LP 포지션

v42024

훅(Hook) 아키텍처. 싱글톤 컨트랙트. 커스텀 풀 로직


02 · AMM의 핵심 — x × y = k

AMM(Automated Market Maker)은 알고리즘이 가격을 결정하는 시장이다. Uniswap의 핵심 공식은 단 하나다.

x × y = k

x = 토큰 A 수량 · y = 토큰 B 수량 · k = 상수 (항상 유지)

풀에 ETH 100개, USDC 200,000개가 있다면 k = 20,000,000이다. 누군가 USDC 10,000을 넣으면 ETH는 몇 개를 받을까?

스왑 계산 예시

초기 상태ETH 100개, USDC 200,000개 → k = 20,000,000
USDC 10,000 투입y = 210,000 → x = 20,000,000 ÷ 210,000 = 95.24
받는 ETH100 - 95.24 = 4.76 ETH
실질 단가10,000 ÷ 4.76 ≈ $2,101 / ETH (시장가보다 높음 → Price Impact)

Price Impact (가격 충격)

주문 크기가 클수록 풀의 비율이 크게 바뀌어 불리한 가격에 체결된다. 작은 풀에 큰 주문을 넣으면 손실이 막대해진다. $50M Aave 사건이 바로 이 원리였다.


03 · 유동성 공급자(LP) — 풀에 돈을 넣는 사람들

Uniswap 풀이 작동하려면 유동성이 필요하다. LP(Liquidity Provider)는 토큰 두 종류를 같은 가치로 풀에 예치하고, 거래 수수료를 수익으로 받는다.

1ETH $1,000 + USDC $1,000을 풀에 예치 (같은 가치로)
2LP 토큰(지분 증명) 수령 — 풀 전체에서 내 비율을 나타냄
3거래자가 스왑할 때마다 수수료(0.3%) 발생 → 풀에 축적
4출금 시 LP 토큰 burn → 원금 + 누적 수수료 수령

비영구 손실(Impermanent Loss) — LP의 최대 리스크

LP가 겪는 가장 독특한 리스크다. 풀에 예치한 후 두 토큰의 가격 비율이 변하면, 그냥 들고 있는 것보다 적은 금액을 돌려받는다. "비영구"인 이유는 가격이 원래대로 돌아오면 손실이 사라지기 때문이다.

비영구 손실 시나리오

예치 시점

ETH 1개($2,000) + USDC 2,000 → 총 $4,000

k = 1 × 2,000 = 2,000

ETH 가격 2배 상승 → $4,000

새 균형: ETH 0.707개, USDC 2,828

풀 가치: 0.707 × $4,000 + $2,828 ≈ $5,656

그냥 들고 있었다면: ETH 1개($4,000) + USDC $2,000 = $6,000

비영구 손실: $6,000 - $5,656 = $344 (약 5.7%)

수수료 수익이 이 손실을 상회해야 LP가 이익이다.

가격 변화 (배수)비영구 손실
1.25× (25% 상승)0.6%
1.5× (50% 상승)2.0%
2× (100% 상승)5.7%
4× (300% 상승)20.0%
10× (900% 상승)42.5%

04 · Uniswap v2 (2020) — 완성된 기초

v1은 ETH를 중개로만 거래할 수 있었다 (ETH↔ERC-20). v2는 ERC-20↔ERC-20 직접 거래를 가능하게 하고, 여러 핵심 기능을 추가했다.

ERC-20 페어

ERC-20↔ERC-20 직접 페어

v1에서는 USDC→DAI를 교환하려면 USDC→ETH→DAI 두 번의 스왑이 필요했다. v2는 USDC/DAI 풀을 직접 만들 수 있어 수수료와 슬리피지가 절반으로 줄었다.

TWAP 오라클

TWAP 가격 오라클

블록마다 누적 가격(price cumulative)을 기록한다. 두 시점의 차이를 시간으로 나누면 TWAP(Time-Weighted Average Price)이 나온다. 단기 조작에 내성이 있어 다른 DeFi 프로토콜의 오라클로 활용됐다.

플래시 스왑

플래시 스왑(Flash Swap)

Aave 플래시론과 유사한 개념. 풀에서 토큰을 먼저 꺼내고 같은 트랜잭션 내에서 상환하거나 동일 가치의 다른 토큰으로 교환한다. 담보 없이 풀 전체 유동성을 일시적으로 빌리는 것이다.

프로토콜 수수료

프로토콜 수수료 스위치

거래 수수료 0.3% 중 0.05%를 프로토콜(Uniswap Labs/DAO)이 가져갈 수 있는 스위치를 내장했다. 기본값은 OFF. 거버넌스 투표로 ON 할 수 있다.

// v2 스왑 핵심 함수

function swap(

uint amount0Out, // 받을 token0 수량

uint amount1Out, // 받을 token1 수량

address to, // 수령 주소

bytes calldata data // 플래시 스왑용 콜백 데이터

) external;

// 내부 로직: x*y=k 검증 후 토큰 전송

// data.length > 0 이면 IUniswapV2Callee 콜백 (플래시 스왑)


05 · Uniswap v3 (2021) — 집중 유동성 혁명

v2의 LP는 가격이 0부터 무한대까지 전 범위에 유동성을 공급했다. ETH/USDC 풀에 $1,000를 넣으면 "ETH 가격이 $0.01일 때부터 $1,000,000일 때까지" 균등하게 분산됐다. 실제 거래가 일어나는 $1,800~$2,200 구간에 배치되는 유동성은 전체의 극히 일부였다.

v3는 이 문제를 해결했다. LP가 특정 가격 범위를 직접 지정해 유동성을 집중시킬 수 있다. 같은 자본으로 훨씬 더 많은 수수료를 벌 수 있다.

v2 vs v3 유동성 분포 비교

v2 — 전 범위 분산

현재가

유동성이 0~∞ 범위에 균등 분산 → 현재가 근처 활용도 낮음

v3 — 집중 유동성

현재가

LP가 지정한 범위에 집중 → 같은 자본으로 수수료 최대화

집중 유동성

Concentrated Liquidity

LP는 min price ~ max price 범위를 지정한다. 현재 가격이 이 범위 안에 있으면 수수료를 수취하고, 범위 밖으로 벗어나면 수수료가 멈추고 한 토큰으로만 남는다. 범위를 좁힐수록 자본 효율이 높아지지만, 가격이 벗어날 위험도 커진다.

수수료 티어

4가지 수수료 티어

0.01% (스테이블코인↔스테이블코인), 0.05% (ETH↔WBTC 등 연관 자산), 0.3% (표준), 1% (변동성 높은 소형 토큰). 풀마다 수수료 티어가 다르고, 라우터가 최적 경로를 자동 선택한다.

NFT LP 포지션

LP 포지션 = NFT (ERC-721)

v2의 LP 토큰(ERC-20)은 모든 LP가 동일한 토큰을 받았다. v3에서는 LP마다 가격 범위가 다르므로 포지션이 고유하다. 각 LP 포지션은 NFT로 발행된다. 이 NFT를 거래하거나 담보로 쓸 수 있다.

틱(Tick)

틱(Tick) — 가격 범위의 최소 단위

연속적인 가격 범위를 이산적인 틱으로 표현한다. 1 tick = 0.01% 가격 변화. LP가 지정하는 min/max 가격은 틱 단위로 정렬된다. 수수료 티어가 낮을수록 틱 간격이 좁아 더 세밀한 범위 설정이 가능하다.

v3 자본 효율 — 수치로 보기

ETH/USDC, 현재가 $2,000 기준

v2 (전 범위): $10,000 예치현재가 근방 유효 유동성 ≈ $10
v3 ($1,900~$2,100 집중): $10,000 예치유효 유동성 ≈ $10,000

같은 자본이지만 v3가 1,000배 더 많은 수수료를 벌 수 있다. 단, 가격이 범위를 벗어나면 수수료 수취가 멈춘다.

// v3 exactInputSingle 스왑

ISwapRouter.ExactInputSingleParams memory params =

ISwapRouter.ExactInputSingleParams({

tokenIn: WETH,

tokenOut: USDC,

fee: 3000, // 0.3% 수수료 티어

recipient: msg.sender,

deadline: block.timestamp,

amountIn: 1 ether,

amountOutMinimum: 1900e6, // 슬리피지 보호

sqrtPriceLimitX96: 0

});

uint256 amountOut = swapRouter.exactInputSingle(params);


06 · Uniswap v4 (2024) — 훅 아키텍처

v4는 구조적인 혁신이다. 핵심은 두 가지 — 싱글톤 컨트랙트훅(Hook)이다.

싱글톤

싱글톤 컨트랙트 — 모든 풀이 하나의 컨트랙트 안에

v3는 풀마다 별도의 컨트랙트가 배포됐다. ETH/USDC 0.3% 풀과 ETH/USDC 0.05% 풀은 각각 다른 컨트랙트다. v4는 모든 풀이 단일 PoolManager 컨트랙트 안에 존재한다. 멀티풀 스왑 시 토큰 전송이 한 번으로 줄어 가스비가 99% 절감된다.

훅(Hook)

훅 — 풀 로직을 완전히 커스터마이즈

스왑, 유동성 추가/제거 등의 이벤트 전후에 개발자가 임의의 로직을 끼워넣을 수 있다. beforeSwap, afterSwap, beforeAddLiquidity, afterAddLiquidity 등 8개의 훅 포인트가 있다. TWAP 기반 동적 수수료, KYC 게이팅, 온체인 오더북 통합, MEV 방어 로직 등이 풀 레벨에서 구현 가능해진다.

Flash Accounting

플래시 어카운팅 — 트랜잭션 끝에 한 번에 정산

여러 풀을 거치는 복잡한 스왑도 토큰 전송을 트랜잭션 끝에 한 번만 한다. 중간 과정의 토큰 이동이 없으므로 가스비가 대폭 절감된다. ERC-6909 다중 토큰 표준을 활용해 내부 잔고를 관리한다.

// v4 Hook 예시 — 동적 수수료 훅

contract DynamicFeeHook is BaseHook {

// 스왑 직전 호출 — 수수료를 동적으로 변경

function beforeSwap(

address, PoolKey calldata key,

IPoolManager.SwapParams calldata params,

bytes calldata

) external override returns (bytes4, BeforeSwapDelta, uint24) {

// 변동성 높으면 수수료 올리고, 낮으면 내린다

uint24 fee = getVolatilityBasedFee(key);

return (BaseHook.beforeSwap.selector, toBeforeSwapDelta(0, 0), fee);

}

}


07 · 스왑 라우팅 — 최적 경로 자동 탐색

Uniswap 인터페이스에서 USDC → AAVE를 스왑하면 단순히 USDC/AAVE 풀 하나를 찾는 게 아니다. Uniswap 스마트 오더 라우터(Smart Order Router, SOR)가 수백 개의 경로를 시뮬레이션해 최적 가격을 찾아준다. 이 과정이 어떻게 작동하는지 단계별로 뜯어보자.

왜 직접 풀만 쓰면 안 되나 — 유동성과 가격 충격

USDC/AAVE 직접 풀이 존재한다고 해도, 그 풀의 유동성이 얕으면 대량 스왑 시 가격 충격(Price Impact)이 크다. x×y=k 공식에서 한 방향으로 많이 사면 살수록 가격이 급격히 불리해진다.

❌ USDC/AAVE 직접 풀만 사용

• USDC 10,000 → AAVE 직접 풀에 넣기

• 풀 유동성이 얕으면 가격 충격 3~5%

• 결과: 예상보다 훨씬 적은 AAVE 수령

✅ 라우터가 최적 경로 탐색

• USDC → WETH → AAVE (유동성 깊은 풀 경유)

• 가격 충격 0.3~0.8%로 대폭 감소

• 결과: AAVE 수령량 2~4% 증가

SOR이 경로를 찾는 4단계

🔍

단계 1후보 풀 수집

v2 풀, v3 풀(0.01%·0.05%·0.3%·1% 수수료 티어), v4 풀을 포함해 입력 토큰과 출력 토큰에 관련된 모든 풀을 수집한다. 중간 토큰(WETH, USDT, DAI, WBTC 등)을 경유하는 다중 홉 경로도 포함된다.

🗺️

단계 2경로 그래프 생성

각 풀을 노드로, 토큰을 엣지로 연결한 그래프를 만든다. USDC → WETH → AAVE처럼 2홉, USDC → USDT → WETH → AAVE처럼 3홉 경로도 탐색 대상이 된다. 일반적으로 최대 3홉까지 탐색한다.

🧮

단계 3각 경로 시뮬레이션

입력 금액을 넣었을 때 각 경로에서 받을 수 있는 output을 온체인 상태 기준으로 시뮬레이션한다. 가격 충격, 수수료, 슬리피지를 모두 계산한 순수 수령량(net output)을 비교한다.

⚖️

단계 4분할 라우팅 최적화

단일 경로보다 여러 경로에 분산하는 게 유리한지 계산한다. 예: USDC 70%는 경로 A, 30%는 경로 B. 각 풀의 유동성 곡선이 다르므로 분산 투입이 전체 가격 충격을 줄일 수 있다.

실제 예시 — USDC $10,000 → AAVE 스왑 시 라우터가 선택하는 경로

SOR이 탐색하는 경로 후보들

경로 A2홉

USDC → WETH (v3 0.05%) → AAVE (v3 0.3%)

수수료: 0.35%가격 충격: ~1.2%예상 AAVE: 82.4개
경로 B ✓ 최적분할 라우팅

USDC 70% → WETH (v3 0.05%) → AAVE (v3 0.3%) + USDC 30% → USDT (v3 0.01%) → WETH (v3 0.05%) → AAVE (v3 0.3%)

수수료: 0.36%가격 충격: ~0.4%예상 AAVE: 84.1개 (+2.0%)
경로 C3홉

USDC → DAI (v3 0.01%) → WETH (v3 0.05%) → AAVE (v3 0.3%)

수수료: 0.36%가격 충격: ~0.9%예상 AAVE: 83.1개

* 수치는 예시. 실제 output은 풀 상태·블록 시점에 따라 달라진다. 라우터는 항상 net output이 가장 큰 경로를 선택한다.

분할 라우팅(Split Routing)이 왜 유리한가

x×y=k 곡선에서 한 풀에 USDC $10,000을 전부 넣으면, 풀의 비율이 크게 틀어져 후반부로 갈수록 받는 AAVE 개수가 급격히 줄어든다. 이것이 가격 충격이다.

같은 $10,000로 AAVE 더 받는 법

풀 A 한 곳에 전액
82.4 AAVE
A·B 풀에 분산 투입
84.1 AAVE ✓

각 풀이 독립적인 x×y=k 곡선을 가지므로, 두 풀에 분산하면 각 풀에서 곡선의 유리한 구간을 더 많이 활용할 수 있다. 금액이 클수록 분할 라우팅의 효과가 커진다.

멀티홉(Multi-hop)이 필요한 이유

모든 토큰 쌍이 직접 풀을 가지지 않는다. USDC/AAVE 직접 풀이 있더라도 유동성이 낮으면 WETH를 경유하는 것이 더 유리하다. WETH는 거의 모든 토큰의 허브 역할을 한다.

홉 수경로 예시언제 유리한가
1홉 (직접)USDC → AAVE유동성이 충분한 주요 쌍 (USDC/ETH, ETH/WBTC)
2홉USDC → WETH → AAVE직접 풀 유동성이 낮거나 없을 때. WETH 경유가 대부분 유리
3홉USDC → DAI → WETH → AAVE특수한 경우. 스테이블 쌍에 깊은 유동성이 있을 때
분할 2홉70% USDC→WETH→AAVE + 30% USDC→USDT→WETH→AAVE대량 스왑 시 가격 충격 분산 목적

슬리피지(Slippage)와 최소 수령량

라우터가 최적 경로를 계산한 뒤 트랜잭션을 제출해도, 내 트랜잭션이 블록에 포함되기 전에 다른 거래가 풀 상태를 바꿀 수 있다. 이것이 슬리피지다. Uniswap 인터페이스는 슬리피지 허용치를 설정하고, 이보다 불리하면 트랜잭션을 자동 revert시킨다.

0.1%

스테이블코인 쌍 권장

(USDC/USDT 등)

0.5%

일반 스왑 기본값

(대부분의 케이스)

1~3%

유동성 낮은 토큰

(소형 알트코인)

슬리피지를 너무 낮게 설정하면 트랜잭션이 자주 실패하고, 너무 높게 설정하면 MEV 봇의 샌드위치 어택 표적이 된다. 0.5%가 대부분의 상황에서 적절하다.

라우팅과 MEV — 내 스왑이 공격받을 수 있다

퍼블릭 mempool에 스왑 트랜잭션이 올라오면, MEV 봇이 이를 감지하고 앞뒤에 자신의 트랜잭션을 끼워 넣는 샌드위치 어택을 시도할 수 있다. 특히 슬리피지가 높거나 금액이 클 때 타깃이 된다.

⚠️ 샌드위치 어택 발생 조건

  • • 슬리피지 허용치가 1% 이상으로 높음
  • • 스왑 금액이 커서 가격 충격이 큼
  • • 유동성 낮은 풀 경유

🛡️ 보호 방법

  • • UniswapX 사용 (오프체인 오더, MEV 차단)
  • • 슬리피지를 0.5% 이하로 유지
  • • Flashbots Protect RPC 사용

💡 Uniswap 인터페이스가 라우팅을 자동으로 처리한다

일반 사용자는 이 모든 과정을 신경 쓰지 않아도 된다. Uniswap 앱이 SOR을 실행하고 최적 경로를 자동으로 선택한다. 다만 금액이 클수록, 유동성이 낮은 토큰일수록 라우팅 품질이 중요해지며, 이럴 때는 1inch 같은 전문 애그리게이터와 결과를 비교해보는 것이 좋다.


08 · UniswapX & Permit2

UniswapX

UniswapX — 오프체인 오더 + 온체인 정산

사용자가 "USDC 1,000을 최소 X AAVE 이상에 스왑하고 싶다"는 서명된 오더를 오프체인에 제출하면, Filler(충전자)가 경쟁적으로 최적 가격을 제시하고 온체인에서 원자적으로 정산한다. 가스비는 Filler가 부담하거나 스왑 금액에서 차감된다. MEV 보호와 가스리스 스왑이 핵심이다.

Permit2

Permit2 — 범용 토큰 허가 시스템

기존 ERC-20은 컨트랙트마다 approve()를 따로 해야 했다. Permit2는 한 번의 서명으로 Uniswap의 모든 컨트랙트(라우터, v3, v4 등)에 허가를 부여한다. 서명 기반이라 가스비가 없고, 허가에 만료 시간과 금액 한도를 설정할 수 있어 보안이 향상된다.


09 · UNI 토큰 & 거버넌스

2020년 9월 Uniswap은 UNI 토큰을 출시하며 역대 최대 규모의 에어드롭을 실행했다. 과거에 Uniswap을 한 번이라도 사용한 지갑 주소 약 250,000개에 각 400 UNI (당시 약 $1,200)를 무상 배포했다.

UNI 토큰 역할

• 거버넌스 투표 (프로토콜 수수료 ON/OFF, 파라미터 변경)

• Uniswap DAO 금고 관리 (~$2B+ 보유)

• 현재 스테이킹 수익 없음 (논의 중)

총 공급량 배분

• 60% — 커뮤니티 (에어드롭, 유동성 마이닝 포함)

• 21.51% — 팀 & 미래 직원 (4년 베스팅)

• 17.8% — 투자자 (4년 베스팅)

• 0.69% — 어드바이저


10 · 버전별 핵심 비교

항목v1 (2018)v2 (2020)v3 (2021)v4 (2024)
거래 페어ETH↔ERC-20ERC-20↔ERC-20ERC-20↔ERC-20ERC-20↔ERC-20 + 네이티브 ETH
유동성전 범위전 범위집중 유동성집중 유동성 (훅 커스터마이즈)
수수료0.3%0.3%0.01/0.05/0.3/1%커스텀 (훅으로)
LP 증명ERC-20ERC-20NFT (ERC-721)NFT (ERC-721)
오라클없음TWAP v1TWAP v2 (가스 효율화)훅으로 확장 가능
아키텍처단일 컨트랙트풀별 컨트랙트풀별 컨트랙트싱글톤 + 훅

11 · MEV와 Uniswap — 샌드위치 어택의 온상

Uniswap은 MEV의 최대 피해지이자 발생지다. 공개 mempool에 스왑 트랜잭션이 올라오는 순간, 봇이 이를 탐지하고 앞뒤로 샌드위치 어택을 실행할 수 있다. 이 문제를 완화하는 방법들이 있다.

MEV 피해를 키우는 설정

• 슬리피지 허용치를 너무 높게 설정 (5% 이상)

• 유동성이 극도로 낮은 풀에서 대형 거래

• 공개 mempool에 높은 가스로 트랜잭션 제출

MEV 방어 방법

• 슬리피지 허용치 최소화 (0.1~0.5%)

• Flashbots Protect / MEV Blocker RPC 사용

• UniswapX 오더 방식 활용 (MEV 보호 내장)

• 대형 거래는 여러 번에 분할 실행


12 · 리스크

HIGH

비영구 손실(IL)

가격 변동으로 LP가 그냥 보유했을 때보다 적게 받는 현상. 변동성이 클수록 크다. 수수료 수익이 IL을 상쇄하지 못하면 LP 손실.

HIGH

MEV / 샌드위치 어택

슬리피지 설정 없이 대형 스왑 시 봇에게 수익을 빼앗긴다. 특히 유동성이 낮은 풀에서 치명적.

MED

스마트컨트랙트 리스크

코드 취약점. Uniswap은 수차례 감사를 받았으나 v4의 훅 생태계는 검증되지 않은 서드파티 코드 리스크가 추가된다.

MED

오라클 의존성

Uniswap TWAP을 오라클로 사용하는 프로토콜은 유동성이 낮은 풀이 조작될 경우 큰 피해를 입을 수 있다.

LOW

규제 리스크

Uniswap Labs가 미국 SEC 조사를 받았다. 프론트엔드는 제한될 수 있으나 컨트랙트 자체는 검열 불가.


Uniswap을 한 문장으로

Uniswap은 x × y = k 공식 하나로 중앙화 거래소의 오더북을 대체한 프로토콜이다. v2가 기초를 완성했고, v3가 집중 유동성으로 자본 효율을 혁신했으며, v4는 훅으로 풀 자체를 프로그래밍 가능하게 만들었다. 단순한 수식이 $2.4T 거래량의 인프라가 됐다.