DeFi 지표 문해력: TVL, dedup, 거래량
도입
DeFi를 처음 볼 때 가장 위험한 습관은 TVL 하나로 시장 규모, 안전성, 유동성, 사용자 수를 모두 판단하는 것이다. TVL은 "프로토콜 컨트랙트에 들어 있는 자산 가치"에 가까운 지표지만, 매매가 가능한 깊이, 탈출 가능한 유동성, 수익 품질, 담보 위험을 직접 말해주지는 않는다.
같은 10억 달러라도 의미가 다르다. 스테이블코인 공급량일 수도 있고, lending market의 예치액일 수도 있고, DEX LP token이 다시 lending protocol에 담보로 들어간 값일 수도 있다. 학습자는 먼저 숫자를 외우는 대신 "이 값은 어떤 자산을 어떤 기준으로 세었는가"를 묻는 습관을 가져야 한다.
학습 목표
- TVL, stablecoin supply, DEX volume, fees, revenue가 서로 다른 지표라는 점을 설명한다.
- receipt token, LP token, bridge TVL이 중복 집계될 수 있는 경로를 찾는다.
- 대시보드 숫자를 제품 의사결정에 쓰기 전에 정의와 기준일을 붙인다.
개념 설명
프로토콜 컨트랙트에 잠긴 토큰 가치인지, 체인 합산인지, bridge TVL 포함 여부인지 확인한다.
유통 공급량은 liquidity와 다르며, 같은 금액이 lending TVL로 다시 잡힐 수 있다.
24h, 7d, monthly volume은 거래 활동을 말하지만 LP 손익과 protocol revenue는 따로 계산한다.
LP token, vault share, receipt token이 다른 프로토콜에 예치되면 같은 원자산이 여러 번 보일 수 있다.
| 지표 | 말해주는 것 | 말하지 않는 것 | 확인 질문 |
|---|---|---|---|
| TVL | 컨트랙트에 예치된 자산 가치 | 즉시 탈출 가능한 liquidity | receipt token이 다시 세어졌는가 |
| DEX volume | 일정 기간 거래 활동 | 거래 품질과 LP PnL | wash trading 또는 incentive 영향이 있는가 |
| Fees | 사용자가 낸 비용 | protocol revenue 귀속 | LP, treasury, referrer 중 누가 받는가 |
| Stablecoin supply | 유통 중인 pegged asset 규모 | 특정 pool의 깊이 | 어떤 chain과 issuer 기준인가 |
| Open interest | perp 포지션 노출 | 청산 흡수 능력 | margin, funding, oracle이 연결되는가 |
DefiLlama는 TVL, fees/revenue, DEX/perp volume, yields, stablecoins, bridge data처럼 서로 다른 metric을 분리해 추적한다. 따라서 강의 자료나 운영 대시보드에서도 한 숫자를 "DeFi 규모"라고 단독 표기하지 않는다. "2026-05-31 기준, DefiLlama의 TVL 정의로 본 protocol TVL"처럼 범위를 붙여야 나중에 수치가 바뀌어도 해석이 남는다.
코드로 확인하기
type LlamaProtocol = { name: string; chainTvls?: Record<string, { tvl: number }>; category?: string; tvl?: number;};export function normalizeProtocolTvl(protocol: LlamaProtocol) { const chainBreakdown = Object.entries(protocol.chainTvls ?? {}).map(([chain, row]) => ({ protocol: protocol.name, category: protocol.category ?? "unknown", chain, usd: Math.max(0, Number(row.tvl ?? 0)) })); return { protocol: protocol.name, reportedTvlUsd: Number(protocol.tvl ?? 0), chainBreakdown, warning: chainBreakdown.length === 0 ? "missing chain breakdown" : "do not compare with stablecoin supply or DEX volume" };}with exposures as ( select position_id, user_id, protocol, token_symbol, underlying_symbol, usd_value, case when token_type in ('receipt', 'lp_token', 'vault_share') then underlying_symbol else token_symbol end as exposure_group from defi_positions),deduped as ( select exposure_group, max(usd_value) as dedup_usd from exposures group by exposure_group)select sum(dedup_usd) as portfolio_exposure_usdfrom deduped;첫 번째 코드는 API 응답을 그대로 "시장 규모"로 쓰지 않고 chain breakdown과 경고를 함께 만든다. 두 번째 쿼리는 receipt token과 원자산을 같은 exposure group으로 묶어 중복 집계를 줄인다. 실제 운영에서는 protocol별 adapter 규칙이 더 필요하지만, 핵심은 숫자 자체보다 집계 규칙을 보존하는 것이다.
강의 포인트
| 관점 | 확인할 질문 | 증거로 남길 것 |
|---|---|---|
| 데이터 정의 | 이 숫자는 어떤 metric인가 | metric name, source URL, timestamp |
| 중복 제거 | 같은 underlying이 두 번 잡혔는가 | exposure group rule |
| 제품 판단 | 이 숫자로 어떤 결정을 하는가 | alert threshold와 action owner |
| 업데이트 | 재검증 주기는 얼마인가 | publish date와 refresh policy |
실무 예시
인덱서[OPS] DeFi 홈 화면에 "총 120B TVL" 같은 문구를 넣고 싶다고 하자. 이 표현은 학습자에게 강한 인상을 주지만, 교육 자료로는 부정확하다. 어떤 출처의 어떤 TVL인지, bridge TVL을 포함하는지, chain native staking을 제외하는지, liquid staking token이 다른 protocol에 담긴 값을 어떻게 처리했는지를 설명하지 않기 때문이다.
실무 화면에서는 숫자를 크게 쓰더라도 작은 주석을 붙인다. 예를 들어 "Protocol TVL, DefiLlama methodology, refreshed 2026-05-31"처럼 표기한다. 그리고 학습 과제에서는 같은 데이터로 "stablecoin supply", "DEX volume", "lending deposits"를 별도 카드로 나누게 한다. 이렇게 해야 나중에 AMM, lending, perps 강의에서 서로 다른 위험 신호를 같은 축으로 잘못 비교하지 않는다.
흔한 오해와 실패 시나리오
| 오해 | 왜 위험한가 | 교정 방식 |
|---|---|---|
| TVL이 크면 안전하다 | 큰 담보도 oracle 조작, liquidation congestion, governance risk를 막지 못한다 | TVL 옆에 exploit history와 risk controls를 둔다 |
| volume이 크면 revenue가 크다 | fee tier, incentive, rebate, wash trading 영향을 분리해야 한다 | volume, gross fee, protocol revenue를 따로 저장한다 |
| stablecoin supply는 liquidity다 | supply가 특정 pool의 깊이를 보장하지 않는다 | pool depth와 redemption route를 별도 확인한다 |
| bridge TVL은 chain TVL이다 | 출발 chain과 도착 chain에서 같은 자산이 보일 수 있다 | bridge category를 별도 노출한다 |
실습 과제
- TVL 정의표 만들기: DefiLlama, DEX volume, stablecoin supply, protocol revenue를 한 표로 분리하고 각 행에 기준일과 사용 목적을 붙인다.
- 중복 제거 쿼리 작성하기: LP token이나 vault share가 다시 담보로 들어간 예시를 만들고, 같은 underlying exposure가 두 번 합산되지 않게 SQL 또는 TypeScript 규칙을 작성한다.
완료 기준
- headline TVL, protocol TVL, chain TVL, stablecoin supply를 같은 숫자로 취급하지 않는 설명을 남겼다.
- 중복 예치와 receipt token을 제거하는 집계 규칙을 쿼리 또는 의사코드로 표현했다.
근거 자료
- DeFi 종합 학습 자료 README
- 01 Market Overview
- DefiLlama Methodology