오라클: 블록체인은 가격을 어떻게 알까, 그리고 왜 중요할까

블록체인은 바깥세상을 보지 못합니다. 체인링크 같은 가격 오라클이 시장 가격을 체인에 전달하는 방식, 실패할 수 있는 지점, 직접 확인하는 방법을 설명합니다.

7분 분량

가느다란 테라조 탑 꼭대기의 빛나는 주황색 구가 아래의 코인들을 비추는 모습
이 페이지의 내용
  1. 핵심 요약
  2. 오라클 문제
  3. 탈중앙화 가격 피드의 작동 방식
  4. 한 시장의 가격이 위험한 이유
  5. 대출·거래 서비스가 가격 피드를 쓰는 방법
  6. 온체인 가격은 누구나 확인할 수 있습니다
  7. 다른 방식: 피스와 유니스왑 TWAP
  8. 자주 묻는 질문
  9. 출처

스마트 계약은 수백만 달러를 맡아 규칙대로 완벽하게 움직일 수 있지만, 비트코인이 얼마인지는 알지 못합니다. 블록체인은 이미 체인에 올라와 있는 데이터만 볼 수 있기 때문입니다. 오라클은 그 사이를 잇는 다리입니다. 외부 정보, 대개는 가격을 체인 위로 가져오는 서비스를 말합니다.

이 글에서는 왜 그런 다리가 필요한지, 체인링크 같은 탈중앙화 가격 피드가 어떻게 작동하는지, 앱이 하나의 시장만 믿으면 무슨 일이 생기는지, 그리고 온체인 가격을 직접 확인하는 방법을 설명합니다.

핵심 요약

  • 블록체인은 스스로 외부 데이터를 가져올 수 없습니다. 오라클이 일반 거래와 같은 방식으로 체인에 기록합니다.
  • 체인링크의 가격 피드는 각자 여러 데이터 소스를 쓰는 다수의 독립 노드 운영자의 답을 모아 중앙값을 공개하며, 일정한 가격 변동이나 일정한 시간이 지나면 갱신됩니다.
  • 거래소 한 곳이나 풀 하나의 현물 가격을 믿는 것은 위험합니다. 2020년 대출 서비스 bZx를 노린 플래시 론 공격은 단 한 번의 거래로 약 63만 5,000달러를 챙겼습니다.
  • 대출·거래 서비스는 오라클 가격으로 담보를 평가하고 청산을 실행하며, 신중한 서비스는 자체 안전장치를 더합니다.
  • 퍼블릭 체인 위의 가격은 투명합니다. 누구나 최신 값과 기록 시각, 과거 이력을 읽을 수 있습니다.

오라클 문제

블록체인 네트워크의 모든 노드는 모든 거래를 다시 실행하고 정확히 같은 결과에 도달해야 합니다. 그래야 서로 모르는 수천 명이 서로를 믿지 않고도 잔액에 합의할 수 있습니다. 만약 계약이 웹사이트를 조회할 수 있다면 노드마다 다른 답을 받거나, 같은 노드라도 1분 뒤에는 다른 답을 받을 수 있어 합의가 무너집니다.

그래서 블록체인은 체인에 저장된 데이터만으로 합의를 이룹니다. 외부 데이터는 누군가가 거래를 통해 체인에 기록해야 하고, 그 누군가가 바로 오라클입니다. 여기에 오라클 문제가 있습니다. 계약은 자신이 사용하는 데이터만큼만 믿을 수 있고, 데이터 제공자 한 곳에 의존하면 블록체인이 없애려던 '신뢰'를 다시 불러들이게 됩니다.

탈중앙화 가격 피드의 작동 방식

체인링크 데이터 피드(Chainlink Data Feeds)는 어느 한 당사자가 가격을 정할 수 없도록 설계됐습니다. 체인링크는 세 단계의 집계를 설명합니다. 먼저 데이터 집계 업체가 여러 거래소의 원시 가격을 모아 거래량으로 가중하고 이상치를 걸러 냅니다. 다음으로 각 노드 운영자가 여러 집계 업체에서 값을 받아 중앙값을 구합니다. 마지막으로 네트워크가 다수의 독립 노드 운영자의 답을 모아 다시 중앙값을 구합니다.

서로 다른 재질의 가느다란 기둥 여러 개가 가운데 받침대로 빛을 모으는 모습
여러 독립적인 출처에서 하나로 모은 답

무거운 작업은 오프체인 보고(Offchain Reporting, OCR)라는 프로토콜로 체인 밖에서 처리됩니다. 노드들은 P2P 네트워크에서 서명된 관측값을 주고받고, 리더 노드가 이를 하나의 보고서로 묶습니다. 정족수의 노드가 보고서에 서명하면 한 번의 거래로 체인에 전달되고, 애그리게이터 계약은 서명을 확인한 뒤 중앙값을 타임스탬프, 라운드 번호와 함께 저장합니다.

단계: 노드가 가격을 모읍니다 → 관측값을 공유합니다 → 정족수가 보고서에 서명합니다 → 노드 하나가 제출합니다 → 계약이 값을 저장합니다 → 앱이 최신 값을 읽습니다1노드가가격을모읍니다여러데이터집계업체에서2관측값을공유합니다체인밖에서,P2P로3정족수가보고서에서명합니다중앙값포함4노드하나가제출합니다단 한 번의거래로5계약이값을저장합니다타임스탬프와 라운드ID 포함6앱이 최신값을읽습니다프록시계약을통해단계: 노드가 가격을 모읍니다 → 관측값을 공유합니다 → 정족수가 보고서에 서명합니다 → 노드 하나가 제출합니다 → 계약이 값을 저장합니다 → 앱이 최신 값을 읽습니다1노드가 가격을 모읍니다여러 데이터 집계 업체에서2관측값을 공유합니다체인 밖에서, P2P로3정족수가 보고서에 서명합니다중앙값 포함4노드 하나가 제출합니다단 한 번의 거래로5계약이 값을 저장합니다타임스탬프와 라운드 ID 포함6앱이 최신 값을 읽습니다프록시 계약을 통해
  1. 노드가 가격을 모읍니다 (여러 데이터 집계 업체에서)
  2. 관측값을 공유합니다 (체인 밖에서, P2P로)
  3. 정족수가 보고서에 서명합니다 (중앙값 포함)
  4. 노드 하나가 제출합니다 (단 한 번의 거래로)
  5. 계약이 값을 저장합니다 (타임스탬프와 라운드 ID 포함)
  6. 앱이 최신 값을 읽습니다 (프록시 계약을 통해)

아주 작은 가격 변동까지 매번 체인에 기록하면 수수료가 낭비됩니다. 그래서 피드는 두 가지 조건 중 하나가 충족될 때 갱신됩니다. 편차 임계값(deviation threshold)은 체인 밖 가격이 체인 위 값에서 정해진 비율 이상 벗어나면 새 라운드를 시작합니다. 하트비트(heartbeat)는 가격이 거의 움직이지 않았더라도 마지막 갱신 뒤 정해진 시간이 지나면 새 라운드를 시작합니다.

핵심 수치31이더리움 ETH/USD 피드를지탱하는 오라클 노드 수0.5%갱신을 일으키는 가격 변동폭1시간갱신 사이의 최대 간격핵심 수치31이더리움 ETH/USD 피드를 지탱하는 오라클노드 수0.5%갱신을 일으키는 가격 변동폭1시간갱신 사이의 최대 간격
  • 31: 이더리움 ETH/USD 피드를 지탱하는 오라클 노드 수
  • 0.5%: 갱신을 일으키는 가격 변동폭
  • 1시간: 갱신 사이의 최대 간격
이더리움 피드편차 임계값하트비트
ETH/USD0.5%1시간
BTC/USD0.5%1시간
USDC/USD0.25%23시간
USDT/USD0.25%24시간
TAO/USD2%24시간

2026년 9월 29일 기준으로 체인링크가 공개한 설정입니다. 움직임이 적은 스테이블코인 피드는 하루 한 번만 갱신될 수도 있지만, ETH/USD는 시장이 요동칠 때 한 시간에도 여러 번 갱신됩니다.

한 시장의 가격이 위험한 이유

가격을 체인에 가져오는 가장 쉬운 방법은 한 곳에서 읽는 것입니다. 거래소 한 곳이나 탈중앙화 거래소(DEX)의 풀 하나가 그렇습니다. 하지만 가격을 움직이기 어려운 정도는 그 가격을 움직이는 데 필요한 돈의 크기에 달려 있고, 거래가 얇은 시장에서는 그 돈이 놀랄 만큼 적을 수 있습니다.

플래시 론은 상황을 더 나쁘게 만듭니다. 플래시 론은 같은 거래 안에서 빌리고 갚아야 하는 대출로, 갚지 못하면 거래 전체가 취소됩니다. 그래서 누구든 공격이 한 번에 수지를 맞추기만 하면 담보 없이 잠깐 수백만 달러를 굴릴 수 있습니다.

2020년 2월 bZx 공격

2020년 2월 18일, 한 공격자가 바로 이 수법으로 이더리움의 대출·마진 거래 서비스 bZx를 공격했습니다. bZx는 스테이블코인 sUSD의 가격을 유니스왑 풀 하나와 카이버 리저브 하나, 두 개의 작은 온체인 시장에서 가져오고 있었습니다. 임페리얼 칼리지 런던 연구진은 이후 그 과정을 재구성했습니다.

단계: 7,500 ETH를 빌립니다 → 작은 풀 두 곳에서 sUSD를 삽니다 → 시장 가격으로 sUSD를 더 삽니다 → bZx에 110만 sUSD를 담보로 맡깁니다 → 6,799 ETH를 빌리고 대출을 갚습니다17,500 ETH를빌립니다플래시 론, 한번의 거래 안2작은 풀두 곳에서sUSD를삽니다그곳 가격이뜁니다3시장 가격으로sUSD를 더삽니다신세틱스에서 약94만 4,000개4bZx에 110만sUSD를담보로맡깁니다부풀려진가격으로 평가56,799 ETH를빌리고 대출을갚습니다약 2,381 ETH가남습니다단계: 7,500 ETH를 빌립니다 → 작은 풀 두 곳에서 sUSD를 삽니다 → 시장 가격으로 sUSD를 더 삽니다 → bZx에 110만 sUSD를 담보로 맡깁니다 → 6,799 ETH를 빌리고 대출을 갚습니다17,500 ETH를 빌립니다플래시 론, 한 번의 거래 안2작은 풀 두 곳에서 sUSD를 삽니다그곳 가격이 뜁니다3시장 가격으로 sUSD를 더 삽니다신세틱스에서 약 94만 4,000개4bZx에 110만 sUSD를 담보로 맡깁니다부풀려진 가격으로 평가56,799 ETH를 빌리고 대출을 갚습니다약 2,381 ETH가 남습니다
  1. 7,500 ETH를 빌립니다 (플래시 론, 한 번의 거래 안)
  2. 작은 풀 두 곳에서 sUSD를 삽니다 (그곳 가격이 뜁니다)
  3. 시장 가격으로 sUSD를 더 삽니다 (신세틱스에서 약 94만 4,000개)
  4. bZx에 110만 sUSD를 담보로 맡깁니다 (부풀려진 가격으로 평가)
  5. 6,799 ETH를 빌리고 대출을 갚습니다 (약 2,381 ETH가 남습니다)

두 풀에서 sUSD는 잠시 다른 시장보다 약 2.5배 비쌌고, 그래서 bZx는 담보의 실제 가치보다 훨씬 많은 ETH를 빌려줬습니다. 공격자는 당시 약 63만 4,900달러에 해당하는 2,381.41 ETH를 챙겼고, 거래 수수료는 118.79달러였습니다. 손실은 bZx에 자금을 맡긴 예치자들이 떠안았습니다.

평균을 낸다고 끝이 아닙니다

여러 출처를 합쳐도 모두가 같은 얇은 시장을 보고 있다면 소용없습니다. 미국 상품선물거래위원회(CFTC)의 소장에 따르면, 2022년 10월 암호화폐 거래·대출 플랫폼인 망고 마켓(Mango Markets)의 한 트레이더가 이 플랫폼의 오라클에 가격을 공급하던 거래소 세 곳에서 MNGO 토큰을 대량으로 사들였습니다. 오라클의 MNGO 가격은 30분 만에 13배 넘게 뛰었고, 그는 부풀려진 포지션을 담보로 1억 1,000만 달러가 넘는 자산을 인출했습니다.

체인링크도 자체 문서에서, 거래가 적은 자산은 플래시 론을 이용한 공격이나 자금력이 큰 주체에 의해 조작될 수 있다고 경고합니다.

주의

가격의 견고함은 그 가격을 움직이는 데 필요한 돈의 크기에 달려 있습니다. 앱이 거래소 한 곳, 풀 하나, 또는 거래가 적은 토큰의 가격으로 담보를 평가한다면, 충분히 큰 거래나 플래시 론 하나로 그 가격을 잠시 거의 마음대로 바꿀 수 있습니다.

대출·거래 서비스가 가격 피드를 쓰는 방법

대출 서비스에서는 담보를 맡기고 그 담보를 바탕으로 돈을 빌립니다. 서비스는 대출이 아직 안전한지 판단하려면 모든 자산의 가격을 알아야 합니다. Aave는 이를 헬스 팩터(health factor)로 나타냅니다. 담보 가치에 청산 기준치라는 안전 비율을 곱한 뒤 빌린 금액으로 나눈 값입니다. 이 값이 1 아래로 떨어지면 다른 사람이 빚의 일부를 대신 갚고 담보 일부를 보너스와 함께 가져갈 수 있는데, 이것이 청산입니다. Aave V3의 가격 오라클은 체인링크 애그리게이터에서 가격을 가져오고, 피드가 0 이하를 반환하면 대체 오라클로 넘어갑니다.

잘못된 가격은 어느 방향이든 비용을 치르게 합니다. 너무 낮으면 건전한 대출이 청산되고, 너무 높으면 차입자가 담보 가치보다 많은 것을 가지고 떠날 수 있습니다. bZx의 예치자들이 겪은 일이 바로 그것입니다.

레버리지 거래 서비스에는 하트비트보다 빠른 가격이 필요합니다. 그래서 많은 곳이 체인링크 데이터 스트림(Chainlink Data Streams) 같은 풀(pull) 방식 피드를 씁니다. 1초도 안 되는 간격으로 서명된 보고서 형태의 가격을 받아, 그 가격을 쓰는 같은 거래 안에서 체인 위에서 검증하는 방식입니다.

신중한 서비스는 자체 점검 장치를 더합니다. 체인링크는 가격 상·하한, 서킷 브레이커, 최신성 점검을 권합니다. 옛 메이커다오(MakerDAO)인 스카이(Sky) 프로토콜은 가격을 오라클 보안 모듈(Oracle Security Module)에 통과시켜 새 값을 기본 1시간 동안 보류한 뒤 사용합니다. 오라클 공격에 대응할 시간을 벌기 위해서입니다.

온체인 가격은 누구나 확인할 수 있습니다

피드는 퍼블릭 블록체인에 있으므로 모든 갱신은 누구나 들여다볼 수 있는 거래입니다. 피드의 최신 답과 갱신 시각, 라운드 번호를 읽고, 이전 라운드를 거슬러 올라가 보고, 어떤 노드가 그 피드를 운영하는지도 확인할 수 있습니다. 대출 서비스가 누군가를 청산하면, 그때 쓴 가격도 기록으로 남습니다.

예를 들어 이더리움의 ETH/USD 피드는 프록시 주소 0x5f4eC3Df9cbd43714FE2740f5E3616155c5b8419에 있습니다. 블록 탐색기에서 latestRoundData를 호출하면 소수점 여덟 자리의 가격과 마지막 갱신 시각이 나옵니다. nowcoin도 같은 방식으로, 화면에 보여 주는 가격을 체인 위의 체인링크 피드에서 직접 읽어 옵니다.

다만 이 투명성에는 한계가 있습니다. 네트워크가 언제 무엇을 보고했는지는 보이지만, 그 뒤에 있는 데이터 제공자의 원시 입력까지 모두 보이는 것은 아닙니다.

다른 방식: 피스와 유니스왑 TWAP

체인링크의 푸시(push) 방식 피드는 여러 방식 중 하나일 뿐입니다.

마인드맵: 가격 오라클푸시 방식Chainlink Data Feeds편차나 하트비트로 갱신풀 방식PythChainlink Data Streams온체인 평균유니스왑 v2 TWAP유니스왑 v3 관측값단일 현물 가격거래소 한 곳이나 풀 하나조작하기 쉬움가격 오라클마인드맵: 가격 오라클가격 오라클푸시 방식Chainlink Data Feeds편차나 하트비트로 갱신풀 방식PythChainlink Data Streams온체인 평균유니스왑 v2 TWAP유니스왑 v3 관측값단일 현물 가격거래소 한 곳이나 풀 하나조작하기 쉬움

마인드맵: 가격 오라클

  • 푸시 방식
    • Chainlink Data Feeds
    • 편차나 하트비트로 갱신
  • 풀 방식
    • Pyth
    • Chainlink Data Streams
  • 온체인 평균
    • 유니스왑 v2 TWAP
    • 유니스왑 v3 관측값
  • 단일 현물 가격
    • 거래소 한 곳이나 풀 하나
    • 조작하기 쉬움

피스(Pyth)는 풀 방식을 택했습니다. 가격은 거래소, 은행, 트레이딩 회사, 마켓 메이커 등 120곳이 넘는 1차 제공자에게서 나오며 400밀리초마다 갱신됩니다. 각 가격에는 신뢰 구간이 붙는데, 제공자들의 의견이 엇갈릴수록 그 폭이 넓어집니다. 표준적인 풀 방식에서는 누군가 필요로 할 때만 가격이 블록체인에 올라갑니다. 누구나 서명된 업데이트를 피스 계약에 제출할 수 있고, 계약은 이를 검증합니다. 대개는 그 가격을 쓰는 같은 거래 안에서 이뤄집니다.

유니스왑은 시간가중평균가격(TWAP)이라는 다른 도구를 제공합니다. 유니스왑 v2 풀은 매 블록이 시작될 때 잰 가격을 그 가격이 유지된 시간만큼 가중해 누적 합계에 더해 갑니다. 두 시점의 누적 합계를 비교하면 그 사이의 평균 가격을 알 수 있습니다. 1시간 TWAP을 5% 움직이려면 공격자는 풀 가격을 약 1시간 동안 시장보다 5% 벗어난 상태로 유지해야 하고, 그동안 계속 차익거래자에게 돈을 내줘야 합니다. 유니스왑 v3 풀은 관측값을 최대 65,535개까지 저장할 수 있지만, v4에는 내장 오라클이 없습니다.

방식작동 원리주요 약점
푸시 방식노드가 편차나 하트비트에 따라 중앙값을 기록임계값보다 작은 변동은 반영되지 않음
풀 방식서명된 가격을 사용할 때 검증앱이 업데이트를 받아 오고 신선도를 확인해야 함
TWAP풀 자체의 가격을 시간에 따라 평균빠른 시장을 늦게 따라가며, 풀이 깊은 만큼만 안전
단일 현물 가격거래소 한 곳이나 풀 하나를 직접 읽음적은 비용으로 조작 가능

자주 묻는 질문

스마트 계약은 왜 거래소 웹사이트를 바로 조회할 수 없습니까?

모든 노드가 계약을 다시 실행해 같은 결과를 내야 하기 때문입니다. 웹 데이터는 매초 바뀌고 위치에 따라 다를 수도 있어서 노드끼리 결과가 어긋납니다. 오라클은 외부 데이터를 모든 노드가 똑같이 보는 거래로 바꿔 줍니다.

체인링크 가격은 얼마나 자주 갱신됩니까?

가격이 피드의 편차 임계값을 넘거나 하트비트 시간이 다 되면, 둘 중 먼저 일어나는 쪽에 맞춰 갱신됩니다. 이더리움의 ETH/USD라면 0.5% 변동이나 1시간입니다.

오라클이 틀릴 수도 있습니까?

그렇습니다. 바탕이 되는 시장이 조작될 수 있고, 노드가 고장 날 수 있으며, 피드가 종료될 수도 있습니다. 체인링크에 따르면 종료된 피드는 0을 반환하거나 데이터를 반환하지 않습니다. 그래서 앱은 최신성 점검, 가격 상·하한, 대체 수단을 갖춥니다.

푸시 오라클과 풀 오라클은 무엇이 다릅니까?

푸시 오라클은 자체 일정에 따라 가격을 체인에 기록하므로 최신 값을 언제든 읽을 수 있습니다. 풀 오라클은 서명된 가격을 체인 밖에 두었다가 앱이나 사용자가 필요할 때 제출하며, 대개 그 가격이 필요한 같은 거래 안에서 제출됩니다.

출처

정보 제공만을 목적으로 하며, 금융·법률·세무 조언이 아닙니다.

암호화폐를 위한 유니버설 지갑.

비트코인, 이더리움, USDT, USDC 등을 한 계정에서 보유하세요. 시세는 온체인에서 읽고, 모든 수수료는 확인 전에 보여 드립니다.

계정 만들기