[블록체인] 체인코드 동작 과정
하이퍼레저 패브릭의 네트워크 구조
애플리케이션을 사용하는 이용자가 클라이언트이고, 생성된 피어와 채널, 체인코드, 장부가 패브릭 영역에 속한다.
클라이언트는 request를 서버로 전송하고 서버는 request에 따라 동작한다. DB 탐색이 필요하다면 여기에 접근해 read/write 동작을 수행하고 그 결과를 statusCode와 함께 response로 클라이언트에게 전송한다. 이와 같은 구조는 웹 애플리케이션의 기본 구조이다.
그대로 하이퍼레저 패브릭에 빗대어 표현하면 다음과 같다.
클라이언트가 애플리케이션을 통해 요청을 보낸다. 이때 서버 역할을 하는 동작은 애플리케이션 내부에서 수행한다. 이 서버의 요청에 따라 체인코드를 호출한다. 체인코드에는 main/init/invoke 세 가지가 있다.
- main : 체인코드 등록(설치)
- init : 업그레이드
- invoke : query, invoke
체인 코드가 여러 개인 경우 main 함수에서 등록한 체인 코드를 먼저 확인한다. 해당 체인 코드가 등록돼 있다면 바로 호출하여 사용하고 등록돼 있지 않으면 등록 후 사용한다. 체인 코드의 동작에 따라 fabric의 피어 노드가 가지고 있는 원장에 접근하여 read/write 동작을 수행한다. 피어 노드에서 체인코드 수행 결과를 response로 전달하여 클라이언트가 보낸 요청이 수행됐는지 확인할 수 있다.
request
기존 애플리케이션에서 request는 API request의 경우 다음과 같아.
애플리케이션에서 API 요청을 보내기 위해서는 method, target, data를 정의하여 보낸다.
메소드에는 API request의 메소드가 들어간다. 타겟에서는 어떤 URL로 요청했는지를 나타내는 경로가 들어간다. 각 API의 URL은 백엔드 개발자가 설계하여 요청을 보낸다. 데이터는 대부분 JSON 형태로 주고 받는다.
하이퍼레저에서의 체인코드 호출을 위한 요청은 어떤 구조로 나타나냐면, 일반 호출과 마찬가지로 메소드, 타겟, 데이터로 구분하여 요청을 보낼 수 있다.
메소드는 체인 코드를 왜 호출하는지, 그 목적을 나타낸다. 단순히 레저의 상태를 보기 위해서는 query를 사용하면 되지만 블록을 생성하고 레저에 기록하기 위해서는 invoke를 사용해야 한다. 또한 초기화를 위해서는 instantiate를 사용해야 한다. 타겟은 어떤 함수를 호출할 것인지를 뜻한다. 타겟은 트랜잭션 요청 시 데이터와 함께 args의 인자로 전달하게 되는데, args의 첫번째 인자는 체인코드에서 어떤 함수를 호출할지 함수 이름을, 데이터는 해당 함수에 필요한 인자 값들을 나타낸다. 트랜잭션 요청 시 전달 형태는 다음과 같다.
{
"Args":[ "function naem", "parameter1", "parameter2" ....]
}
-끝-