자바스크립트 프로그래밍 도구, 클라리넷 SDK 출시

Logan Lee
스택스 한국 블로그
6 min readOct 12, 2023

이제 클라리넷 SDK(Clarinet SDK)를 활용해 클라리넷을 자바스크립트(JavaScript) 환경에서 사용할 수 있습니다. Stacks.js 및 Vitest와 같은 생태계 도구들은 이제 SDK와 통합되어, 개발자들이 클라리넷 테스트를 더 표준적이고 읽기 쉬운 형태로 수행할 수 있도록 합니다.

히로는 Clarinet JS SDK를 ‘npm’에 배포했습니다. 이 라이브러리는 클라리넷의 많은 기능은 자바스크립트 생태계에 노출시킬 것이며, 이 중에는 핵심 기능인 ‘simnet’이 포함됩니다.

심넷(simnet)은 개발자들이 가상 혹은 라이트 버전의 스택스 네트워크와 상호 작용할 수 있게 해주는 기능으로, 해당 프로덕션은 스택스 메인넷에서 사용되는 것과 동일한 클래리티 가상머신(Clarity VM)을 내장하고 있습니다. 개발자들은 이 새로운 자바스크립트 SDK를 활용해 Node.js 상에서 심넷을 익숙한 방식으로 제어할 수 있습니다.

클라리넷, 자바스크립트를 만나다.

클라리넷의 역사

클라리넷은 히로에서 처음으로 출시한 도구 중 하나로, 2021년 여름에 출시되었습니다. 클라리넷은 클래리티 런타임, REPL 및 테스트 하네스를 포함한 CLI 패키지입니다. 클라리넷의 핵심 목적은 간단합니다. 개발자들이 신속하고 편리하게 스마트 컨트랙트를 작성·배포·테스트할 수 있도록 돕는 도구를 제공하는 것입니다.

히로는 지난 2년 동안 클라리넷을 더 견고하고 완전한 도구로 만들기 위해 여러 기능을 추가했습니다. 클래리티 코드를 단계별로 디버깅하는 기능이나, 상태 분석을 통한 컨트랙트 결함 검출 기능이 대표적입니다. 그 결과 히로 플랫폼(Hiro:Platform)을 통해 많은 테스팅과 디버깅을 거친 오늘날의 클라리넷 활용, 클래리티 기반의 개발은 물론 예약 배포 기능과 같은 DevEx 기능들 역시 활용할 수 있게 되었습니다.

클라리넷의 가장 강력한 유즈 케이스 중 하나는 스마트 컨트랙트를 테스트하고 해당 컨트랙트가 예상대로 작동하는지 확인하는 것이었습니다. 클라리넷은 해당 분야에서 탁월한 성과를 보여주었지만, 히로 팀은 이를 더욱 개선할 수 있다고 생각했습니다. 따라서 저희는 클라리넷의 디자인을 전면 재검토하여 테스팅 프레임워크를 더 사용하기 쉽고, 자바스크립트 개발자들도 접근 가능할 수 있도록 재설계하기로 결심했습니다. 이 과정에서 일부 아키텍처를 수정했습니다.

특히 ‘Deno’를 통해 오래된 클라리넷 v1 버전을 관리하는 과정에서 많은 문제가 발생했습니다. 디노 런타임은 유지 관리가 어렵고 무거웠을 뿐 아니라, 여러 문제를 일으키기도 했습니다.

  • 특정 환경에서 프로젝트 컴파일 오류를 일으키는 경우
  • 클라리넷을 홈브류(Homebrew) 상에 배포할 때 어렵게 만드는 경우
  • 의존성(Dependency)을 최신 상태로 유지하기 어렵게 하는 경우 등

이에 히로는 어려움을 극복하기 위해 클라리넷 내에 JS 런타임을 포함하는 대신, 클라리넷을 WASM 라이브러리로 간단히 내보낼 수 있도록 했습니다.(이는 VS Code extension과 같은 일부 도구들에 대해 이미 수행해 본 적이 있는 일입니다). 그리고 그 결과 오늘날 클라리넷 SDK가 탄생하게 되었습니다.

클라리넷 SDK 살펴보기

이제 우리는 CLI 내에 자바스크립트 전체 런타임을 포함시키는 대신, npm 기반으로 관리되는 자바스크립트 패키지를 갖고 있습니다. 이로써 클라리넷 및 그 모든 테스트 기능을 자바스크립트 개발자들이 더욱 친숙하게 활용할 수 있게 되었습니다. 다시 말해, 이 SDK의 존재로 인해 제3자인 Deno 툴이 더 이상 필요하지 않게 되어 가벼운 파일 구성 및 경량화된 종속성을 가진 작업 환경을 만들 수 있게 된 것입니다.

일반적으로 개발자들은 워크 플로우에서 클라리넷(CLI) 및 클라리넷 SDK와 상호작용하게 됩니다. CLI는 여전히 클라리넷 프로젝트와 컨트랙트를 생성하고, 배포 및 요구 사항을 처리하고, 콘솔이나 devnet에서 컨트랙트와 상호 작용할 때 유용하게 사용될 것입니다(즉, 클라리넷에서도 많은 작업을 매끄럽게 수행할 수 있다는 것입니다). 물론 여러분은 히로 플랫폼을 사용할 수도 있습니다.

반면 클라리넷 SDK는 주로 테스트, 특히 유닛 테스트와 관련된 작업에 쉽게 사용할 수 있는 도구가 될 것입니다. 이 v1.0 릴리즈 버전의 SDK는 clarinet test와 동일한 기능 세트를 갖추고 있습니다. 또한 스마트 컨트랙트에서 data-varmap 항목에 액세스 하거나 cost reports를 파일에 저장하는 것과 같은 몇 가지 새로운 기능을 도입했습니다. 이 SDK를 통해 개발자들은 익숙함을 유지하면서도 더욱 간단하게 API를 활용할 수 있습니다.

향후 출시될 클라리넷 v2에서는 clarinet test 기능이 삭제되고 이를 npm test 기능이 대체하게 될 것입니다. 클라리넷 v2는 2023년 10월에 출시될 예정입니다.

SDK의 개발 방향성

클라리넷 SDK를 흥미롭게 만드는 부분 중 하나는 이전에 탐험하지 못한 여러 가능성을 열어준다는 것입니다. 예를 들어, 이 SDK는 브라우저에서 실행될 수 있고, 새로운 기능들을 제공합니다(유닛 테스트에서 프라이빗 함수에 액세스, 코스트 관리 개선, 코드 및 테스트 생성, 퍼즈 테스팅 등). 앞으로 이와 같은 다양한 기능들이 추가될 것이며, 성능 역시 지속적으로 향상될 것입니다.

현재 히로 팀은 클라리넷 v2.0을 작업하고 있습니다. 이 버전에서는 새로운 기능이 추가되지 않을 것이며 대신 Deno 종속성을 제거하고, 내장된 Deno 버전에 의존하던 clarinet testclarinet run과 같은 명령어들이 SDK에서 처리될 수 있도록 해당 명령어들을 폐지할 것입니다. 그 후 히로팀은 버그 수정, 최적화 및 새로운 기능 도입과 같은 더 중요한 요소들에 집중할 것입니다.

버전 관리에 관한 참고 사항: 초기 얼마동안 클라리넷 v1.0과 클라리넷 SDK는 함께 존재할 것입니다. 그러나 결국 새로운 기능과 버그 픽스 등의 혜택을 받기 위해서는 결국 클라리넷에서 클라리넷 SDK로 마이그레이션해야 합니다. 이후로 새로운 클라리넷 v1.x 버전은 릴리즈 되지 않습니다. 앞으로는 클라리넷 v2.x 버전만이 유지보수될 예정입니다.

SDK로 개발 시작하기

이번 릴리즈는 클라리넷 중심의 새로운 시작을 의미합니다. 많은 개발자들의 참여를 기대합니다. SDK에 대한 세부 사항은 해당 문서를 참고해 주세요. 클라리넷 SDK를 사용하여 클래리티 스마트 계약을 위한 유닛 테스트를 진행하고 싶다면 해당 가이드를 참고해 주세요.

이 깃허브 저장소에는 ‘counter’ 컨트랙트와 관련된 유닛 테스트가 포함되어 있습니다. 궁금한 점이 있으시다면 디스코드의 #clarinet 채널을 통해 문의해 주시기 바랍니다.

--

--