최근 블록체인에 대한 관심이 높아지고 각 산업에서도 블록체인을 도입하기 위한 여려 방안들을 마련하고 있습니다.
보통, 블록체인이라 하면 비트코인을 중심으로 한 암호화페(Cryptocurrency)를 떠올릴 텐데요. 최근에 거론되는 블록체인은 약간의 차이가 있습니다.
결론부터 간단하게 말하면 블록체인은 데이터(원장, Ledger)를 안전하고 신뢰 있게 저장하고 관리하기 위한 기술이라고 할 수 있습니다.
그 기술 기반에 가상화폐를 거래하기 위한 기능들을 구현한 것이 비트코인과 같은 암호화폐 서비스입니다.

현재 금융권을 중심으로 블록체인에 대한 관심이 높으나 앞서 말한 것과 같이 데이터를 안전하고 신뢰성 있게 관리한다는 측면으로 보면 금융권 뿐 아니라 필요에 따라 다양한 산업 또는 다양한 업무에 블록체인의 기술을 적용할 수 있을 것 입니다.
그럼, 불특정 다수가 접속해서 사용하는 환경이 아니라 특수한(?) 목적에 의해 블록체인의 기술을 활용하는 환경이라고 하면 허가를 받은 사람들만 접속해서 사용해야 할 것입니다.
그래서 나온 개념이 프라이빗 블럭체인(Private Blockchain) 이며, 사용의 허가를 받은 사람,기관 또는 단체들만 사용가능한 블럭체인이라고 볼 수 있습니다.
반대로 비트코인과 같이 모두에게 열려있는 환경을 퍼블릭 블럭체인(Public Blockchain) 이라고 부르기도 합니다.
최근 기업들에 의해 거론되고 있는 블록체인은 대부분 프라이빗 블록체인에 대해서 많이 거론하고 있습니다.

프라이빗 블록체인과 퍼블릭 블럭체인에 대한 비교는 다음 기사를 보시기 바랍니다.
[블로터] 퍼블릭 블록체인의 한계와 프라이빗 블록체인

리눅스 재단의 Hyperledger 프로젝트는 기업에서 적용이 가능한 표준적인 블록체인의 기술을 구현하는 목적으로 만들어진 블록체인 컨소시엄입니다.
Hyperledger 프로젝트에는 다수의 서브 프로젝트 들이 존재하며 그 중 Fabric이 블록체인의 런타임을 구현하는 프로젝트입니다.
(여기서 다루는 블록체인은 Hyperledger Fabric을 기준으로 설명하고 있습니다.)

블록체인의 시스템 아키텍처적인 접근?

이 단락의 제목을 “시스템 아키텍처적인 접근”으로 지어도 되는진 잘 모르겠습니다. 주변에서 블록체인에 대해서 관심을 가지고 알아보시는 분들이 항상 빠지지 않고 하시는 질문이 있습니다.

“블록체인 기반 시스템에서 하나의 데이터를 블록체인에 넣으면 블록이 하나 생성되지?, 그리고 다음 데이터를 넣으면 다음 블록이 생성되어서 앞 블록에 연결이 될거고…
트랜잭션의 순서는 블럭체인의 순서대로 가져오면 되는거지?…” 등등

위의 내용과 같은 질문을 자주 받습니다. 블록체인의 원리를 공부하신 분들은 알겠지만 트랜잭션(거래) 정보를 블록에 담고 블록들이 체인처럼 연결된다고 설명을 하기 때문입니다.
물론 거래의 순서에 맞춰 블록이 쌓이겠지만, 블록체인의 전반적인 이해를 위해서는 먼저 전통적인 3 Tier architecture에서 바라봤을 때 블록체인은 다음 그림에서 제일 아랫쪽에 위치한다는 것입니다.


[ 이미지 출처 : Wikipedia – Multitier architecture ]

그렇습니다. 기술적으로 봤을 때는 블록체인은 데이터베이스의 일종으로 보는게 맞습니다.
다만, 일반적인 데이터베이스와의 차이점은 데이터 변조가 힘든 환경에 저장한다는 차이가 있습니다.
일반적으로 관계형 데이터베이스를 이용하여 어플리케이션을 개발할 때 SQL문을 이용하여 CRUD 동작을 합니다.
어플리케이션 개발자는 데이터베이스 엔진이 SQL문을 어떻게 해석하며 SQL을 실행하여 데이터가 파일시스템 또는 메모리등에 어떤 메커니즘으로 저장되고 관리되는지 궁금해 하지 않습니다.
이와 마찬가지로 블록체인을 이용하여 어플리케이션을 개발할 때와, 블록체인 엔진의 메커니즘을 이해하는 것은 분리하여 생각할 필요가 있습니다.
미리 Hyperledger Fabric 기준으로 설명을 하면 Smart Contract(이하, Chaincode 또는 체인코드) 를 통해서 원장을 블록체인 네트워크에 저장할 수 있는데요, ‘여기서 체인코드는 거래 조건등 비즈니스 로직을 개발해서 블록체인 네트워크에 디플로이해야하는 컴포넌트입니다’, 블록체인에 데이터를 쓰기위한 인터페이스는 PUT_STATE, GET_STATE, DEL_STATE만 열려있습니다. SQL문으로 굳이 매핑 시킨다면 다음과 같습니다.

  • PUT_STATE : INSERT, UPDATE
  • GET_STATE : SELECT
  • DEL_STATE : DELETE

위의 인터페이스를 통해 원장을 쓰게되면 블록체인의 엔진은 알아서 메카니즘에 따라 데이터를 저장합니다.

원장에 대한 얘기를 안 하고 넘어갈 수가 없겠는데요, 블록체인이 변조가 힘든 환경을 제공하는 이유는 저장하고 관리해야하는 데이터가 “원장” 이라고 불리는 중요 데이터이기 때문입니다.
원장은 자산의 거래 정보라고 정의를 할 수 있습니다. 여기에서 자산은 집, 자동차와 같이 유형이나 증권,특허와 같이 무형 모두를 통칭하고 있습니다. 그리고 거래 정보라는것은 소유권의 이전 정보와 소유권을 이전하기 위한 조건들을 포함하여 표현하고 있습니다.
즉, 원장은 유형, 무형의 자산의 소유권 이전과 이전을 위한 조건(계약정보) 들을 포함하는 정보라고 할 수 있습니다.
대표적인 예로 은행의 계정계(Core Banking System)가 원장 시스템으로 볼 수 있습니다.

블록체인은 “분산 원장 기술”, “공유 원장 시스템”, “분산 데이터베이스 기술” 등의 용어로 부르기도 합니다.
아래 그림과 같이 하나의 제품이 제조되어서 최종 사용자가 사용하기까지의 흐름을 보면 많은 회사들이 관계되어 있습니다. 그리고 각 회사들은 별도로 시스템을 구축하여 제품 생산과 관련한 활동을 합니다.
만약, 이 회사들이 비즈니스와 연결되어 업무 시스템을 연계한다고 생각해보면, 연계가 필요한 회사의 수 만큼 연계를 위한 작업을 해야하고 관계되는 회사가 많을수록 복잡한 시스템이 될 것입니다. 이런 환경은 유지보수에도 많은 노력이 들어갈 것임은 자명합니다.


[ 이미지 출처 : IBM Government Industry Blog ]

그럼, 이 비즈니스 네트워크에서 발생되는 중요한 데이터 및 관련 시스템을 하나의 시스템으로 통합해서 중앙집중적으로 관리하면 어떻게 될까요?
위의 이미지에서 처럼 여러회사가 관련되어 있는 비즈니스 네트워크에서 특정 회사가 중앙집중적으로 시스템을 관리를 한다고 가정하면 신뢰의 문제가 발생합니다. 과연 그 회사를 신뢰하여 시스템을 맡길수 있을까요?
이 문제는 블록체인을 얘기할 때 항상 제일 먼저 나오는 중앙집중형 네트워크 vs. 분산 네트워크의 장단점에 대한 얘기입니다.
블록체인은 원장을 중앙집중형으로 관리하지 않고 네트워크의 참여 기관에 분산하여 동일한 원장을 관리하도록 하며 거래의 결과를 각 참여기관이 합의(Consensus)라는 과정을 거쳐서 원장에 쓰도록 함으로 보안성과 신뢰성을 보장하는 방법을 제시하고 있습니다.

블록체인 기반으로 특정 업무를 위한 시스템을 개발한다면 시스템 아키텍처의 큰 그림은 블록체인은 데이터베이스이다, 그리고 CRUD는 체인코드를 통해서 일어난다는 점을 고려하여 생각을 하면 좋을 것 같습니다.
그러고는 블록체인 네트워크의 Topology는 어떻게 설계해야 보안성과 신뢰성을 만족할 것인지를 고려하면 되겠지요. 이 설계는 블록체인 엔지니어가 해야할 몫입니다.

블록체인을 실습해보기 위한 환경

그럼 어떻게 블록체인을 실습해 볼 수 있을까요?
Fabric을 기준으로 실습하기 위한 환경은 다음과 같이 크게 두 환경이 있습니다.

Hyperledger Fabric 실습 환경
  • 클라우드 환경 : Bluemix
  • 개인 개발환경 : Docker 기반으로 개인 PC에서 실습 가능

클라우드 환경에서의 실습의 장점은 블록체인 네트워크를 구성하는 런타임(서버환경)은 자동으로 만들어지기 때문에 클라이언트에 해당하는 어플리케이션을 바로 작성해서 테스트 하실 수 있습니다.
만약, 서버환경의 설정 및 블록체인 네트워크를 커스텀하게 구성하고 싶으시면 Docker 기반으로 개인 PC에서 실습하시는 것을 추천드립니다.

현재 진행중인 블록체인 연재글들

Fabric 이용한 블록체인 실습에 도움이 될 만한 여러 연재 글들을 올릴 예정입니다. 아래의 리스트는 블로그가 포스팅 될 때마다 업데이트 될 예정이니 참조바랍니다.

먼저 시작해보는 블록체인 시리즈(Fabric v0.6)
본격적으로 시작해보는 블록체인 시리즈(Fabric v1.0)
Hyperledger Fabric 기반기술 알아보기 시리즈

참조 링크

Fabric과 관련한 참조 사이트 링크입니다.

3 개의 댓글"Hyperledger Fabric 을 이용한 블록체인 시작하기"

  1. 김호준 8월 21, 2017

    클라이언트가 추가된 이미지를 태그명:latest로 새로 commit 했는데요. docker-compose.yml 파일 설정을 스킵하셔서, 어떻게 해야할지 모르겠습니다.
    membersrvc:
    image: hyperledger/fabric-membersrvc:latest
    로 바꿔봤지만 오류가 납니다.

    ERROR: for fe6117e87457_go_membersrvc_1 Cannot start service membersrvc: oci runtime error: container_linux.go:262: starting container process caused “exec: \”membersrvc\”: executable file not found in $PATH”

    ERROR: for membersrvc Cannot start service membersrvc: oci runtime error: container_linux.go:262: starting container process caused “exec: \”membersrvc\”: executable file not found in $PATH”
    ERROR: Encountered errors while bringing up the project.

  2. 프라이빗 또는 퍼미션 블록체인의 가장 중요한 요소가 이해관계자만 거래내용을
    공유하는 것이라고 알고 있습니다.

    이렇게 거래의 이해관계자만 거래내용 즉, 블록을 공유하는 것을 Fabric에서는
    채널서비스로 구현하는 것인지 궁금합니다.

    예를 A와 B간의 거래가 이루어질 때 블록을 생성하고 배포할 때 A와 B간에만 블록이
    공유되도록 하는 것은 A와 B간의 채널을 생성하면 되는지요?

    만약, 이럴 경우 A와 B가 보유한 블록과 네트워크 전체의 블록이 다를 것 입니다.
    이렇게 자신과 관계되지 않은 블록은 검증노드를 통해서 확인하면 되는지요?

  3. […] 많은 글을 참고하였으나, 가장 많이 참고한 글은  IBM Developer Center의 “먼저 시작해 보는 블록체인“이다. 이 글을 보고 따라하면, 개발 모드에서 블록을 생성해 보는 것은 […]

토론 참가

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다