[Daily Contents] 블록체인 프로젝트의 구조 뜯어보기


어떤 체인을 사용할 것인가?

  • Private Chain

  • Public Chain

    • 누구나 접근이 가능하며 진정한 의미의 탈중앙화라는 장점이 있음
    • 데이터를 저장하는 것이 매우 비싸고, Transaction이 발생할 때마다 비용을 지불해야 함.
    • 다소 복잡한 Smart Contract의 배포 비용(0.5ETH)
    • 이더리움
      • Middle man의 제거가 가능해짐
      • 닷컴 버블 이후 가장 성장한 비즈니스는 광고 플랫폼 등 Middle man이 필요한 산업
      • Smart Contract은 바로 이 Middle man의 개입 없이 공정한 분배가 이루어질 수 있음

오라클 문제

  • Oracle이란 블록체인 밖의 데이터를 블록체인 안(On-chain)으로 가져오는 것을 의미함.
  • 비가 오면 John에게 10$를 주겠다 » 비가 왔다는 정보
  • 주사위를 던져서 3보다 큰 수가 나오면 1$를 지불한다 » 코드로 구현 가능
  • 10월 11일이 되면 이 빌딩의 소유권을 Paul에게 양도한다 » 10월 11일이 되었다는 정보

어떤 체인을 사용할 것인가

  • Private Chain은 DB에 준하는 빠른 속도
  • 사전에 약속된 사용자만 참가 가능
  • 주로 Hyperledger fabric을 사용
  • 사용자가 인지할 수 없는 사이에 블록체인 활용 가능

전체 구조를 이해해보자

[FrontEnd]
<<<>>>
[Application Binary Interface] <<<>>> [Ethereum Network]
<<<>>>
[BackEnd(Spring), Wrapper Class]

메타마스크

  • 쉽게 사용할 수 있는 크롬 익스텐션.
  • Key를 보관하고 서명을 안전하게 하는 역할을 한다.
  • Web3를 이용해서 쉽게 서명할 수 있다.
  • 개발자는 추상화된 API를 이용해서 쉽게 개발 가능.
  • 아 잘 모르겠고 우선 지갑이나 만들어볼까 할 때 학습.

프론트엔드에서 블록체인과 통신하는 법

  • Web3.js를 이용한다.
  • 직접 private key를 이용해서 서명하는 것도 가능하지만 metamask와 같은 서비스를 이용하는 것이 안전.
  • 다른 사람의 지갑 주소로 ETH를 전송하거나 Smart Contract과 통신해서 데이터를 받아오는 것도 가능.

ABI?

  • Application Binary Interface
  • API랑 좀 닮지 않았습니까?
    • API가 프로그램과 통신하기 위한 인터페이스라면 ABI는 Binary와 통신하기 위한 인터페이스
  • Binary 형태로 컴파일된 Smart Contract과 통신하기 위한 Interface

컴파일된 바이너리의 모습

  • 문자열. 단, 0과 f로 표현된 영역이 많기에 해석하려면 해석할 수 있기는 함.

Human Readable한 형태

  • Json의 형태.

How to build? Use solc

  • solc 이외에도 truffle이라는 라이브러리를 활용

How to deploy?

  • bytecode와 ABI를 이용해서 deploy한다.
  • Remix가 있지 않나요?
    • 개발 단계에서 배포할 수는 있으나 파이프라인을 구축해 놓은 뒤에 매번 수정하고 배포하는 것은 번거롭기에 Remix는 개발 때만 활용하는 것을 추천.

Payable modifier

  • 가장 핵심적인 Modifier

  • 이더리움에 깔려있는 전제가 하나 있다.
  • 핵심 로직은 이더리움을 이용한 결제를 통해 발생한다.
  • 이더리움이 스마트 컨트랙에 입금될 때의 로직을 만들고 싶다면?
  • payable modifier를 붙여준다면 구현 가능하다!
  • (이더리움) 모임 통장 만들기, 경매, 안전 거래 등등
  • 대부분의 핵심 로직은 payable modifier를 이용해서 구현한다.

Q. 블록체인에 영상을 저장하고 싶어요.

  • 이더리움의 블록 크기는 1~8MB 수준
  • 여기에 영상을 저장할 수 있을까?
  • 텍스트 형태의 데이터라도 200개 이상 저장하는 것이 어렵다
  • 그렇다면 어떤 방법이 있을까?
    • 일반적으로 파일을 정합성을 확인할 때는 해시값을 이용한다.
    • 동영상의 해시값을 블록체인에 저장한다면?

이더리움 VS 자체 코인

화폐의 가치는 어떻게 결정되는가?

  • 화폐의 가치는 그 화폐를 사람들이 얼마나 신용하는지에 따라서 결정된다.
  • 코인의 가치 혹은 블록체인의 가치도 사람들의 신용도에 따라서 결정.
  • 이더리움은 많은 사람들이 사용하기 때문에 신용도가 높고 가치도 높다.
  • 우리가 만든 자체 코인은 자유도가 높지만 신용도는 매우 낮을 것.
  • 하지만 사람들은 가치를 떠나서 그냥 받는 것을 좋아하기도 한다.

Wrapper Class?

  • Web3j를 이용해서 Smart Contract와 통신하기 위해서는 Wrapper Class를 생성해야 한다!
  • Compile된 Binary로부터 Wrapper Class를 생성함.
  • Compile된 Binary가 조금이라도 변경된다면 Wrapper Class를 다시 만들어야 한다.
  • 주석, 공백을 포함해서 어떤 것이 바뀌어도 Wrapper Class는 다시 만들어야 한다.
    • Jenkins 같은 자동화된 빌드 도구를 사용하는 것이 좋은 방법

유저가 블록체인을 불편해 할 때?

  • 서비스 제공자가 사용자 별로 키를 보관하고 관리해 줄 수 있다.
  • 신규 유저가 생기면 지갑을 생성하고 보관한다.
  • 로그인 인증을 통해서 유저를 확인하고 대신 서명을 해 준다.
  • 일반적인 거래소들이 많이 활용하는 방법!
  • 대부분의 유저들에게 블록체인을 이해시키기 어렵기 때문에 사용한다.

FE VS BE 어디서 처리할까?

  • 완전한 탈중앙화를 추구한다면 FE에서 유저에게 서명하는 것이 옳다.
  • 그러나 유저 입장에서는 블록체인에 익숙하지 않기 때문에 우리 서비스의 BE에서 대신 관리해주는 것도 가능하다.
  • 구조를 설계할 때에 반드시 미리 결정해야 하는 부분이 이곳이다.

어떤 네트워크를 사용할 것인가?

  • SUB PJT1에 했던 것들이 무엇이었을까?
  • 우리만 사용할 수 있는 Private Network를 구성한 것!
  • Infura와 같은 public하게 구성된 테스트넷들이 많이 있다.
  • 실제로 이더리움 메인넷과 동일한 환경인 테스트넷을 사용하는 것이 가능하다.
  • 실 서비스를 운영한다면 이더리움 메인넷에 배포해야 할 것.

Public network를 쓸 때의 장점

  • 익스플로러를 지원. 디버깅이 편하다.
Q. BE에서 서명할 때 DB에서 개인키를 저장하는 것인가?
A. 개인키는 DB에 저장, 한 번 더 암호화를 할 수는 있으나 DB가 털렸는데 암호화 키가 안전할 거라는 보장은 없음. 설계가 중요.
Q. BE에서 트랜잭션을 발생시키면 대리서명의 이슈는 어떻게 해결해야 하나요?
A. 대리서명을 해 줄 수밖에 없음.

댓글남기기