Community

AERGO JDBC 배포

Aergo | 11.11| 334

Introduction

블록체인 도입의 가장 큰 걸림돌 중 하나는 익숙하지 않은 개발에 있다. 아르고는 이를 해결하기 위하여 7백만 개발자가 사용하고 있는(한번쯤은 사용했던) SQL을 컨트렉트에서 지원하고 있다. 블록체인 App개발 로직은 SQL을 통해서 높은 생산성을 가질 수 있다.

하지만 클라이언트 어플리케이션에서는 여전히 트랜잭션을 만들고, 사인해서 보내고를 반복해야 한다. 아르고 엔터프라이즈/SQLnet에서 스마트 컨트렉트로 SQL을 사용하는 방법은 다음과 같다.

기존에 SQL사용에 익숙한 프로그래머들에게는 따로 lua 및 블록체인 api를 배워야 하기 때문에 심리적인 저항이 있을 수 있다. 우리가 데이터베이스에 접근해서 쓸 때 기본적으로 쓰던것은 무엇이었을까? 바로 JDBC이다. 이에 우리는 AERGO JDBC를 개발하였다. 이로 인해 사용자들은 db와 같은 방식으로 블록체인을 사용할수 있게 되면서 쉽게 블록체인의 보안성 향상과 비용감소 같은 장점을 누릴 수 있다.

AERGO JDBC 구성

AERGO JDBC는 하나의 contract 와 JDBC Package로 구성되어 있다.

아래 기재된 Lua contract(db.x.lua)를 Aergo Blockchain에 배포하면 생성된 DB contract(address B)가 하나의 DB(데이타베이스)로 구성이 된다.

User는 DB에 속한 SQL 질의를 사용하게 되면, AERGO JDBC가 자동으로 DB contract와 연동되어 Aergo Blockchain 에 Transaction(A->B) , Query(B) 를 호출하게 된다.

DB Lua contract

AERGO JDBC 수행 방식

DDL과 DML은 blockchain transaction을 통해 수행된다.

SELECT문은 query를 통해 수행되게 되고 fetch size에 따라 나눠서 결과를 json형태로 받아서 resultSet에 세팅하게 된다.

다음과 같은 URL을 사용하고

URL jdbc:aergo:<aergo node ip>:<port>@<jdbc contract address>

Transaction을 수행하기 위해 다음과 같은 property를 등록해야된다.

User : 사용자의 encrypted private key
Password : encrypted private key의 password
Example 코드

제약사항

  • Query 에서 한번에 가져올수 있는 data 양은 rpc max size(4MB) : 결과로 가져오는 data양이 해당 크기를 넘어갈경우 resultSet.setFetchSize로 fetchsize 조정 필요(default :10 row)
  • Aergo에서 지원하는 db는 sqlite 기반이기 때문에 sqlite에서 지원하는 sql 및 ddl만 가능하다

지원하지 않는 기능

  • Transaction commit, rollback : transaction은 항상 auto commit
  • Scrollable cursor 미지원
  • CallableStatement 미지원

Squirrel SQL client 와 연동

Squirrel SQL client 는 여러 DB에 대한 JDBC를 지원하며 opensource여서 무료인 DB 툴로 사용빈도가 높아서 AERGO JDBC로 연동하게 되었다

JDBC Driver 등록

우선 Aergo Blockchain 와 연동하기 위해서는 AERGO JDBC 를 등록해야 된다. Drivers 탭에서 + icon을 클릭하고 다음과 같이 등록하면 된다.

Name : aergojdbc
Example URL: jdbc:aergo:<ip:port>@<address>
Class Name : org.aergojdbc.JDBC
Extra Class Path: aergo-jdbc-1.0.jar 추가

Alias 등록

등록한 JDBC Driver를 사용해서 alias를 만들고 연결해서 사용하면 되는데 alias를 만드는 방법은 aliases 탭에서 + 아이콘을 클릭한후 driver는 이미 추가한 aergojdbc로 선택한후 alias Name과 URL 그리고 User Name, Password를 다음과 같이 채워주면 된다. (User Name는 encrypted private key, password는 private key에 대한 password)

한글문제

Squirrel SQL에서 한글이 깨지는 경우 실행 scripts(sh or bat)에서 마지막 라인에 -Dfile.encoding=UTF-8을 추가해야된다.

Window bat파일 :start “SQuirreL SQL Client” /B “%LOCAL_JAVA%” -Dfile.encoding=UTF-8

Linux sh파일: “$JAVACMD” -cp “$CP” -Dfile.encoding=UTF-8

테스트방법

JDBC jar파일과 contract 파일은 아래에서 받을수 있다.

https://github.com/aergoio/aergojdbc

SQL 및 JDBC를 테스트를 위해 aergo enterprise로 blockchain을 구성하여 공개하고 있다.

URL : alpha1.aergo.io:7845

제약사항 : 한 contract DB의 크기를 20mb로 제한


AERGO JDBC 배포 was originally published in Aergo blog on Medium, where people are continuing the conversation by highlighting and responding to this story.

Comment 0

delete

Are you sure you want to delete this post?