[연재] testrpc에 영구적으로 데이터를 기록해보자.

testrpc에 영구적으로 데이터를 기록해보자.


testrpc는 기본적으로 메모리에 데이터를 저장하므로, 실행 시 마다 새로운 블럭체인 환경이 실행된다.

지속적인 개발을 위하여 데이터를 파일에 저장해보록 하겠다. 물론 이 과정은 geth을 이용하여 테스트 네트웍에서 진행할 수 있지만, 테스트 네트웍은 생각만큼 빠르지 않으면, 개발 초기 단계에서는 testrpc로 개발하는 것이 개발 생산성이 낫다.

시나리오는 다음과 같이 단순하다.


  1. testrpc 실행
  2. 데이터 저장
  3. testrpc 종료
  4. testrpc 재실행
  5. 저장한 데이터 확인


testrpc 실행

먼저 testrpc에 데이터를 영구적으로 저장하려면 입력한 데이터를 메모리가 아닌 디스크에 보관하여야 한다.

testrpc 실행 옵션 중 --db 옵션을 이용하여 저장할 디렉터리를 지정해주면 이부분은 해결된다.

아울러 로그인 계정을 고정하기 위하여 -m 니모닉 옵션을 사용한다.

-m 옵션으로 지정하는 니모닉은 12단어이기만 하면어떤 것을 사용해도 된다.

여기서는 testrpc를 옵션없이 실행했을 때 나온 값을 저장했다가 이를 사용했다.


그 다음 생성/저장 트랜잭션을 위하여 초기 ether 값을 100을 주어 Gas비로 사용하도록 하였다.

testrpc --db db_files -e 100 -m "lawsuit grab tobacco audit net news conduct school diamond response arch math"


위의 예제를 위해서 db_files라는 디렉터리를 미리 만들어둔다.

mkdir db_files


자 이제 명령어를 실행하면 다음과 같은 화면이 주욱 나올 것이다. 실제 주소나 키는 환경에 따라 다를 수 있다.



데이터 저장

그 다음 개발 환경인 리믹스를 실행하여 지난번에 작성한 SalaryStorage.sol을 호출하자.



"Run" 탭에서 선택하여  Envionment에서 Web3 Provider로 http://localhost:8545 로 연결하고 Create 버튼을 클릭하여 SalaryStorage 모듈을 생성한다.

모듈이 정상적으로 생성되었다면 그림 상에서 1번 왼쪽에 있는 아이콘을 클릭하여 생성된 모듈 주소를 복사한다.

참고로 위 예제에서 SalaryStorage 스마트컨트렉트 주소는 0x156146db65637eb1f5d1052aeac809e0244216f2 이다.

이 주소는 실행 시 마다 달라지므로 나중에 사용하기 위하여 파일 등 어디에 저장해두기 바란다.

트랜잭션에 대한 로그는 아래 콘솔 박스에 나온다.

스마트컨트렉트를 생성하는 것도 하나의 트랜잭션이기 때문에 여기서 확인할 수 있다.

2번 표기된 Details 버튼을 클릭해보면 트랜잭션에 대한 자세한 내용을 볼 수 있다. 각각이 무엇을 의미하는지는 스스로 알아보기 바란다.


자 다시 본론으로 돌아가서, 앞 강좌에서 했던 것처럼 set 함수에 아래와 같이 값을 저장해보자.

"홍길동", 1000
"이순신",2000

각 트랜잭션의 Details 을 클릭하여 사용된 가스비가 얼마인지 등 상세한 내용을 확인해보기 바란다.

testrpc 종료

트랜잭션이 반영되었는지 확인한 다음 이제 testrpc 실행을 다음의 명령어로 종료해보자.

Ctrl-z
kill %1


testrpc 재실행

그리고 다시 testrpc를 앞에서 실행한 동일한 명령어로 실행한다.

testrpc --db db_files -e 100 -m "lawsuit grab tobacco audit net news conduct school diamond response arch math"


저장한 데이터 확인

리믹스를 다시 연결하고, 이번에는 Create가 아니라 At Address에 좀 전에 저장했던 주소를 입력하고 호출한다.

get 에 "이순신"을 입력하고 조회해보자,

2000이라는 값이 나오는가?