본문 바로가기
  • 테크에 관한 모든 것.
IT

블록체인(BlockChain)

by @TA 2024. 3. 21.

블록체인(BlockChain)이란?

 

블록체인은 분산 데이터베이스 기술의 한 형태로, 연결된 블록의 체인으로 구성됩니다. 각 블록은 데이터를 저장하고 이전 블록의 해시 값을 포함하여 연결되어 있습니다. 이러한 구조는 데이터의 변경이나 위조를 방지하고 분산된 네트워크에서 안전하게 데이터를 저장하고 공유할 수 있게 합니다.

블록체인의 주요 특징은 다음과 같습니다.

분산 네트워크: 블록체인은 중앙 관리자가 없는 분산 네트워크로 구성됩니다. 각 참여자는 전체 네트워크의 복사본을 가지고 있으며, 새로운 데이터를 추가하는 데에는 네트워크의 합의가 필요합니다.

안전성과 무결성: 블록체인은 데이터의 변경이 어려우며, 한 번 기록된 정보는 수정되거나 삭제되지 않습니다. 이는 데이터의 무결성과 안전성을 보장합니다.

분산 원장: 모든 거래 및 데이터 변경은 네트워크의 모든 노드에 복제되므로 신뢰할 수 있는 분산 원장을 형성합니다.

암호학적 보안: 블록체인은 암호학 기술을 사용하여 데이터를 안전하게 보호합니다. 이는 데이터가 외부에서 액세스되거나 위조되는 것을 방지합니다.

스마트 계약: 일부 블록체인 플랫폼은 스마트 계약이라는 프로그래밍 가능한 코드를 지원합니다. 스마트 계약은 조건이 충족될 때 자동으로 실행되어 거래를 처리하거나 계약을 이행하는 데 사용됩니다.

투명성: 블록체인은 모든 거래가 공개되므로 거래의 투명성을 제공합니다. 이는 부정행위를 방지하고 신뢰를 증진합니다.

블록체인 기술은 주로 암호화폐와 관련하여 알려져 있지만, 이를 응용하여 다양한 분야에서 사용되고 있습니다. 예를 들어 금융 서비스, 공급망 관리, 투표 시스템, 부동산 등의 분야에서 블록체인 기술이 적용되고 있습니다.


 

비트코인이 나오게 된 배경

 

중앙화된 시스템의 한계: 기존의 중앙화된 시스템은 보안 문제, 신뢰성 문제, 데이터 위변조 가능성 등 다양한 문제에 직면했습니다. 중앙화된 시스템에서는 단일 중앙 기관이 데이터를 관리하고 제어하기 때문에 이러한 문제들이 발생할 수 있습니다.

금융 시스템의 문제: 금융 시스템은 중앙 기관에 의존하여 거래를 처리하고 중개합니다. 이로 인해 수수료가 발생하고 거래 속도가 느려지는 등의 문제가 발생할 수 있습니다. 또한 일부 국가나 지역에서는 금융 서비스에 액세스하기 어렵거나 불가능할 수 있습니다.

디지털 통화의 발전: 디지털화의 발전으로 인해 온라인 거래가 증가하고 전자화폐의 사용이 확산되었습니다. 이로 인해 디지털 통화에 대한 신뢰성과 보안 문제가 부각되었습니다.

블록체인 기술의 등장: 2008년 사토시 나카모토라는 개발자가 발표한 논문에서 처음으로 블록체인 기술이 소개되었습니다. 이러한 블록체인 기술은 중앙 기관 없이 분산 네트워크에서 거래를 확인하고 기록할 수 있는 새로운 방식의 분산원장 기술을 제시했습니다.

비트코인의 등장: 블록체인 기술을 기반으로 한 최초의 디지털 통화인 비트코인은 2009년에 나타났습니다. 비트코인은 중앙 기관 없이 거래를 처리하고 기록하기 때문에 신뢰성과 보안성이 높다는 장점을 가졌습니다. 이로 인해 블록체인 기술이 주목받게 되었습니다.


블록체인 기술은 어디에 활용할 수 있을까?

 

금융 서비스: 블록체인은 중앙 기관 없이 안전하고 투명한 금융 거래를 지원할 수 있습니다. 디지털 화폐 및 암호화폐를 통한 지급 및 이체, 스마트 계약을 통한 자동화된 거래 처리, 금융 데이터의 안전한 공유 등이 가능합니다.

공급망 관리: 블록체인은 제품의 원산지 추적, 유통 과정의 투명성 제고, 위조 방지 등을 통해 공급망을 효율적으로 관리할 수 있습니다. 농산물, 의료품 등의 원산지 추적부터 제조사와 소비자 간의 직접 거래까지 다양한 적용 가능성이 있습니다.

부동산: 블록체인을 활용하여 부동산 거래의 투명성과 효율성을 높일 수 있습니다. 부동산 소유권의 확인 및 이전, 임대 계약의 자동화, 지적 재산권 관리 등이 가능합니다.

투표 시스템: 블록체인은 투표 시스템에서 안전하고 투명한 투표를 보장할 수 있습니다. 투표 기록의 위조를 방지하고 개별 투표 내역을 안전하게 저장하여 선거 과정의 공정성을 유지할 수 있습니다.

의료 및 건강 산업: 블록체인은 의료 기록의 안전한 공유와 엑세스, 의약품의 위조 방지, 의료 연구 및 개발에 필요한 데이터의 공유 등에 활용될 수 있습니다.

IoT (사물인터넷): 블록체인은 IoT 기기 간의 안전한 통신과 데이터 교환을 가능하게 합니다. IoT 기기 간의 신뢰성 있는 거래 및 상호 작용을 보장하여 보안 문제를 해결할 수 있습니다.

지능형 계약 및 자동화: 스마트 계약은 블록체인을 기반으로 한 프로그래밍 가능한 계약으로, 조건이 충족되면 자동으로 실행됩니다. 이를 통해 거래 및 계약의 처리 속도를 높이고 비용을 절감할 수 있습니다.


블록체인 기술의 단점은 없을까?

 

확장성 문제: 블록체인은 블록에 데이터를 저장하고 이를 연결하여 체인을 형성합니다. 이는 대규모 데이터 처리에 어려움을 줄 수 있습니다. 특히 비트코인과 이더리움 같은 공개 블록체인은 많은 수의 거래를 처리하기 위해 한계에 도달할 수 있습니다.

속도 문제: 블록체인 네트워크에서 거래 처리 속도는 상대적으로 느릴 수 있습니다. 이는 블록 생성과 합의 과정에서 발생하는 지연 때문에 발생합니다. 특히 공개 블록체인에서는 이러한 속도 문제가 더욱 심각할 수 있습니다.

비용 문제: 블록체인에서 거래를 처리하고 데이터를 저장하는 데에는 비용이 발생합니다. 특히 공개 블록체인에서는 이러한 비용이 더욱 높을 수 있습니다. 또한 가스 비용이나 거래 수수료 등의 형태로 사용자에게 직접 비용이 부과될 수 있습니다.

프라이버시 문제: 블록체인은 블록에 모든 거래 데이터를 공개적으로 저장합니다. 따라서 블록체인은 기본적으로 투명하고 투명한 시스템이지만, 특정 사용자나 기업의 개인 정보를 보호하는 데에는 한계가 있을 수 있습니다.

안전성 문제: 블록체인이 분산 네트워크에 의존하기 때문에 네트워크의 공격에 취약할 수 있습니다. 특히 51% 공격과 같은 공격은 블록체인의 안전성을 위협할 수 있습니다.

법적/규제적 문제: 블록체인 기술은 여러 국가와 산업에서 법적 및 규제적인 문제에 직면하고 있습니다. 특히 개인 정보 보호, 금융 거래 규제, 지적 재산권 등 다양한 영역에서 블록체인의 사용이 제약을 받을 수 있습니다.


 

비트코인&이더리움 주요 버전별 특징

 

비트코인
비트코인 0.1: 2009년 처음 출시된 비트코인의 초기 버전은 단순한 P2P 전자화폐 시스템이었습니다. 이 버전에서는 블록체인의 기본 개념과 거래의 검증 및 블록 생성이 이루어졌습니다.

비트코인 0.3: 비트코인 0.3 버전에서는 코인의 재사용을 방지하기 위해 coinbase와 같은 트랜잭션에 대한 기본 보안 개선이 이루어졌습니다.

비트코인 0.8: 이 버전에서는 블록 크기가 1MB로 확장되었고, 이로 인해 더 많은 거래가 블록에 포함될 수 있게 되었습니다.

비트코인 0.16: Segregated Witness(SegWit)가 도입되었습니다. SegWit는 블록 크기를 확장하지 않으면서 블록에 더 많은 거래를 포함할 수 있게 하고, 트랜잭션 처리 속도를 향상시켰습니다.

비트코인 0.18: 비트코인 0.18 버전에서는 확장성과 보안 개선을 위해 블록체인의 검증 프로세스가 최적화되었습니다.

이더리움
이더리움 1.0: 2015년에 출시된 이더리움의 초기 버전은 스마트 계약과 분산 애플리케이션(DApp)을 실행할 수 있는 플랫폼을 제공했습니다. 이더리움 1.0은 처음부터 스마트 계약을 지원하고 있었습니다.

이더리움 1.3: 이더리움 1.3 버전에서는 개발자들이 스마트 계약을 더 쉽게 작성하고 배포할 수 있도록 Solidity와 같은 스마트 계약 언어가 도입되었습니다.

이더리움 1.5: Constantinople 업그레이드가 도입되었습니다. 이 업그레이드는 이더리움 네트워크의 안정성을 향상시키고 스마트 계약을 보다 효율적으로 실행할 수 있게 했습니다.

이더리움 2.0: 이더리움 2.0은 PoS(Proof of Stake) 채택을 포함한 업그레이드를 위한 개발이 진행 중입니다. 이로써 이더리움의 확장성과 보안성이 향상될 것으로 기대됩니다.


 

Python 활용 블록체인 구현 예시 

import hashlib
import json
from time import time
from uuid import uuid4
from flask import Flask, jsonify, request

class Blockchain:
    def __init__(self):
        self.chain = []
        self.current_transactions = []

        # 제네시스 블록 생성
        self.new_block(previous_hash='1', proof=100)

    def new_block(self, proof, previous_hash=None):
        block = {
            'index': len(self.chain) + 1,
            'timestamp': time(),
            'transactions': self.current_transactions,
            'proof': proof,
            'previous_hash': previous_hash or self.hash(self.chain[-1]),
        }

        # 현재 거래 내역 초기화
        self.current_transactions = []
        self.chain.append(block)
        return block

    def new_transaction(self, sender, recipient, amount):
        self.current_transactions.append({
            'sender': sender,
            'recipient': recipient,
            'amount': amount,
        })
        return self.last_block['index'] + 1

    @staticmethod
    def hash(block):
        # 블록의 SHA-256 해시 계산
        return hashlib.sha256(json.dumps(block, sort_keys=True).encode()).hexdigest()

    @property
    def last_block(self):
        # 체인의 마지막 블록 반환
        return self.chain[-1]

    def proof_of_work(self, last_proof):
        proof = 0
        while self.valid_proof(last_proof, proof) is False:
            proof += 1
        return proof

    @staticmethod
    def valid_proof(last_proof, proof):
        # 작업 증명 검증: 해시 값의 앞에 0이 4개인 경우를 찾는다고 가정
        guess = f'{last_proof}{proof}'.encode()
        guess_hash = hashlib.sha256(guess).hexdigest()
        return guess_hash[:4] == "0000"

# Flask를 사용하여 간단한 웹 인터페이스 생성
app = Flask(__name__)

# 고유한 주소 생성
node_identifier = str(uuid4()).replace('-', '')

# 블록체인 인스턴스 생성
blockchain = Blockchain()

@app.route('/mine', methods=['GET'])
def mine():
    last_block = blockchain.last_block
    last_proof = last_block['proof']
    proof = blockchain.proof_of_work(last_proof)

    # 작업 증명에 대한 보상
    blockchain.new_transaction(
        sender="0",
        recipient=node_identifier,
        amount=1,
    )

    # 새 블록 추가
    previous_hash = blockchain.hash(last_block)
    block = blockchain.new_block(proof, previous_hash)

    response = {
        'message': "New Block Forged",
        'index': block['index'],
        'transactions': block['transactions'],
        'proof': block['proof'],
        'previous_hash': block['previous_hash'],
    }
    return jsonify(response), 200

@app.route('/transactions/new', methods=['POST'])
def new_transaction():
    values = request.get_json()
    required = ['sender', 'recipient', 'amount']
    if not all(k in values for k in required):
        return 'Missing values', 400

    index = blockchain.new_transaction(values['sender'], values['recipient'], values['amount'])
    response = {'message': f'Transaction will be added to Block {index}'}
    return jsonify(response), 201

@app.route('/chain', methods=['GET'])
def full_chain():
    response = {
        'chain': blockchain.chain,
        'length': len(blockchain.chain),
    }
    return jsonify(response), 200

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000)
반응형

'IT' 카테고리의 다른 글

Zabbix(시스템 모니터링 도구)  (0) 2024.03.22
[네트워크] L2/L3/L4(L7) 스위치  (0) 2024.03.21
이더리움(Ethereum)  (1) 2024.03.21
[네트워크] 라우팅(Routing)  (1) 2024.03.21
비트코인 가격은 어디까지 오를까?  (0) 2024.03.20