2023년 11월 09일
카르다노 재단
엔지니어링 디렉터
세바스찬 보데
카르다노 재단의 엔지니어링 팀은 최근 카르다노 블록체인 데이터에 접근할 수 있는 Java 기반 데이터 프로비저닝 도구인 렛저 싱크(Ledger Sync)를 개발하는 작업을 맡았습니다. 렛저 싱크는 다양한 기업뿐만 아니라 광범위한 사용자층 사이에서 잘 알려진 프로그래밍 언어로 선택지를 제공하면서 카르다노 DB 동기화와 동일한 수준의 데이터 완전성을 달성하는 것을 목표로 합니다. 카르다노의 오픈 소스 성숙도를 높이기 위한 재단의 노력에 따라, 이 프레임워크는 오픈 소스 라이선스로 출시되어 개발자와 파트너에게 체인 인덱싱을 위한 새로운 도구를 제공함으로써 카르다노 개발자 생태계의 다양성을 높일 것으로 기대합니다.
재단은 해당 프레임워크를 상업용 및 비상업용 애플리케이션과 다른 오픈 소스 도구에서 사용할 수 있는 Apache 2.0 라이선스에 따라 저장소를 공개하기로 결정했습니다. 또한 이 라이선스는 프레임워크를 기반으로 하거나 프레임워크와 함께 구축된 도구에 대한 지적재산권 및 프레임워크 자체에 대한 변경 사항(반드시 공개할 필요는 없지만)에 대해 특허권의 형태로 법적 확실성을 제공합니다. 이와 같은 방식은 기업뿐만 아니라 다른 개발자 및 커뮤니티 구성원에게 최적의 접근성과 법적 확실성을 보장해 줍니다.
데이터 구조로서의 블록체인
많은 블록체인 기반 시스템이 공통적으로 직면하는 문제는 링크된 목록 형식의 스토리지 구성으로 인해 랜덤 액세스 방식으로 데이터를 효율적으로 검색할 수 없다는 점입니다. 예를 들어, 카르다노의 블록 번호 200에 저장된 트랜잭션에 액세스하려면 애플리케이션이 원하는 정보가 포함된 블록에 도달하기 전에 처음 199개의 블록을 거쳐야 합니다. 블록체인 네트워크가 지속적으로 확장되면 이러한 접근 방식은 사실상 불가능해집니다. 예를 들어 카르다노는 현재 메인넷에 950만 개 이상의 블록이 발행되어 있습니다.
특정 정보가 블록체인에 명시적으로 저장되지 않는다는 사실은 또 다른 문제를 야기합니다. 이는 카르다노의 EUTxO 기반 회계 모델로 인해 지갑의 현재 또는 과거 잔고에도 적용됩니다. 지갑의 미사용 거래 출력(UTxO)을 알기 위해서는 지갑에 들어오고 나간 모든 UTxO를 추적한 다음, 이를 합산하여 최종 잔고를 결정해야 합니다.
대략 2022년 초까지만 해도, 생태계 내 빌더가 효율적인 방식으로 카르다노 블록체인의 데이터에 접근할 수 있는 유일한 옵션은 DB 동기화뿐이었습니다. 그러나 체인의 끝에 도달하기 위해서는 초기 동기화 과정에서 엄청난 양의 데이터를 처리해야 합니다. 따라서 모든 프로젝트에 대해 db 동기화를 실행하는 것은 사실상 불가능합니다. 또한, 프로젝트에 db-sync가 제공하는 모든 데이터가 필요하지 않은 경우도 많기 때문에, 사용자가 특정 애플리케이션에서 색인하고 사용할 수 있는 데이터를 정확하게 지정할 수 있는 소위 범위 지정 체인 인덱서가 개발되었습니다. Kupo, Scrolls, Oura, Carp와 같은 프로젝트는 모두 커뮤니티에 다양한 방식을 제공합니다.
이러한 기술적 요구 사항 외에도 기업들은 데이터 프로비저닝 서비스의 신뢰성에 대한 요구 사항도 많이 가지고 있습니다. 일반적으로 이러한 요구 사항은 소스 코드의 실제 구현이 아니라 시스템 운영 방식과 관련이 있습니다. 카르다노 재단은 이러한 비즈니스 요구 사항을 정확히 해결하기 위해 렛저 싱크를 개발했습니다. 일부는 db-sync와 유사하지만, 특정한 설계 선택을 통해 고가용성 설정이 가능한 분산 아키텍처에 더 적합하게 만들었습니다. 실제로 재단의 새로운 탐색기는 이미 렛저 싱크를 기본 데이터 파이프라인으로 사용하고 있습니다.
프로젝트가 카르다노 블록체인의 특정한 데이터를 필요로 하지만 내장된 고가용성 및 데이터 통합 오프로딩과 같은 기능을 포기할 수 있는 경우, yaci-store, scrolls, Kupo와 같은 모듈식 체인 인덱서가 적합한 선택이 될 수 있습니다. 반면, 렛저 싱크는 프로젝트가 접근하기 쉬운 프로그래밍 언어로 구축된 프레임워크를 기반으로 블록체인 관련 데이터에 안정적으로 액세스해야 하는 경우, 특히 카르다노 위에서 자바 기반 데이터 레이어에 대한 신뢰할 수 있는 옵션을 제공합니다.
렛저 싱크의 초기 설계는 세 가지 목표를 이루고자 했습니다:
- Java로 네트워크 미니 프로토콜을 구현하여 다른 프레임워크에 대한 종속성 없이 Java 프로그래밍 언어의 기본 방식으로 네트워크 데이터에 액세스할 수 있도록 한다.
- 순수한 크롤링과 데이터 통합 단계를 분리하여 확장형 아키텍처, 즉 연산 일부를 컨테이너나 서버와 같은 여러 인스턴스로 오프로드할 수 있으며, 결과적으로 데이터를 단일 서버의 로컬에 보관하지 않고 네트워크를 통해 전송할 때 발생하는 부정적 영향을 평가할 수 있도록 한다.
- 재단이 이미 오픈소스로 공개한 재무, 준비금 및 보상 계산의 노드 독립적 버전을 구현한다.
재단의 탐색기 베타 버전에 적용된 최초 구현은 앞의 두 가지 사항을 다루었습니다. 재단의 엔지니어링 팀은 현재 또 다른 오픈 소스 프로젝트의 일부로 세 번째 사항을 작업하고 있습니다.
렛저 싱크 저장소로 가는 여정
팀은 첫 번째 개발 단계에서 많은 교훈을 얻었으며, 현재 오픈 소스 라이선스로 출시된 버전에서 이미 해결했습니다.
프로젝트가 시작될 당시에는 잘 알려진 Yaci 라이브러리가 사용할 수 있는 상태로 아직 제공되지 않았기 때문에 처음부터 Java로 네트워크 미니 프로토콜을 개발하기 시작했습니다. 그럼에도 불구하고 이 커뮤니티 프로젝트의 채택을 촉진하기 위해 이전 네트워크 미니 프로토콜 구현을 현재 버전에서 Yaci로 대체했습니다. 이 변경으로 인해 프로토콜의 모든 변경 사항을 최신 상태로 유지 관리하기 위 하나의 Java 기술 스택만 유지하면 됩니다.
다운스트림 처리와 데이터 통합에서 크롤링을 분리하는 등 서로 다른 서비스 간의 작업을 조정하기 위해, 팀은 처음에 널리 알려진 오픈 소스 스트리밍 데이터 플랫폼인 Redis와 Apache Kafka를 사용했습니다. 이 접근 방식은 효과적이었고, Kafka와 Redis는 분산 아키텍처에서 강력한 구성 요소를 제공하지만, 배포 비용이 상당히 많이 들고 특히 소규모 설정의 경우 번거로울 수 있었습니다. 최신 릴리스에서는 카프카의 필요성을 없애고 선택 사항으로 전환했습니다. 렛저 싱크는 카프카 없이도 작동하지만, 개발자는 Yaci Store에서 제공하는 인앱 이벤트 메커니즘을 사용하여 블록 데이터를 카프카나 RabbitMQ와 같은 다양한 메시징 플랫폼에 게시한 다음 다른 애플리케이션에서 이를 사용할 수 있습니다.
또한 처음에는 db-sync에서 사용하는 것과 동일한 데이터베이스 스키마로 시작했습니다. 이 접근 방식은 재단의 탐색기를 동시에 개발하는 동안 탐색기 백엔드에서 테스트에 실제 데이터를 사용할 수 있게 해주었기 때문에 유용했습니다. 그러나 도메인 중심 설계 접근 방식에서 벗어나 초기 렛저 싱크 버전을 위한 전용 스키마를 만들지 않았기 때문에 렛저 싱크에 대한 설계 문제가 발생하기도 했습니다. db-sync의 데이터베이스 스키마는 그 목적에 부합하지만, 렛저 싱크의 데이터 처리 과정에서 선택한 아키텍처를 지원하지 않고 병렬화를 목표로 하지 않습니다. 따라서 현재 기존 스키마를 대체할 새로운 스키마를 설계하는 작업을 진행 중입니다.
또한, 최근 추가된 소스 코드의 대부분은 Yaci의 Conway 시대에 대한 지원을 포함하고 있습니다. 이 업데이트를 통해 원장 동기화뿐만 아니라 다른 모든 자바 기반 도구가 최신 원장 및 네트워크 미니 프로토콜 버전과 함께 동작할 수 있게 되었습니다.
재단의 엔지니어링 팀은 또한 초기 동기화 과정에서 여러 블록의 병렬 처리와 단일 블록의 트랜잭션을 구현하기 위한 워크스트림을 시작했습니다. 이러한 연산 병렬화는 UTxO 간의 종속성을 고려해야 하기 때문에 간단하지 않으며, 결과적으로 병렬화를 통해 얻을 수 있는 성능이 저하될 수 있습니다. 또한, 현재 진행되고 있는 개발 노력에는 쿠버네티스 기반 설정이나 단순히 도커-컴포즈를 통한 다양한 배포 시나리오에서 렛저 싱크를 호스팅하기 위한 청사진을 제공하는 것도 포함됩니다.
앞으로 나아갈 길
기술적 기능 외에도, 렛저 싱크는 지속적인 유지보수와 오픈 소스 프로젝트로서의 저장소 운영을 약속하는 카르다노 재단과 함께 제공됩니다. 라이브러리 및 도구 자체로서의 프레임워크 외에도, 이러한 노력은 커뮤니티 그룹과 협력하여 렛저 싱크가 하부 데이터 레이어로 사용될 수 있는 탈중앙화 데이터 API의 표준 및 잠재적 참조 구현을 정의하는 것을 목표로 하고 있습니다.
전문적인 지원 모델을 통해 고가용성, 정확성, 정합성을 보장하는 호스팅 데이터 API를 제공하는 것은 추가적인 목표입니다. 이를 보장하면 조직과 기업의 요구 사항을 해결하여 블록체인 솔루션을 원활하게 구현하고 더 많은 기업이 블록체인 솔루션을 채택할 수 있도록 장려할 수 있습니다. 그러나 이러한 작업을 수행하려면 기존 프로젝트와의 조정과 협력이 필요합니다. 그렇게 해야만 이미 존재하는 카르다노 생태계의 역량을 최대한 활용하는 동시에 새로운 비즈니스 모델의 다양성을 지원하는 접근 방식을 보장할 수 있습니다.
카르다노 재단은 모든 분들이 렛저 싱크를 사용해 보시고, 디스코드를 통해 또는 렛저 싱크 저장소에 기능 요청이나 버그 리포트를 제출해 재단 팀과 소통할 수 있기를 기대합니다. 여러분의 피드백과 기여를 기다리겠습니다.
* Source: Accessing Cardano Blockchain Data with Ledger Sync
* Translation: Ilhun@CryptoVeri enics_sky@naver.com
1 post - 1 participant