분산원장기술 / 트랜잭션

분산원장기술(DLT; Distributed Ledger Technology)

분산원장(Distributed Ledger) = 분산원장기술 = 공유원장

⇒ 블록체인 기술의 핵심

거래 정보를 기록한 원장을 특정 기관의 중앙화된 서버가 아닌 분산화된 네트워크에서 참여자들이 공동으로 기록 및 관리하는 기술

→ 분산[Distributed : 광범위하게 널리 분포 의미] + 원장[Ledger : 거래내역이 기록된 장부 의미] = 분산원장


중앙집중원장(Centralized Ledger)

기존의 여러 서비스가 지닌 형태, 여러 대기업이 제공하는 서비스와 은행시스템은 그들이 지닌 신뢰를 바탕으로 이용. 기관이나 기업에게 신뢰비용으로 수수료 등을 지불하고, 그들은 서비스를 제공하며 데이터를 보관(보안)하고 활용함. But, 기존의 중앙집중형 데이터베이스 관리시스템의 취약점이 존재.


중앙집중원장이 지닌 취약점

  • 비용
    • 제3자인 중앙집중형 관리시스템은 거래자들에게 과도한 관리, 중개수수료를 청구. 중앙집중형 시스템은 데이터베이스 유지 및 관리에 많은 보안유지비용을 지출하고, 금융권은 보인인프라에 많은 비용을 투자함. 이러한 비용들은 서비스 이용자들에게 부담됨.
  • 시간
    • 중앙집중형 관리시스템은 상호거래의 프로세스 전반에 걸쳐 많은 중간다리가 포함 → 시간, 비용 효율성이 떨어짐.
    • 미들맨(Middleman; 중간다리, 중간 이해관계자)들이 많이 존재할 수록 프로세스 전반에 걸쳐 시간과 비용은 증가하고 효율이 떨어짐.
  • 보안
    • 중앙집중형 데이터베이스를 이용하는 시스템은 해커들의 공격대상이 중앙데이터베이스 하나로 쏠림. 보안유지에 공을 들여도 해커들의 목표 대상이 하나이며, 공격에 성공시 모든 데이터 보안이 뚫림.
    • 단일 실패점(Single Point of Failure) : 중앙화의 문제


분산원장기술 장점

분산원장기술은 중앙 집중형 방식과 비교하여

  • 인증과 증명의 효율성
  • 시스템 안정성
  • 보안성
  • 투명성

의 장점이 존재. 기존 시스템들은 인증과 데이터 거래 증명을 위한 여러 중간 매개체와 인증기관을 거쳐야했으나, 분산원장은 사용자가 거래 내역을 직접 공유할 수 있는 시스템의 차별성을 지님.

중앙화된 시스템 관리 비용이 줄고, 거래 정보가 분산 저장되어 해킹과 위조의 위험성이 줄어듦.


개인 지갑 거래

위의 분산원장기술 장점들로 개인과 개인이 직접 거래 가능. 중앙기관으로부터 벗어난 거래가 가능해지면 해외송금에 걸리는 시간과 비용이 감소하기 때문에 비용과 시간의 문제가 해결되며, 분산원장기술을 통해 보안 문제 또한 해결 가능.

⇒ 분산원장기술을 이용하면 물리적 거리와 시간 상관없이 거래 상대에게 송금 가능.



  • 블록체인(BlockChain) = 블록(Block) + 체인(Chain)
    • 블록들이 체인으로 연결된 구조
  • 블록(Block) = 헤더(Header) + 바디(Body)
    • 헤더(Header)
      • 메타데이터 : 블록이라는 데이터 설명, 블록의 최상단에 따로 둠
        • 체인 중 몇번 째 블록인지
        • 블록의 트랜잭션 개수
        • 블록 생성자
        • 블록의 크기, 총 전송량
        • 논스(Nonce)값
    • 바디(Body)
      • 트랜잭션 리스트
      • 트랜잭션 = 데이터
      • 블록 = 트랜잭션의 집합 = 데이터

트랜잭션(Transaction) ?

데이터베이스의 상태를 변환시키는 하나의 논리적 기능 수행을 위한 작업의 단위.

은행 앱에서의 이체 데이터처럼 비트코인의 거래에서도 보내는 주소, 받는 사람 주소, 금액, 수수료 등의 정보가 작성되어야 하며 이를 트랜잭션 데이터라 함.

블록체인의 트랜잭션 또한 상호작용 및 작업 수행의 논리적 단위를 말함. 블록체인 상의 모든 활동은 트랜잭션을 통해 이뤄지며, 추상적인 관점에서 블록체인의 상태(State) 변화시키는 일련의 작업을 내포하고 있음.

  • ex. 블록체인 상태 변화 : A가 B에게 $10 송금시, 각자 보유 금액에서 A는 -$10, B는 +$10의 상태 변화가 생김

트랜잭션은 여러 개의 작업을 하나로 묶은 실행 유닛이며, 각 트랜잭션은 하나의 특정 작업으로 시작해서 묶인 작업들을 모두 완료해야 정상적으로 종료함. 만일 하나의 트랜잭션에 속해있는 여러 작업중 하나라도 실패하면, 모든 작업이 실패한 것으로 판단하여 트랜잭션도 실패. 모든 작업이 성공해야 트랜잭션도 성공. 트랜잭션 결과로 성공 혹은 실패만 존재하므로 미완료 없이 모든 작업 성공.



비트코인과 이더리움 트랜잭션 구조

비트코인 트랜잭션 구조

필드 설명
버전 번호 채굴자와 노드가 트랜잭션 처리에 사용할 규칙 지정
입력 카운터 트랜잭션에 포함된 입력 개수
입력 리스트 블록의 첫 트랜잭션은 코인베이스 트랜잭션, 하나 이상의 트랜잭션 입력이 포함
출력 카운터 출력의 개수(양의 정수)
출력 리스트 트랜잭션에 포함된 출력
로크(Lock) 시간 트랜잭션이 유효해지는 가장 빠른 시간 정의

이더리움 트랜잭션 구조

필드 설명
논스(Nonce) 발신 EOA에 의해 발행되어 메시지 재사용 방지에 사용하는 일련번호
가스 가격(Gas Price) 발신자가 지급하는 가스의 가격
가스 한도(Gas Limit) 이 트랜잭션을 위해 구입할 가스 최대량
수신자(Recipient) 목적지 이더리움 주소
값(Value) 보낼 이더의 양
데이터(Data) 가변 길이 바이너리 데이터 페이로드
v, r, s EOA의 ECDSA 디지털 서명의 세가지 구성 요소

이더리움 트랜잭션 논스(Nonce) 특징

  • 거래 전송(Transaction)시 논스 1씩 증가
  • 논스는 계정에서 유일, 동일한 논스가 존재하지 x

용어 정리

논스(Nonce) ?

발신 주소의 속성, 발신 주소의 컨텍스트 안에서만 의미를 가짐. 명시적으로 블록체인 계정 상태에 저장되지 않고, 해당 주소에서 발생한 트랜잭션 건수를 동적으로 계산되는 값. 논스는 중복되지 않고 순차적이라 같은 논스에 여러 트랜잭션 전송이 발생하면 논스 중 제일 높은 가스비(Gas Price)를 지불한 트랜잭션이 처리됨. 이런 방법으로 이더리움에서의 이중 지불 문제를 방지.

→ 논스가 0인 트랜잭션 전송, 논스가 2인 트랜잭션 전송시 두번째 트랜잭션은 블록에 포함되지 않음. 이더리움 네트워크는 누락 논스를 기다리며 두번째 논스를 멤풀에 저장함. 논스가 1인 누락된 트랜잭션을 전송하면, 두 트랜잭션이 처리 되고 블록에 포함.


멤풀(Mempool) ?

아직 블록에 들어가지 않은 상태의 트랜잭션들이 어떤 공간에 있는 것.


이중지불(Double Spending) ?

원본 파일에 저장된 가치를 지불한 뒤, 해당 파일을 다른 사람에게 또 지불하는 것.

비트코인과 이더리움 논스의 유무 차이이중지불 방지를 위함.

모든 트랜잭션은 일회성이라 하나의 트랜잭션의 경우 하나의 상태만 변화시킴. 이런 문제를 해결하기 위해

비트코인의 경우 UTXO(Unspent Transaction Outputs; 미사용 트랜잭션 출력값)를 통해 해결하고,

이더리움어카운트(Account)기반 시스템으로 논스 값을 각 트랜잭션이 오직 한번만 처리되게 하는 카운터로 사용.

⇒ UTXO와 어카운트 기반의 프로토콜 차이 때문에 이더리움 트랜잭션의 논스가 존재하며, 이는 트랜잭션 발신자가 트랜잭션에 필요한 메시지 재사용을 방지함.



A.C.I.D

[Atomicity / Consistency / Isolation / Durability]

데이터베이스 트랜잭션이 지닌 특성. ACID는 데이터베이스 내에서 일어나는 트랜잭션의 안정성을 보장하기 위한 성질.


> Atomicity(원자성)

하나의 트랜잭션에 속한 모든 작업이 전부 성공 혹은 전부 실패해서 결과를 예측할 수 있어야 함. 작업들이 부분적으로 실행되면, 업데이트가 일어나도 누가 했는지, 날짜 등이 누락되는 데이터 오염이 발생할 수 있음. 원자성이 지켜진다면 하나의 단위로 묶인 모든 작업이 성공으로 완료하거나 실패하게 만들어 기존 데이터를 보호.


> Consistency(일관성)

데이터베이스의 상태가 일관되어야 함. 하나의 트랜잭션 이전과 이후에 데이터베이스의 상태는 이전과 같이 유효해야 함. 트랜잭션이 일어난 후에도 데이터베이스의 제약이나 규칙을 만족해야 함. 데이터베이스의 유효한 상태는 다를 수 있으나 데이터의 상태에 대한 일관성은 변함이 없어야 함.


> Isolation(격리성, 고립성)

모든 트랜잭션은 다른 트랜잭션으로부터 독립되어야 함. 동시에 여러 트랜잭션들이 수행될 때, 각 트랜잭션은 고립(격리)되어 있어 연속으로 실행된 것과 동일한 결과를 나타냄. 격리성을 지키는 트랜잭션은 철저히 독립적이라 다른 트랜잭션의 작업 내용을 알 수 없음. 또한 트랜잭션이 동시 실행될 때와 연속으로 실행될 때의 데이터베이스 상태가 동일해야 함.


> Durability(지속성)

하나의 트랜잭션이 성공적으로 수행되면, 트랜잭션에 대한 로그가 남아야 함. 런타임 or 시스템 오류가 발생해도 해당 기록은 영구적으로 존재해야함.