블록체인 기본 공부

gyub·2022년 7월 5일
0

'한권으로 끝내는 블록체인 교과서'를 읽고 정리하였습니다.

블록체인이란 무엇이라고 생각?


블록체인은 P2P 기반 데이터베이스라고 생각한다. 데이터를 블록이라는 단위로 나눠 분산 시스템으로 저장하는데, 이 때 이 블록들은 서로 연결되어 내용을 함부로 바꿀 수 없으며 누구나 그 내용을 볼 수 있다.


블록체인만의 기능


  1. 데이터는 여러 참여자가 확인한 규칙에 따른 서식만 기록
  2. 참여자 전원이 합의한 데이터만 유효하다는 약속에 따라 운용
  3. 변조하기 어려운 데이터 구조 (해시 체인)
  4. 수정하려는 동작을 즉시 감지하고 수정한 데이터는 손상된 것으로 인식
  5. 손상된 데이터는 다른 참여자의 정상적인 데이터를 가져와 자동 복구
  6. 한번 기록된 데이터는 누구도 수정하거나 삭제할 수 없음
  7. 누구도 시스템 전체를 중단 시킬 수 없음

블록체인의 대략적인 구조


절대로 고장 나지 않는 시스템을 어떻게 구현할 것인가

  • 모든 노드가 같은 정보를 서로 복사해 공유하는 방식으로 동작 시킨다. 그러면 노드 한 두 개가 고장 나도 동작에 문제가 없다. 이러한 기능은 ‘다중화’라고 한다.

중앙이 없는 네트워크

  • 여러 대의 노드가 존재하나, 그 중 중앙의 역할을 하는 노드는 없다. 모든 노드가 평등하고, 같은 데이터를 기록하고, 자율적으로 동작하는 자율 분산 시스템이다.

블록체인에서 화폐를 교환하는 방법

  • 공개 키 암호 기반으로 지갑 주소를 생성할 수 있으며, 어떤 서비스에 회원 가입할 필요 없이 마음대로 만들 수 있다. 그렇기 때문에 일반적인 은행 통장보다 더 익명성이 보장된다.
  • 블록체인에는 지갑 주소의 잔액을 저장하지 않는다. 화폐 교환의 거래 내용만 기록하며 현재 잔액은 해당 지갑 주소의 과거 거래 내용을 통해 알 수 있게 된다.

퍼블릭 체인과 프라이빗 체인


블록체인은 크게 퍼블릭 체인과 프라이빗 체인 두 종류로 나눌 수 있다. 차이점은 네트워크에 참여한 노드 개수를 파악할 수 있느냐이다. 트랜잭션을 기록할 때 사용하는 알고리즘(합의 알고리즘)에 큰 차이가 있다.

퍼블릭 체인

  • 누구든지 원하는 만큼 네트워크에 노드를 참여시킨다.
  • 대부분 노드를 운용하는 사람(채굴자)에게 보상으로 암호 화폐를 직접 주는 구조이다.
  • 직접 노드를 운용할 필요 없이 트랜잭션 수수료만 주면 되므로 애플리케이션 등에 활용 가능하다.

프라이빗 체인

  • 네트워크의 참여자를 제한한다. (예를 들면 참여하는데 승인이 필요) 따라서 모든 노드가 문제 없이 실행 중이라면 총 몇 대가 참여하는지 아는 상태이다.
  • 보통 퍼블릭 체인보다 노드 수가 적으므로 전체 동작도 빠르다고 알려져 있다.
  • 일반적으로 다수결 방식의 합의 알고리즘을 선택하므로 노드 운영자에게 보상이나 트랜잭션 수수료를 줄 필요가 없다.
  • 트랜잭션이 많아도 수수료는 0이다. 하지만 노드 유지 비용을 운용하는 사람이 스스로 부담해야 한다.

블록체인의 장단점


장점

  • 관리자가 없어도 정상 작동하는 시스템
    • 블록체인은 시스템이 영구적으로 동작한다는 것과 한 번 기록한 데이터를 나중에 수정할 수 없다는 두 가지 관점에 특화된 데이터 보관 장소
    • 서비스 제공자나 시스템 관리자조차 데이터의 변조와 변경이 불가능
    • 그렇기 때문에 관리자가 없어도 시스템 정상 작동이 가능하다
  • 서비스 제공자의 신뢰도가 낮더라도 안심하고 서비스 이용 가능
    • 지금까지는 시스템 제공자가 마음 먹으면 데이터 바꿀 수 있었다. 따라서 신뢰도가 낮은 시스템은 사용할 수 없다.
    • 블록체인은 수학 이론과 정보 기술을 결합해 서비스 제공자가 누구든 상관없이 기록된 데이터가 정확하다는 것을 보장한다. 서로 신뢰하지 않는 사람 사이의 거래에도 문제가 발생하지 않는다는 것이다.

단점

  • 블록체인에 데이터를 기록하는 것은 누구나 데이터를 볼 수 있고 절대 데이터를 삭제 할 수 없다는 것에 동의한다는 것이다. 따라서 개인 정보는 블록체인에 기록하지 않는다. 필요하다면 서브 시스템과 연결해야 한다.
  • 또 접근 제어와 같은 기능 역시 서브 시스템과 연결이 필요하다.

비트코인을 거래할 때의 블록체인 동작


  • 비트코인을 송금한다 = 비트코인의 블록체인에 트랜잭션이 발생한다.
  • 암호 화폐는 채굴자에게 보상을 주려고 있는 것
  • 비트코인 네트워크에 트랜잭션을 보내면 트랜잭션 풀이라는 임시 대기 장소에 저장된다. 이후 여러 명의 채굴자가 트랜잭션을 블록에 기록하려고 채굴을 시도하고, 그 중 한 명이 채굴에 성공했을 때 해당 블록이 비트코인 네트워크에 널리 퍼진 블록체인에 기록된다.
  • 블록 하나에는 약 수백 또는 수천 개의 트랜잭션이 포함된다.

블록체인을 이해하는 데 필요한 암호 관련 지식


  • 해시 값 : 임의 문자열을 해시 함수에 넣었을 때 반환하는 예측할 수 없는 값 → 문서의 변조 감지 가능
  • 전자 서명 : 디지털 문서의 작성자를 증명 → 문서의 작성자가 누구인지 알 수 있음
  • 공개 키 기반 구조(PKI) : 본인의 전자 서명을 제 3자인 기관이 인증하는 방법 → 문서 작성자가 본인임을 증명할 수 있음
  • 타임스탬프 : 디지털 문서 작성 시간을 증명하는 기술 → 문서 작성 시각을 증명

P2P 분산 시스템


  • 2개 이상의 노드가 서로 일대일로 연결되어 통신하는 방법. P2P 방식으로 연결된 노드가 많이 모이면 P2P 분산 네트워크가 형성
  • P2P 분산 네트워크에 참여하는 노드는 원칙적으로 같은 역할을 수행하기 때문에 일부 노드가 고장이 나 정지하더라도 전체 네트워크에 영향을 주는 일이 적고, 규모가 커질수록 복원력이 뛰어나다는 특징이 있다.
  • 블록체인 네트워크에서 노드가 처음 참여할 때는 다른 노드에 있는 블록체인 데이터의 해시 함숫값을 비교하면서 블록 하나하나를 신중하게 복사.

P2P 분산 네트워크의 안전성과 신뢰성


  • 장점 : 사고 등으로 전체 시스템이 멈출 위험이 매우 낮음. 또 우연히 어는 노드가 고장이 나도 전체 시스템 동작에 영향을 거의 주지 않음.
  • 단점 : 노드가 많을수록 ‘버킷 릴레이’ 양이 많아지므로 전체 성능은 나빠짐. 또, 문제가 발생해도 시스템을 쉽게 중지 시킬 수 없음. 이 문제를 해결하기 위해 승인 받은 노드만 참여하는 네트워크를 구성하기도 함.

CAP 정리로 살펴보는 블록체인


C : Consistency(일관성) → 사용자가 서비스에 접속했을 때 항상 최신 정보를 제공하는 상황을 보장

A : Availability(가용성) → 서비스에 문제가 생기지 않음을 보장하는 것

P : Partition Tolerance (분할 내성) : 네트워크의 어느 지점과 연결이 끊어지더라도 서비스가 멈추지 않도록 시스템 구축

  • CAP 정리 : 서비스 제공자가 보장해야 할 세가지 특성(CAP)을 동시에 충족할 수 없다.
  • 블록체인은 가용성과 분할 내성을 보장하고 일관성을 조금 희생 → AP 타입 또는 AP 시스템 등으로 말할 수 있음
  • 블록체인 네트워크에 어떤 데이터를 기록하면, 모든 노드에 데이터가 반영될 때까지 어느 정도의 시간이 걸리므로 일관성이 약한 편이다. 하지만 일정 시간이 지나면 최종적으로 모든 노드에 데이터가 기록되기 때문에 일관성이 보장된다고 할 수 있다. 이러한 특성 때문에 즉시 승인을 보장해야 하는 비즈니스에는 블록체인이 적합하지 않다.

컨텐트 주소의 구조 이해하기


컨텐트 주소 : 단방향 해시 함수를 사용해 저장할 파일의 해시 값을 생성한 후 그대로를 ‘주소’로 사용한 것. 실제 파일은 P2P 분산 데이터 스토리지에 저장하고, 파일의 해시 값은 블록체인에 저장

내용 변조를 꼭 막아야 하는 계약서나 이력서 등을 P2P 분산 데이터 스토리지에 저장하면 유용


블록체인은 모든 노드가 같은 연산 수행


블록체인에서는 모든 노드가 같은 연산을 수행한다. 하지만 같은 결과를 보장하지는 않는다. 분산된 노드의 연산 결과가 다르다면 더 높은 블록이 있는 체인을 선택해 결과적으로 합의를 형성한다. 이러한 연산 결과가 블록체인 네트워크 전체에 퍼지려면 상당히 오랜 시간이 걸린다.


분산 시스템에서 합의를 형성하는 과정


  • 프라이빗 체인 : 리더를 정하고, 리더가 선택할 결과를 제안하면 다수결에 따라 합의 형성
  • 퍼블릭 체인 : 네트워크에 참여한 노드 수를 알 수 없어 다수결 방식 사용이 불가능하다. 따라서 올바른 선택을 한 사람만 경제적 보상을 행사할 권리를 얻는 방식을 통해 합의를 형성한다. 이것이 작업 증명(Proof of Work)과 지분 증명(Proof of Stake)이라는 합의 형성 알고리즘이다.

블록체인의 합의 형성 방법인 작업 증명과 지분 증명


  • 작업 증명 : 논스라는 적당한 수를 넣으면서 해당 블록 해시 값 앞에 특정 자릿수만큼 0이 있을 때까지 연산한다. 논스 발견 경쟁이 작업 증명의 핵심이다. 특정 자릿수만큼 0이 있는 논스를 찾은 노드는 암호화폐의 신규 발행을 인정받는다.
  • 지분 증명 : 작업 증명은 많은 전력이 필요하므로 친환경적이지 않다. 이를 해결하기 위해 지분 증명 알고리즘을 고안하였다. 지분 증명의 기본 개념은 코인에이지 = 화폐 보유량 * 화폐 보유 기간 이다. 코인 에이지 설정 값이 클 수록 채굴 난이도가 낮다. 이 방식은 부익부 빈익빈 구조가 되기 쉽기 때문에 코인 에이지 설정 값 계산 시에 몇 가지 요소를 더 추가한다.

블록이 분기 했을 때의 해결 방법


합의 형성이 실패하면 블록체인이 분기한다. 이 때 블록체인 시스템은 블록 높이가 큰 체인을 올바른 결과로 판단해 선택한다. 선택 받은 체인은 경제적 보상을 준다.


트랜잭션의 역할과 내용


어떤 누군가가 다른 누구에게 송금하는 거래 내용과 해당 트랜잭션이 송신자의 것임을 증명하기 위한 타임 스탬프, 전자 서명이 포함되어 있다.

암호 화폐 거래가 아닌 어떤 짧은 메세지를 기록하거나 문서의 존재를 증명하는 해시값을 기록할 때, 자신의 지갑에서 자신의 지갑에 그대로 보내는 특별한 트랜잭션을 만들 수도 있다.


지갑 주소의 미사용 잔액 UTXO


  • UTXO : 송금자의 전체 잔액
  • UTXO의 개념 : 송금 할 때 UTXO에서 송금 액을 가져온다. 송금 액이 부족하면 UTXO 여러 개를 INPUT에 배치한다. 송신자의 INPUT과 수신자의 OUTPUT 합계는 항상 같아야 한다.
  • 비트코인 트랜잭션의 입출력은 비대칭이다. 채굴자에게 지급할 수수료가 있기 때문이다. 어떤 트랜잭션을 블록에 포함할 지는 채굴자가 자유롭게 정하기 때문에 수수료가 너무 싼 트랜잭션은 승인되지 않아 블록에 포함될 수 없다.

블록체인의 완결성 문제


  • 블록체인이 ‘분기’한 상태에서는 합의가 종종 뒤집힐 수 있다. 그러므로 블록체인은 완결성(나중에 결제 무효가 발생하지 않음)이 없으므로 무의미하다는 논란이 있다.
  • 프라이빗 블록체인은 경제적 보상을 주지 않고 다수결로 합의할 때가 많다. 따라서 블록체인을 분기하지 않고 블록 1개마다 확실하게 합의를 형성한 후 블록을 이어가도록 설계된 것이 많다.

트랜잭션 순서를 보장하는 구조


  • 블록체인에서는 트랜잭션을 전송한 순서대로 기록하지 않는다. 트랜잭션을 보낸 상대의 위치가 먼 상황의 경우 가까이 있는 경우와 트랜잭션을 받는 시간에 차이가 발생할 수 밖에 없다.
  • 선착순 관리가 필요하다면 별도의 서브 시스템을 연결해 블록체인을 도입해도 된다. 순서를 보장하는 기능을 갖춘 메세지 중개 서비스와 블록체인을 연결하는 편이다.
  • 순서는 보장해야 하지만 결과는 나중에 알려져도 상관 없는 업무라면, 약간의 시간 지연이 있더라도 트랜잭션의 타임스탬프 순서에 따라 처리 순서를 정하면 된다.

블록체인 변경 불가성을 보장하는 구조


  • 블록은 많은 트랜잭션을 모은 것이다. 수억 개의 트랜잭션을 처음부터 검색하는 것은 효율이 나쁘므로, 각 트랜잭션의 해시값과 해시값에서 만든 트랜잭션 ID를 인덱스로 삼아 인덱스 하나에 문서 하나만 연결하는 키-값 스토리지에 저장한다.
  • 검색 효율이 좋은 트리 구조를 만든다. 트리 형태의 데이터 구조를 이진 트리 구조 혹은 머클 트리 구조라고 하고 트리 구조의 뿌리에 해당하는 부분을 머클 루트라고 한다. 머클 루트를 해시 함수에 넣어 얻은 값은 트리에 포함된 모든 트랜잭션에 의존성이 있는 해시 값으로 블록 헤더에 영구히 기록된다.
  • 블록은 크게 블록 헤더와 트랜잭션으로 나눈다. 블록 헤더에는 블록의 버전 정보, 바로 전 블록 헤더의 해시 값, 해당 블록에 포함된 트랜잭션의 머클 루트 해시 값, 블록이 생성되었을 때의 타임 스탬프, 블록을 채굴 할 때의 난이도, 블록을 채굴 할 때 주어진 논스가 포함되어 있다.
  • 블록체인에 저장되는 데이터는 해시 값 형태이다. 따라서 데이터 변조가 발생하거나, 정상적인 트랜잭션의 저장 순서가 하나라도 잘못되면 해당 블록 이후에 포함된 모든 해시 값이 일치하지 않는다.

합의 내용을 자동으로 실행하는 ‘스마트 계약’


  • 스마트 계약 : 계약 성립의 필요 조건이 기록된 거래 내용이 변조하기 어려운 상태로 블록체인에 기록되었으며, 거래 내용에 적힌 조건이 충족되면 자동으로 성립하는 트랜잭션

여러 구성원이 공동으로 사용한다는 전제를 둔 시스템
참여하는 구성원의 업무에 따라 각각 다른 입장과 역할이 있는 시스템
참여하는 구성원의 업무 각각을 자동 실행하는 시스템
참여하는 구성원에게만 전달해야 하는 가치와 정보(문서)를 다루는 시스템

  • 여기서 소개한 특징 중 두 가지 이상을 고려해야 한다면 프라이빗 체인의 시스템 효율이 높다.
  • 업무 특성에 따라 앵커링을 통해 퍼블릭 체인과 프라이빗 체인의 장점을 조합해 이용하는 방법도 있다.

복잡한 조건 분기를 포함하는 고급 스마트 계약


  • 어떤 조건을 만족할 때 특정 프로그램을 실행시킨다.
  • 스마트 계약 주소에 함수의 인자를 전달하는 트랜잭션 만들고 자신의 전자 서명을 첨부해 블록체인 네트워크에 배포한다. 해당 트랜잭션을 받은 노드는 설정한 인자를 바탕으로 가상 머신을 이용해 프로그램을 실행하고 노드 각각의 OUTPUT이 일치하면 블록체인에 기록한다. 이러한 합의 결과를 월드 스테이트라고 한다.
  • 스마트 계약에 필요한 외부 정보를 저장하기 위해 월드 스테이트가 필요하다.
  • 네트워크의 참여자가 특정 회사와 관계없이 거래에 참여할 수 있는 자율 분산 서비스 기반의 조직 운영을 ‘탈중앙화된 자율 조직(Decentralized Autonomous Organization, DAO)’ 또는 ‘탈중앙화된 자율 회사(Decentralized Autonomous Company, DAC)’라고 한다.

탈중앙화된 자율의 개념


  • DAO나 DAC : 인간이 개입할 수 없는 컴퓨터 프로그램을 운영 기반으로 삼는 조직이나 회사. 조직 운영을 스마트 계약에 맡긴다.
  • 전 세계에 흩어져 움직이는 이더리움 기반 스마트 계약은 어떤 국가에 속하거나 관리를 받지 않으므로, 스마트 계약을 운영 기반으로 삼을 때는 코드로 작성해 실행하는 것만 법으로 인정해야 한다고 주장하는 사람도 있으나, 본질적으로 사람의 실수를 막는 스마트 계약을 구현하기각 어렵다는 시각도 있다. 그래서 자연어로 작성된 일반 계약서와 사양서를 저장하는 경우도 있다.

외부 정보를 참조해 움직이는 스마트 계약


  • 블록체인은 외부 정보를 직접 사용할 수 없다. 스마트 계약은 의사 결정에 사용하는 정보가 모든 네트워크 참여자의 동의를 얻은 것이어야 한다는 제약이 있기 때문에 월드 스테이트를 이용해야 한다.
  • 하지만 네트워크 외부의 정보를 모두 신뢰하지 않으면 정말 아무것도 할 수 없기 때문에 ‘오라클’이라는 개념이 등장한다. ‘오라클’은 외부에서 블록체인에 불러온 정보 자체를 월드 스테이트로 여기겠다는 것이다.

기계가 스마트 계약을 이용할 때 발생하는 상황


  • 사물 인터넷 기기에 블록체인 지갑이 연결되었다고 하면, 기계가 자율적으로 서비스를 제공하고 그 보상을 사람이 지급하는 미래가 실현될 수 있다.
  • 시스템이 수집한 정보를 다른 스마트 계약이 이용할 수도 있다. 월드 스테이트에 기록한 정보를 해당 정보를 기록한 스마트 계약 뿐만 아니라 다른 스마트 계약에서도 참조할 수 있다.
profile
Want to be a developer

0개의 댓글