신규: Helius가 Light Protocol을 인수했습니다
Solana 온체인 이벤트 수신하기
블로그/기초

Solana 온체인 이벤트 수신하기

공동 창업자 겸 CEOX의 Mert MumtazLinkedIn의 Mert Mumtaz
읽는 데 7분

소개

암호화폐 개발자에게 가장 기본적인 작업 중 하나는 블록체인을 수신하는 시스템을 구축하는 것입니다. 결제 확인, NFT 판매, 자금 이체를 수신하거나 보안을 위해 계정을 모니터링할 수 있습니다. 사용 사례가 무엇이든 체인을 감시하는 시스템은 내결함성과 안정성을 갖추고 지연 시간에 최적화되어야 합니다.

이 글에서는 Solana에서 이러한 시스템을 구축하는 몇 가지 방법과 사용 사례를 살펴보고, Helius를 활용해 더 나은 시스템을 구축하는 방법을 알아봅니다.

블록체인 수신하기

온체인 이벤트를 수신하는 방법은 크게 두 가지입니다.

  1. 폴링
  2. 스트리밍

폴링은 클라이언트나 애플리케이션이 서버 또는 데이터 소스에 새로운 데이터가 있는지 반복해서 확인하는 방식입니다. 정해진 간격으로 실행하거나 필요할 때 요청할 수 있습니다. 서버에 요청을 보내면 변경 여부와 관계없이 최신 데이터를 응답합니다. 따라서 업데이트가 없어도 클라이언트나 애플리케이션이 같은 데이터를 반복해서 받을 수 있습니다.

반면 스트리밍은 업데이트가 발생할 때 서버가 클라이언트나 애플리케이션으로 데이터를 푸시하는 방식입니다. 클라이언트가 데이터를 반복해서 요청할 필요가 없으며, 서버는 변경 사항이 있을 때만 데이터를 보냅니다. 관련 데이터만 전송하므로 더 효율적이며 실시간 데이터 전송이 가능합니다.

폴링은 간단하고 널리 사용되지만 네트워크 트래픽이 많아질 수 있으며, 특히 요청 빈도가 높으면 리소스를 많이 소모합니다. 반면 스트리밍은 서버가 업데이트만 보내므로 전송되는 데이터와 네트워크 트래픽을 줄일 수 있어 더 효율적입니다.

스트리밍은 주식 시장 피드, 소셜 미디어 업데이트, 온라인 게임처럼 실시간 데이터 업데이트가 중요한 애플리케이션에서 주로 사용됩니다. 폴링은 이메일 클라이언트나 뉴스 웹사이트처럼 데이터 업데이트 빈도가 낮거나 중요도가 낮은 애플리케이션에서 더 일반적으로 사용됩니다.

두 방식 모두 장단점이 있지만, 실시간 데이터 업데이트에는 일반적으로 스트리밍이 더 효율적이고 선호됩니다. 폴링은 데이터 업데이트 빈도가 낮은 일부 애플리케이션에서 여전히 유용합니다.

대부분의 블록체인 워크플로, 특히 Solana에서는 스트리밍을 사용하는 것이 좋습니다. 여러 이유가 있지만, 스트리밍은 구현이 훨씬 간단하며 Solana가 강점을 보이는 고트래픽 사용 사례도 더 쉽게 처리할 수 있습니다.

Solana에서 온체인 이벤트를 수신하는 방법

Solana는 매우 빠른 블록체인입니다. 400ms마다 새 블록을 생성하며, 각 블록에는 일반적으로 수천 개의 트랜잭션이 포함됩니다. 놀랍게도 지금이 앞으로 가장 느린 시점입니다. 핵심 엔지니어들이 시스템을 계속 개선함에 따라 체인의 새 데이터 처리 속도는 더욱 빨라질 것입니다. 따라서 확장성을 고려해 시스템을 설계해야 합니다.

다행히 Solana에서는 다음과 같은 방법으로 온체인 데이터를 수신할 수 있습니다.

  1. 폴링
  2. WebSockets
  3. Geyser
  4. Helius Webhooks

폴링

개념적으로는 가장 간단할 수 있지만, Solana에서 이벤트를 수신하는 방법 중 가장 권장하지 않는 방식입니다. 

가져오려는 데이터에 따라 Solana RPC 노드의 JSON-RPC 메서드를 반복 호출하는 루프를 설정하면 됩니다. 일반적인 사용 사례로는 새 블록을 수신하기 위해 getBlock 메서드를 폴링하거나, 특정 주소의 새 트랜잭션을 확인하기 위해 `getSignaturesForAddress`를 폴링하는 방식이 있습니다.

흥미롭게도 새 업데이트를 트리거하는 로직을 고도로 맞춤 설정해야 하는 고급 사용 사례에는 이 방법이 가장 적합할 수도 있습니다.

WebSockets

Solana RPC는 개발자가 연결할 수 있는 PubSub WebSockets도 제공합니다. 사용할 수 있는 이벤트 유형은 다음과 같습니다.

다음은 WebSockets를 지원하는 Helius RPC를 통해 계정 변경 사항을 수신하는 간단한 JavaScript 코드 예시입니다.

코드
const solanaWeb3 = require(‘@solana/web3.js’)
const connection = new solanaWeb3.Connection(“https://rpc.helius.xyz?api-key=“);
(async () => {  
connection.onAccountChange(
new solanaWeb3.PublicKey(“5yv6Vh8FNx93TXeSS94xy8VLZMbTqx4vXp7Zg5bDLZtE”),
(updatedAccountInfo, context) => console.log(“Updated account info: “, updatedAccountInfo),“confirmed”  );
})();

‍WebSockets는 프로토타입 제작에는 매우 유용하지만, 실제 환경에서는 상당히 취약하고 안정성이 떨어진다는 중요한 한계가 있습니다. 이벤트를 놓칠 수 있으므로 미션 크리티컬 워크플로에는 사용하지 않는 것이 좋습니다.

Geyser

요약 — 플러그인 인터페이스로 데이터 수신 방식을 맞춤 설정하여 Solana 노드에서 데이터를 직접 스트리밍할 수 있습니다. 이는 Solana에서 데이터를 스트리밍하는 가장 빠르고 지연 시간이 짧은 방법입니다. DeFi 청산과 지연 시간에 민감한 애플리케이션에는 반드시 필요합니다.

Solana 검증인과 RPC에는 Solana 네이티브 데이터 스트리밍 방식인 Geyser 플러그인이 있습니다.

검증인은 "Geyser" 플러그인이라는 플러그인 메커니즘을 지원하도록 개선되었습니다. 이를 통해 계정, 슬롯, 블록, 트랜잭션 정보를 관계형 데이터베이스, NoSQL 데이터베이스, Kafka 같은 외부 데이터 저장소로 전송할 수 있습니다. 이후 RPC 서비스가 외부 데이터 저장소의 데이터를 사용하도록 개발하면 캐싱과 인덱싱 등 더 유연하고 세밀한 최적화가 가능합니다.

하지만 Geyser를 설정하는 작업은 상당히 복잡하고 비용도 많이 들 수 있습니다. 설정한 후에도 원활한 운영을 위해 많은 DevOps 작업이 필요합니다. Helius는 플러그인을 업로드하고 단 몇 초 만에 실행할 수 있는 GeyserVM을 개발했습니다. 고가용성과 이중화를 갖춘 클러스터가 데이터 문제를 방지하며, 리소스를 공유하므로 월간 비용을 200% 이상 절감할 수 있습니다!

물론 전용 Geyser 서비스도 제공합니다. 자세한 내용은 여기를 클릭하세요.

Webhooks

Webhook의 개념은 간단합니다. 이벤트를 수신하고 이벤트가 발생하면 설정한 서버로 전송합니다. 예를 들어 NFT 판매가 발생할 때마다 Discord 서버에 알림을 보내려면 webhook으로 간단히 구현할 수 있습니다. 

Solana에서 이벤트를 수신하는 대부분의 워크플로에는 webhook이 가장 쉽고 유연하며 비용 효율적인 방법입니다. 5ms 차이가 애플리케이션의 성패를 좌우하는 초저지연 사용 사례에서는 신중해야 합니다. 고빈도 거래가 대표적입니다.

Helius는 암호화폐 업계에서 가장 강력한 webhook 서비스를 구축했습니다. 

하나의 webhook으로 최대 100,000개 주소를 수신하고, 원하는 이벤트 유형을 설정할 수 있습니다. 이벤트 파싱도 대신 처리합니다. 서버 URL만 입력하면 무료로 바로 시작할 수 있습니다.

이러한 서비스의 많은 이점 중 하나는 개발자의 시간과 노력을 몇 주 또는 몇 달씩 절약할 뿐만 아니라, 성장에 맞춰 확장되는 탄력적인 백엔드도 제공한다는 점입니다. 

Webhook에 관한 자세한 내용은 여기를 클릭하세요.

사용 사례

이제 Solana에서 온체인 이벤트를 수신하는 방법을 알았습니다. 다음에는 무엇을 할 수 있을까요? 몇 가지 흥미로운 사용 사례를 소개합니다.

봇

  • NFT가 마켓플레이스 X에 등록되면 "nft buy" 작업을 트리거합니다.
  • 마진 포지션이 부실해지면 "liquidation" 작업을 트리거합니다.

모니터링 및 알림

  • 프로그램에서 특정 로그가 발생하면 PagerDuty 연동을 트리거합니다.
  • 토큰 계정 잔액이 X% 넘게 변하면 Dialect로 경고 작업을 전달합니다.

이벤트 기반 인덱싱

  • 특정 프로그램에서 트랜잭션이 발생하면 데이터베이스나 백엔드로 직접 전송합니다.

알림 및 활동 추적

  • 지갑 X에서 지갑 Y로 이체가 발생하면 Slack 알림이나 이메일을 보냅니다.

분석 및 로그

  • 이벤트 X가 발생하면 ETL 파이프라인으로 전송하거나 Helius에 직접 저장하여 시간에 따른 추세를 확인합니다.

워크플로 자동화

  • 이벤트 X가 발생하면 원하는 작업 세트를 트리거합니다.

결론

이 글에서는 폴링과 스트리밍의 차이, Solana 블록체인을 수신하는 다양한 방법, 몇 가지 사용 사례를 살펴봤습니다.

결론적으로 폴링, WebSockets, Geyser 또는 Helius webhooks를 통해 Solana 온체인 이벤트를 수신할 수 있습니다. 각 방식에는 장단점이 있으므로 구현할 접근 방식을 결정하기 전에 시스템 요구 사항을 고려해야 합니다. 읽어주셔서 감사합니다!

Solana RPC, Solana API, Solana Webhooks, Solana 인프라를 포함한 Helius 서비스에 대해 자세히 알아보려면 웹사이트를 방문하세요.

‍

Helius 구독하기

최신 Solana 개발 소식을 확인하고 새 게시물 알림을 받아보세요