RZet은 암호화폐 결제 인프라를 구축하며 직면한 기술적 과제를 해결하는 과정에서 BlockKit을 개발하게 되었습니다. 이번 포스트에서는 BlockKit 개발 배경과 오픈소스로 공개하게 된 이유를 공유하고자 합니다.
개발 배경: 단순해 보였던 기능의 복잡성
RZet 서비스의 핵심 기능 중 하나는 가맹점이 암호화폐 정산을 받을 지갑 주소를 설정하는 것입니다. 초기에는 단순한 텍스트 입력 필드로 충분할 것이라 예상했으나, 실제 운영 환경에서는 예상치 못한 문제들이 발생했습니다.
실제 운영에서 발견된 주요 문제점
잘못된 주소 입력: 사용자가 유효하지 않은 문자열을 입력해도 시스템이 이를 감지하지 못하는 상황이 발생했습니다.
네트워크 혼동: 비트코인 주소란에 이더리움 주소를 입력하는 등 서로 다른 블록체인 네트워크 주소를 혼동하는 사례가 빈번했습니다.
복사-붙여넣기 오류: 주소 일부만 복사되거나 추가 문자가 포함되는 등의 실수로 인한 정산 실패 위험이 있었습니다.
이러한 문제들은 단순한 사용자 경험 저하를 넘어 실제 자산 손실로 이어질 수 있는 심각한 리스크였습니다.
정규식 접근법의 문제점
초기에는 정규식을 통한 패턴 매칭으로 문제를 해결하려 했으나, 다음과 같은 한계에 직면했습니다.
각 암호화폐별로 다양한 주소 형식이 존재하며(비트코인의 경우 Legacy, SegWit, Native SegWit, Taproot 등), 단순 패턴 매칭으로는 체크섬 검증과 같은 암호학적 유효성 검사가 불가능했습니다. 또한 새로운 주소 형식이 등장할 때마다 코드 수정이 필요하여 유지보수가 어려웠습니다.
기존 오픈소스 라이브러리의 부족함
npm 생태계에서 여러 주소 검증 라이브러리를 검토했으나, 대부분이 다음과 같은 문제를 가지고 있었습니다.
최신 주소 형식(SegWit, Taproot 등)을 지원하지 않거나, 마지막 업데이트가 수년 전에 멈춰있었습니다. 또한 무거운 의존성으로 인한 번들 크기 증가와 복잡한 API 설계로 실제 적용이 어려웠습니다.
BlockKit 개발: 명확한 목표와 원칙
이러한 상황에서 RZet은 자체 솔루션 개발을 결정했습니다. BlockKit은 다음과 같은 핵심 원칙하에 개발되었습니다.
단순하고 직관적인 API:
validate(address, coin)
이라는 단일 함수로 모든 검증이 가능하도록 설계했습니다.제로 의존성: 외부 라이브러리 없이 순수 JavaScript로 모든 기능을 구현하여 번들 크기를 20KB 미만으로 유지했습니다.
정확한 검증: 단순 패턴 매칭을 넘어 실제 체크섬 검증을 수행하여 주소의 암호학적 유효성을 보장합니다.
스마트한 주소 감지: 입력된 주소만으로 해당 암호화폐를 자동으로 식별하는 기능을 제공합니다.
EVM 체인의 주소 형식 통일성 문제
이더리움, BNB 체인, 폴리곤 등 모든 EVM 호환 체인이 동일한 주소 형식을 사용한다는 점은 주소만으로 네트워크를 구분할 수 없다는 문제를 야기했습니다. 이를 해결하기 위해 컨텍스트 기반 검증과 명시적 네트워크 지정 옵션을 제공하는 방식을 채택했습니다.
암호학적 검증 구현
체크섬 검증을 위해 SHA256, Keccak256 등의 해시 함수와 Base58, Bech32 인코딩/디코딩 알고리즘을 직접 구현했습니다. 이를 통해 외부 의존성 없이도 완전한 주소 검증이 가능하게 되었습니다.
업계 공통의 과제
개발자 커뮤니티를 관찰한 결과, 많은 팀이 동일한 문제로 고민하고 있음을 발견했습니다. 각자가 비슷한 솔루션을 중복 개발하는 비효율성을 해소하고자 했습니다.
오픈소스의 상호 이익
BlockKit을 오픈소스로 공개함으로써 다음과 같은 이점을 기대합니다.
품질 향상: 더 많은 사용자의 피드백과 기여를 통해 라이브러리의 안정성과 기능이 지속적으로 개선됩니다.
표준화 기여: 암호화폐 주소 검증의 사실상 표준(de facto standard)으로 자리잡아 업계 전반의 개발 효율성을 높입니다.
생태계 발전: 블록체인 개발 생태계의 성숙도 향상에 기여합니다.
실제 적용 효과
BlockKit을 RZet 서비스에 적용한 이후, 잘못된 주소 입력으로 인한 정산 오류가 현저히 감소했습니다. 실시간 주소 검증을 통해 사용자 실수를 사전에 방지하고, 명확한 오류 메시지로 문제 해결이 용이해졌습니다.
결론
작은 기능 하나에서 시작된 프로젝트가 업계 전체가 활용할 수 있는 도구로 발전했습니다. RZet은 BlockKit을 통해 기술적 문제 해결을 넘어 개발자 생태계에 기여하고자 합니다. 앞으로도 커뮤니티와 함께 BlockKit을 발전시켜 나갈 계획입니다.
BlockKit은 소개 페이지와 GitHub 저장소에서 확인하실 수 있으며, 여러분의 피드백과 기여를 환영합니다.