---
title: "서브그래프(Subgraph)란 무엇인가? (가이드)"
description: "서브그래프의 작동 방식과 활용 방법, 시작하는 방법 알아보기"
---

# 서브그래프(Subgraph)란 무엇인가? (가이드)

**서브그래프는 애플리케이션별 블록체인 데이터를 집계하여 풀스택 개발자가 빠르게 접근할 수 있게 해줍니다.**

블록체인은 특정 애플리케이션과 무관하게 데이터를 시간순으로 기록합니다. 과거에는 개발자가 자신의 스마트 컨트랙트와 관련된 정보를 표시하려면 JSON-RPC를 사용해 블록 단위, 트랜잭션 단위로 일일이 검색해야 했습니다.

서브그래프는 개발자가 온체인 데이터에 실시간으로 쉽게 접근할 수 있는 방법을 제공하며, 사용자를 위한 유용한 앱 상호작용을 만들 수 있게 해줍니다.

이 글에서는 서브그래프의 기능, 일반적인 활용 사례, 장점, 이용 가능한 제공업체, 그리고 개발자가 서브그래프 사용을 시작하는 데 도움이 되는 자료를 살펴봅니다.

## **서브그래프란 무엇인가?**

**서브그래프는 애플리케이션별 블록체인 데이터를 집계하여 프론트엔드 개발자가 빠르게 접근할 수 있게 해줍니다.**

서브그래프는 [GraphQL](https://www.alchemy.com/dapps/graphql) API를 통해 개발자에게 노출되며, 사용자는 자신의 컨트랙트에서 발생하는 트랜잭션 데이터를 실시간으로 쿼리할 수 있습니다. 서브그래프는 견고한 프론트엔드 인터페이스가 필요한 복잡하고 커스텀한 스마트 컨트랙트를 개발하는 개발자에게 특히 유용합니다.

예를 들어, 지난 24시간 동안 하나의 [Uniswap](https://www.alchemy.com/dapps/uniswap) v3 유동성 풀 내 모든 트랜잭션을 쿼리하려면, Uniswap은 스키마를 정의하고, 이벤트 데이터를 인덱싱해 서브그래프를 만든 다음, 생성된 GraphQL API를 사용해 서브그래프를 쿼리하기만 하면 유연하고 효율적으로 블록체인 데이터를 얻을 수 있습니다.

서브그래프를 사용하면 개발자는 필요에 따라 데이터를 필터링하고 정렬하여 자신의 dapp에 중요한 정보만 추출할 수 있습니다. 또한 서브그래프는 [풀 노드나 아카이브 노드](https://www.alchemy.com/overviews/full-vs-light-vs-archive-nodes)에서 직접 데이터를 요청하는 대신 데이터를 미리 컴파일하고 인덱싱함으로써 쿼리 처리 속도를 높여 더 효율적인 데이터 쿼리를 가능하게 합니다.

### 서브그래프는 어떻게 동작하는가?

**서브그래프 "매핑"은 서브그래프의 "매니페스트"에 따라 노드가 새로 발견된 각 블록에서 관련 데이터를 가져오도록 지시하는 스크립트입니다. 이 새 데이터는 서브그래프에 추가되어, 서브그래프의 "스키마"에 정의된 대로 GraphQL 호출을 통해 개발자에게 제공됩니다.**

먼저 서브그래프의 기본 구조와 구성 요소, 그리고 이들이 서로 어떻게 상호작용하는지 이해해야 합니다.

#### 서브그래프 매니페스트란 무엇인가?

**매니페스트**에는 데이터 소스, 템플릿, 그리고 일부 서브그래프 메타데이터\(예: 설명, 저장소 등\)에 대한 정보가 담겨 있습니다. 매니페스트는 서브그래프가 인덱싱하는 스마트 컨트랙트, 해당 스마트 컨트랙트의 관련 이벤트, 그리고 이벤트 데이터를 Graph 노드에 저장되고 쿼리 가능한 엔티티로 전달하는 방법을 정의합니다.

#### 서브그래프 스키마란 무엇인가?

**스키마**는 서브그래프 데이터가 어떻게 구성되어 있고 GraphQL을 통해 어떻게 쿼리하는지를 설명합니다. 스키마는 엔티티와 각 엔티티의 구조화된 데이터를 정의해야 합니다.

예를 들어 Uniswap v3 풀의 실시간 분석을 위한 서브그래프를 만드는 경우, 엔티티는 풀이 될 수 있으며, 스키마는 해당 풀의 자산, 이름, 스마트 컨트랙트 주소, 수수료 등을 정의합니다.

#### 서브그래프 매핑이란 무엇인가?

**매핑**은 매니페스트에 지정된 이벤트를 서버가 발견할 때마다 호출되는 AssemblyScript 코드입니다. 매핑은 이벤트나 호출에서 오는 데이터를 변환하여 Graph 노드 저장소에 저장하는 역할을 하는 이벤트 핸들러를 정의합니다.

### **서브그래프의 대표적인 활용 사례는 무엇인가?**

**서브그래프는 DeFi, NFT, DAO 등 다양한 온체인 애플리케이션에서 자주 사용됩니다.**

#### **커스텀 스마트 컨트랙트 인덱싱**

커스텀 스마트 컨트랙트\(특히 ERC1155나 ERC721 NFT 같은 표준을 따르지 않는 컨트랙트\)에 대한 데이터를 인덱싱하려는 블록체인 애플리케이션 개발자는 서브그래프를 자주 만드는 편입니다. 커스텀 인덱싱은 검색이나 필터링 같은 기능을 갖춘 프론트엔드 사용자 인터페이스를 구축하는 개발자에게도 특히 중요합니다.

#### **탈중앙화 금융\(DeFi\)**

[DeFi 서브그래프](https://www.alchemy.com/dapps/best/defi-subgraphs)는 토큰 가격, 환율, 유동성, 거래량 같은 블록체인 데이터를 인덱싱하고 쿼리하는 애플리케이션에서 흔히 사용됩니다. 서브그래프를 사용하는 DeFi 앱은 사용자에게 최신 데이터에 대한 실시간 접근을 제공하고, 효율적인 거래 및 기타 금융 작업을 가능하게 할 수 있습니다.

#### **대체 불가능 토큰\(NFT\)**

[NFT 서브그래프](https://www.alchemy.com/dapps/best/nft-subgraphs)는 소유권, 출처, 거래 내역 같은 NFT 데이터를 오프체인 데이터와 함께 인덱싱하고 쿼리하는 데 사용할 수 있습니다. 이는 NFT 마켓플레이스 및 기타 앱이 NFT를 사고, 팔고, 거래하는 사용자에게 더 매끄러운 경험을 제공하는 데 도움이 될 수 있습니다.

#### **탈중앙화 자율 조직\(DAO\)**

중앙화된 권한과 달리, 탈중앙화 자율 조직 또는 [DAO](https://www.alchemy.com/dapps/top/daos)는 분산된 커뮤니티가 운영하는 조직입니다. DAO 의사결정의 대부분이 온체인에서 이루어지기 때문에, [DAO 서브그래프](https://www.alchemy.com/dapps/best/dao-subgraphs)는 구성원이 데이터를 제대로 투표하고 검토할 수 있게 하는 데 매우 중요합니다.

#### **게임​​**

사용자 계정 잔액, 게임 상태, 인게임 오브젝트 같은 데이터에 대한 실시간 접근은 [블록체인 기반 게임](https://www.alchemy.com/overviews/play-to-earn-games)에서 자주 요구됩니다. 이러한 데이터는 서브그래프를 통해 인덱싱하고 쿼리할 수 있어, 더 효율적이고 반응성 좋은 게임플레이 및 기타 기능을 구현할 수 있습니다.

## **서브그래프로 구축할 때의 이점은 무엇인가?**

서브그래프는 풀스택 개발자가 사용할 수 있는, 블록체인 데이터를 인덱싱하는 정말 간단한 패러다임입니다. AssemblyScript 코드를 조금 작성하면 바로 사용할 수 있습니다! 호스팅 솔루션의 경우 백엔드가 함께 제공되므로 개발자가 직접 데이터베이스와 서버를 운영할 필요가 없습니다.

서브그래프로 구축할 때의 다른 몇 가지 이점은 다음과 같습니다: 단순성, 호환성, 복원력.

### **1. 서브그래프의 단순성**

서브그래프는 쿼리 가능한 애플리케이션별 데이터의 데이터베이스입니다. 호스팅된 서브그래프를 데이터 백엔드로 사용하면 개발자가 직접 데이터베이스를 만드는 데 드는 시간과 부담을 줄일 수 있습니다.

서브그래프는 각각 AssemblyScript와 GraphQL로 정의되고 접근됩니다. 이는 일반적으로 풀스택 개발자에게 익숙한 패러다임이므로, 새로운 web3 개발자도 서브그래프에 쉽게 접근할 수 있습니다.

### **2. 여러 블록체인과의 호환성**

서브그래프는 수많은 EVM 호환 블록체인 네트워크에서 동작한다는 장점이 있어, 개발자가 여러 소스에서 데이터를 가져올 수 있습니다. 그 결과 탈중앙화 앱을 다양한 블록체인 네트워크에서 실행되도록 설계할 수 있어 유연성과 확장성이 높아집니다.

각 서브그래프는 하나의 체인에서만 데이터를 가져오지만, 개발자는 유사한 스키마와 매핑을 사용해 최소한의 엔지니어링 작업으로 서로 다른 지원 블록체인 네트워크에 서브그래프를 배포할 수 있습니다. 서브그래프 쿼리는 graph-cli를 통해서나 이 기능을 지원하는 제공업체를 통해 크로스체인으로도 수행할 수 있습니다.

### 3. 더 높은 보안성과 복원력

서브그래프를 쿼리할 때 탈중앙화 인덱싱 프로토콜을 사용하면 개발자가 자신의 애플리케이션에서 풀스택 탈중앙화를 유지하는 방식을 선택할 수 있습니다. 탈중앙화 버전과 호스팅 버전의 서브그래프 사용 사이에는 성능상의 트레이드오프가 있지만, 선택지가 있다는 것은 개발자가 자신의 특정 사용 사례에 맞게 최적화할 수 있게 해줍니다.

탈중앙화 인덱서를 사용하면, 애플리케이션은 다양한 제공업체로부터 여러 서브그래프를 실행함으로써 단일 데이터 소스에 대한 의존도를 낮출 수 있어, 단일 소스에 대한 공격이나 다운타임에 덜 취약해집니다. 이러한 서비스는 Graph 프로토콜에서 제공합니다.

또한 서브그래프는 잠재적으로 유해한 데이터를 걸러내도록 만들어질 수 있어, 애플리케이션에 추가적인 보호 계층을 더할 수 있습니다. 여러 서브그래프를 운영함으로써 애플리케이션의 데이터 인프라를 더 안전하고 복원력 있게 만들 수 있습니다.

## **서브그래프로 앱을 구축할 때의 트레이드오프는 무엇인가?**

**기존 서브그래프는 사용하기 쉽지만, 만들고 디버깅하는 것은 복잡할 수 있으며, 비용이나 설계 측면에서 제약이 있을 수 있습니다**

### 1. 서브그래프 개발 및 디버깅

서브그래프를 효과적으로 사용하려면 개발자는 복잡한 생태계를 익혀야 하며, 도구와 가시성 부족으로 인한 서브그래프 디버깅의 어려움을 헤쳐나가야 합니다. 서브그래프로 구축할 때의 또 다른 어려움은 매핑이 웹어셈블리로 트랜스파일된다는 점인데, 이는 서브그래프 디버깅을 더 어렵게 만듭니다!

### **2. 커스터마이징 제한**

서브그래프는 어떤 데이터를 인덱싱하고 어떻게 쿼리할지에 대해 많은 유연성을 제공하지만, 커스터마이징에는 제한이 있을 수 있습니다. dapp에 매우 엄격한 인덱싱이나 쿼리 요구 사항이 있다면, 완전히 커스텀한 데이터 인덱싱 및 변환 솔루션이 필요할 수 있습니다.

### **3. 비용**

비용은 새로운 기술 솔루션을 선택해야 하는 애플리케이션 개발자에게 중요한 결정 요인입니다. 서브그래프를 활용하면 JSON-RPC에 비해 블록체인 데이터를 더 쉽고 빠르게 쿼리할 수 있지만, 인덱싱 및 쿼리 서비스 비용을 지불해야 하는 등 추가 비용이 발생하며, 이는 시간이 지날수록 누적될 수 있습니다.

### 4. 인덱싱 속도

데이터 양이 많은 애플리케이션 개발자들은 서브그래프 사용의 어려움 중 하나로 인덱싱 속도를 자주 언급합니다. 인덱싱 속도는 데이터의 양과 복잡성뿐 아니라 사용하는 인덱싱 솔루션에 따라서도 달라질 수 있습니다.

## **최고의 서브그래프 제공업체는 어디인가?**

**이 분야에서 더 두드러진 제공업체로는 The Graph, Goldsky, ChainStack이 있습니다.**

### **The Graph**

[The Graph](https://www.alchemy.com/dapps/the-graph)는 개발자가 확장 가능하고 비용 효율적인 방식으로 블록체인 데이터의 하위 집합을 생성하고 쿼리할 수 있게 해줍니다.

서브그래프 제공업체는 The Graph의 도구와 인프라를 활용해 서브그래프를 만들고, 배포하고, 유지 관리할 수 있으며, 개발자는 The Graph의 GraphQL API를 사용해 이를 쉽게 쿼리할 수 있습니다. The Graph의 서브그래프 서비스는 유연하고 구성 가능하도록 설계되어, 개발자가 어떤 블록체인이나 데이터 소스에서든 데이터를 인덱싱하고 쿼리할 수 있습니다.

**서브그래프를 The Graph에 배포하는 데는 크게 세 가지 방법이 있습니다:**

1. 셀프 호스팅
1. The Graph Hosted Service
1. Subgraph Studio

#### **1. 셀프 호스팅**

개발자는 서브그래프 생태계를 구성하는 다양한 구성 요소\(\`graph-node\` 코드베이스\)를 직접 호스팅하고, 이 셀프 호스팅 시스템에 서브그래프를 배포할 수 있습니다.

#### **2. The Graph의 호스팅 서비스**

직접 인프라를 운영하고 싶지 않은 개발자는 서브그래프를 The Graph Hosted Service에 무료로 배포할 수 있습니다. 이는 새롭고 작은 팀에게 좋은 선택지인데, 사용이 쉽고 낮은 신뢰성과 느린 속도를 감내할 수 있기 때문입니다. 다만 [The Graph의 호스팅 서비스는 현재 폐지 절차를 밟고 있습니다](https://thegraph.com/blog/sunsetting-hosted-service/).

#### **3. Subgraph Studio**

개발자는 [Subgraph Studio](https://thegraph.com/docs/en/deploying/subgraph-studio/) 제품을 통해 서브그래프를 The Graph의 탈중앙화 네트워크에 배포할 수 있으며, 이 과정에는 The Graph의 토큰이 관여합니다. 다만 이 배포 방식은 호스팅 솔루션의 모든 기능을 지원하지는 않습니다\(예: IPFS 기능이 없고 지원되는 체인 수도 더 적습니다\).

### **Goldsky**

[Goldsky](https://www.alchemy.com/dapps/goldsky)는 엔지니어가 정교한 블록체인 및 [데이터 스트리밍 인프라](https://www.alchemy.com/docs/reference/custom-webhooks-example)를 직접 관리할 필요 없이 자신의 앱을 위한 실시간 데이터 스트림을 만들 수 있게 해줍니다. Goldsky는 블록체인이나 서브그래프를 인덱싱하고, 데이터를 요구 사항에 맞게 변환한 다음, 그 결과를 데이터 웨어하우스, 웹훅, 또는 API로 실시간 스트리밍할 수 있습니다.

### Chainstack

[Chainstack Subgraphs](https://www.alchemy.com/dapps/chainstack-subgraphs)는 스테이킹, 위임, 리워드 지급 같은 번거로움 없이 활용할 수 있는, 서브그래프 배포를 위한 매우 빠르고 프로덕션 수준의 솔루션입니다. 빠른 인덱싱과 지속적인 데이터 가용성을 위해 [Chainstack](https://www.alchemy.com/dapps/chainstack)에 의지할 수 있습니다.

## **서브그래프 개발 자료**

**다음은 서브그래프로 구축을 시작하는 개발자에게 도움이 되는 여러 유용한 자료 목록입니다:**

### **1. The Graph 문서**

[The Graph 문서](https://thegraph.com/docs/en/)는 개발자가 탈중앙화 앱을 위한 서브그래프 구축을 시작하는 데 필요한 모든 지식을 제공하는 종합적인 자료입니다. 개발 환경 구성부터 서브그래프 배포 및 쿼리에 이르기까지 모든 것을 다루는 상세한 안내, 튜토리얼, 참고 자료를 제공합니다.

### **2. 예제 서브그래프**

The Graph의 공식 Github 저장소에는 Ethereum, Polygon, IPFS 등을 포함한 블록체인 네트워크의 데이터를 인덱싱하고 쿼리하기 위한 서브그래프 구현 예제가 담겨 있습니다. 이 저장소는 특정 dapp의 요구 사항에 맞게 커스터마이징할 수 있는 [간단한 서브그래프 템플릿](https://github.com/graphprotocol/example-subgraph)과 예제 코드를 제공합니다.

### **3. Messari 표준 서브그래프**

[Messari](https://www.alchemy.com/dapps/messari)의 [서브그래프 저장소](https://subgraphs.messari.io/)는 Ethereum과 BNB Chain 같은 주요 블록체인 네트워크의 데이터를 분석하기 위한 다양한 사전 구축된 서브그래프를 개발자에게 제공합니다. 과거 가격 데이터, 온체인 지표 등 다양한 기능을 제공하여, 서브그래프를 활용하려는 개발자에게 유용한 자료입니다.

## **서브그래프를 사용해야 하는가?**

모니터링하고 싶은 커스텀 스마트 컨트랙트가 있다면, 서브그래프를 구축하는 것이 좋은 해결책이 될 수 있습니다.

서브그래프는 애플리케이션별 블록체인 데이터를 집계하여 프론트엔드 개발자가 빠르게 접근할 수 있게 해줍니다.
