본문 바로가기
리치한정보 리치한정보

블록 하나에는 어떤 정보가 들어갈까? 블록체인 데이터 구조 이해하기

richissue 읽는 시간 약 16분

비트코인 블록 안에는 어떤 정보가 들어갈까요? 80바이트 블록 헤더와 트랜잭션, 머클 루트, 코인베이스 거래부터 탐색기 화면의 정보까지 쉽게 정리합니다.

블록체인을 설명하는 그림에서는 네모난 블록 여러 개가 줄지어 연결된 모습을 자주 볼 수 있습니다.

그래서 블록을 거래 내역을 차곡차곡 담아두는 상자처럼 생각하기 쉽습니다.

실제 Bitcoin 블록은 조금 더 구조적입니다.

블록 앞부분에는 블록 헤더(Block Header)가 있고, 그 뒤에는 해당 블록에 포함된 트랜잭션들이 이어집니다.

또 블록 탐색기를 열면 블록 높이, 해시, 거래 수, 크기, 무게, 수수료처럼 훨씬 많은 정보가 보입니다.

여기서 중요한 것은 탐색기에 보이는 모든 숫자가 블록 헤더에 그대로 저장된 필드는 아니라는 점입니다.

이번 글에서는 Bitcoin을 기준으로 실제 블록 안의 정보와 탐색기가 계산·정리해 보여주는 정보를 구분해 보겠습니다.

Bitcoin 블록은 크게 어떻게 구성될까?

직렬화된 Bitcoin 블록을 단순화하면 다음과 같이 볼 수 있습니다.

블록 헤더 + 트랜잭션 개수 + 트랜잭션 목록

블록 헤더는 고정된 80바이트이고, 뒤쪽의 트랜잭션 부분은 블록마다 크기가 달라집니다. Bitcoin 개발 문서에서도 직렬화된 블록을 80바이트 헤더, 트랜잭션 개수, 실제 트랜잭션들의 순서로 설명합니다.

따라서

블록 = 거래 목록만 모아놓은 파일

이라고 이해하기보다는

거래 데이터와 그 블록을 검증·연결하는 데 필요한 핵심 정보가 함께 묶인 데이터 단위

라고 이해하는 편이 정확합니다.

80바이트 블록 헤더에는 무엇이 들어갈까?

Bitcoin 블록 헤더에는 여섯 가지 핵심 필드가 있습니다.

블록 헤더 항목역할
Version블록 검증 규칙과 관련된 버전 정보
Previous Block Hash바로 앞 블록 헤더의 해시
Merkle Root블록에 포함된 거래들과 연결되는 머클 루트
Timestamp블록 헤더에 기록된 시간
nBits작업증명 목표값을 압축해 표현한 값
Nonce작업증명 과정에서 변경할 수 있는 값

이 여섯 항목이 실제 Bitcoin 블록 헤더의 핵심 구조입니다.

처음 공부할 때 각 필드의 바이트 순서나 계산식을 외울 필요는 없습니다.

중요한 것은 블록 헤더 하나에

앞 블록과의 연결 → 현재 블록의 거래 집합 → 시간 → 작업증명 정보

가 함께 들어간다는 점입니다.

Block Hash는 일곱 번째 헤더 필드가 아니다

블록 탐색기를 열면 가장 눈에 띄는 것 가운데 하나가 긴 Block Hash입니다.

그래서 블록 헤더에

Block Hash

라는 필드도 들어 있다고 생각하기 쉽습니다.

하지만 현재 블록의 블록 해시는 헤더 안에 별도의 일곱 번째 항목으로 저장되는 값이 아닙니다.

80바이트 블록 헤더를 해시해서 계산한 결과값입니다. Bitcoin의 작업증명 역시 이 직렬화된 블록 헤더를 해시하는 구조를 사용합니다.

반면 블록 헤더 안에는 Previous Block Hash, 즉 바로 앞 블록 헤더의 해시가 들어 있습니다.

정리하면,

현재 블록 해시 → 현재 블록 헤더에서 계산

Previous Block Hash → 현재 블록 헤더 안에 실제로 포함

입니다.

42번 해시 글에서 다룬 블록 연결 구조가 실제 데이터에서는 바로 이 필드로 구현됩니다.

Block Height는 어디에 있을까?

탐색기에는 보통 Block Height 964748처럼 현재 블록의 위치가 표시됩니다.

하지만 Block Height는 80바이트 블록 헤더의 여섯 필드 가운데 하나가 아닙니다.

블록 높이는 이전 블록부터 연결된 체인을 따라 현재 블록이 몇 번째 위치에 있는지를 나타냅니다.

다만 여기에서 한 단계 더 정확하게 볼 필요가 있습니다.

현대 Bitcoin 블록의 첫 번째 거래인 코인베이스 트랜잭션에는 블록 높이가 포함됩니다. Bitcoin 개발 문서에서도 코인베이스 입력에 블록 높이가 들어가는 구조를 설명합니다.

따라서

“Block Height는 블록 안에 전혀 없다.”

보다는

“Block Height는 블록 헤더의 필드가 아니며, 탐색기는 체인상의 위치로도 보여주고 현대 블록의 코인베이스 트랜잭션에도 높이 정보가 포함된다.”

라고 이해하는 것이 정확합니다.

하나의 블록에는 여러 트랜잭션이 들어간다

사용자가 Bitcoin을 한 번 전송할 때마다 블록 하나가 만들어지는 것은 아닙니다.

여러 트랜잭션이 하나의 블록에 함께 들어갑니다.

그래서 실제 블록 탐색기를 열어보면 한 블록 아래에 많은 TXID가 이어지는 모습을 볼 수 있습니다.

그렇다고

블록 하나 = 항상 몇 천 건

처럼 거래 개수가 정해진 것도 아닙니다.

트랜잭션마다 차지하는 데이터와 Weight가 서로 다르고 당시 채굴자가 어떤 거래를 포함했는지도 달라지기 때문입니다.

Bitcoin Core가 제공하는 블록 데이터에서도 nTx는 블록마다 달라지는 트랜잭션 수로 표시되고, 별도로 sizeweight도 확인할 수 있습니다.

첫 번째 트랜잭션은 조금 특별하다

Bitcoin 블록의 첫 번째 거래는 일반적인 지갑 간 송금과 다릅니다.

이를 코인베이스 트랜잭션(Coinbase Transaction)이라고 합니다.

암호화폐 거래소 Coinbase와는 관계없는 이름입니다.

일반 Bitcoin 거래는 이전에 만들어진 UTXO를 입력으로 소비하지만, 코인베이스 트랜잭션은 같은 방식의 일반적인 이전 UTXO를 입력으로 사용하지 않습니다.

대신 해당 블록에서 허용되는 블록 보조금과 포함된 거래의 수수료를 채굴자가 받을 수 있도록 만드는 특별한 거래입니다. Bitcoin 공식 문서에서도 블록의 첫 번째 거래는 반드시 코인베이스 트랜잭션이어야 한다고 설명합니다.

그래서 실제 블록의 거래 목록 첫 번째 항목이 일반 거래와 다르게 보이는 것은 정상입니다.

머클 루트는 수많은 거래와 블록 헤더를 연결한다

블록 안에는 많은 거래가 있지만 80바이트 블록 헤더에 모든 거래를 직접 넣을 수는 없습니다.

Bitcoin에서는 거래들의 TXID를 이용해 머클 트리(Merkle Tree)를 구성하고 최종적으로 하나의 Merkle Root를 만듭니다.

이 값이 블록 헤더에 들어갑니다.

머클 루트를

“블록 속 거래 내용을 압축해서 읽을 수 있는 요약문”

이라고 생각하면 안 됩니다.

머클 루트만 보고 누가 누구에게 얼마를 보냈는지 알 수 있는 것은 아닙니다.

핵심은 블록에 포함된 거래 집합과 블록 헤더를 암호학적으로 연결하는 값이라는 점입니다.

따라서 블록의 거래가 달라지면 관련 머클 구조도 영향을 받고, 결국 블록 헤더의 Merkle Root도 달라질 수 있습니다.

해시 자체의 원리는 42번에서 이미 다뤘기 때문에 43번에서는 여기까지만 이해하면 충분합니다.

Timestamp는 모든 거래의 발생 시간이 아니다

블록 헤더에는 Timestamp 또는 time으로 표시되는 시간 정보가 있습니다.

이 시간을 블록 안에 포함된 모든 거래가 발생한 시간으로 생각하면 안 됩니다.

사용자가 거래를 만들어 네트워크에 전파한 뒤 실제 블록에 포함되기까지 시간이 걸릴 수 있기 때문입니다.

또 Bitcoin의 블록 헤더 시간은 채굴자가 헤더에 설정하는 Unix 시간이고, 네트워크 규칙상 아무 값이나 사용할 수 있는 것도 아닙니다. 이전 블록들의 중앙값과 미래 시간에 관한 제한을 받습니다.

따라서 탐색기에서 블록 시간을 볼 때는

“이 블록의 헤더에 기록된 시간”

이라고 이해하는 것이 가장 안전합니다.

개별 트랜잭션이 네트워크에 처음 전파된 정확한 순간과 같은 값이라고 볼 수는 없습니다.

블록에는 왜 거래 개수가 항상 같지 않을까?

Bitcoin 블록에는 사용할 수 있는 공간에 한계가 있습니다.

현재 Bitcoin에서는 Block Weight라는 기준이 중요한 역할을 하며, 거래마다 차지하는 Weight가 다릅니다.

그래서 단순히

“블록 하나에는 최대 몇 건의 거래가 들어간다.”

라고 정할 수 없습니다.

작은 트랜잭션이 많이 들어간 블록과 상대적으로 큰 트랜잭션이 많이 들어간 블록은 거래 개수가 달라질 수 있습니다.

탐색기에서

Transactions / Size / Weight

를 함께 보여주는 이유도 여기에 있습니다.

하지만 이 숫자들이 모두 80바이트 블록 헤더에 있는 필드는 아닙니다.

이 차이가 바로 실제 프로토콜 데이터와 탐색기 표시 정보를 구분해야 하는 이유입니다.

탐색기에 보이는 모든 것이 블록 헤더에 들어 있는 것은 아니다

실제 블록 탐색기를 열면 이런 정보들을 볼 수 있습니다.

  • Block Height
  • Block Hash
  • Timestamp
  • Transactions
  • Size
  • Weight
  • Total Fees
  • Difficulty
  • Previous Block
  • Merkle Root
  • Version
  • Bits
  • Nonce

처음에는 이 모든 것이 똑같이 블록 안에 있는 필드처럼 보입니다.

실제로는 그렇지 않습니다.

비트코인 블록 상세 화면에서 이전 블록 해시와 머클 루트 비트 논스 버전 정보를 확인하는 모습
실제 비트코인 블록 상세 화면에서는 Previous Block, Merkle Root, Bits, Nonce, Version 등 블록 구조와 검증에 사용되는 정보를 확인할 수 있습니다.
탐색기에서 보는 정보어떻게 이해하면 될까?
Version블록 헤더 필드
Previous Block Hash블록 헤더 필드
Merkle Root블록 헤더 필드
Timestamp블록 헤더 필드
nBits블록 헤더 필드
Nonce블록 헤더 필드
Block Hash블록 헤더에서 계산한 값
Block Height헤더 필드는 아님
Transactions블록에 실제 포함된 거래
Transaction Count블록의 거래 수를 나타내는 정보
Size·Weight직렬화된 블록 데이터를 바탕으로 확인 가능
Total Fees포함된 거래 데이터를 이용해 계산 가능
DifficultynBits 등을 바탕으로 사람이 이해하기 쉽게 표현 가능

Bitcoin Core의 getblockgetblockheader 명령도 height, difficulty, nTx, size, weight 같은 정보를 별도로 반환합니다. 즉 탐색기는 원시 데이터를 그대로 나열하는 화면이 아니라 블록체인 데이터를 읽기 좋게 해석해 보여주는 도구라고 보는 편이 정확합니다.

실제 블록을 볼 때는 이 순서만 기억하면 된다

처음부터 모든 숫자를 읽을 필요는 없습니다.

첫째, Block Height와 시간을 봅니다.
어느 위치의 블록이고 언제 만들어진 블록인지 확인합니다.

둘째, Transactions를 봅니다.
몇 개의 거래가 포함돼 있는지 확인합니다.

셋째, Previous Block Hash와 Merkle Root를 봅니다.
앞 블록과 어떻게 연결되고 현재 거래 집합이 헤더에 어떻게 연결되는지 봅니다.

넷째, Version·Bits·Nonce를 확인합니다.
블록 생성과 검증에 사용되는 헤더 정보라는 정도만 이해하면 됩니다.

마지막으로 Size와 Weight 같은 탐색기 정보를 봅니다.

즉,

위치 → 거래 → 연결 정보 → 헤더 정보 → 탐색기 계산 정보

순서입니다.

이 정도만 구분하면 실제 블록 탐색기 화면도 훨씬 덜 복잡하게 보입니다.

모든 블록체인의 블록이 이렇게 생긴 것은 아니다

지금까지 설명한 것은 Bitcoin 블록입니다.

Ethereum이나 다른 블록체인의 블록에 같은 여섯 필드가 그대로 들어간다고 생각하면 안 됩니다.

네트워크마다 상태 관리 방식과 합의 구조, 블록에 필요한 데이터가 다릅니다.

따라서

Version + Previous Block Hash + Merkle Root + Timestamp + nBits + Nonce = 모든 블록체인의 공통 블록 구조

라고 외우면 틀립니다.

43번에서 Bitcoin을 사용하는 이유는 모든 블록체인의 구조를 대표하기 때문이 아니라 블록이 단순한 거래 상자가 아니라 헤더와 거래 데이터가 규칙에 따라 구성된다는 원리를 실제 사례로 확인하기 쉽기 때문입니다.

FAQ

Bitcoin 블록에는 어떤 정보가 들어가나요?

크게 80바이트 블록 헤더와 트랜잭션 개수, 실제 트랜잭션 목록으로 볼 수 있습니다. 블록 헤더에는 Version, Previous Block Hash, Merkle Root, Timestamp, nBits, Nonce가 들어갑니다.

Block Hash도 블록 헤더 필드인가요?

아닙니다. Bitcoin의 블록 해시는 80바이트 블록 헤더를 해시해 계산한 결과입니다.

Block Height는 블록 헤더에 들어 있나요?

블록 헤더의 여섯 필드에는 포함되지 않습니다. 다만 현대 Bitcoin 블록의 코인베이스 트랜잭션에는 블록 높이가 포함됩니다.

머클 루트는 무엇인가요?

블록에 포함된 거래들의 TXID를 머클 트리로 구성해 얻는 최종값으로, 블록 헤더에 포함되어 거래 집합과 헤더를 연결합니다.

한 블록에는 거래가 몇 개 들어가나요?

고정되어 있지 않습니다. 트랜잭션마다 데이터와 Weight가 다르기 때문에 블록마다 포함되는 거래 수가 달라질 수 있습니다.

탐색기에 보이는 정보는 모두 블록 안의 필드인가요?

아닙니다. 실제 블록 헤더 필드와 거래 데이터도 있지만, Block Hash·Difficulty·Total Fees처럼 원시 데이터를 계산하거나 이해하기 쉽게 정리한 정보도 있습니다.

📌 핵심 정리

Bitcoin 블록은 단순히 거래 목록을 담아놓은 상자가 아닙니다.

기본적으로 80바이트 블록 헤더와 트랜잭션 데이터가 함께 구성됩니다.

블록 헤더에는

Version / Previous Block Hash / Merkle Root / Timestamp / nBits / Nonce

라는 여섯 가지 핵심 필드가 있습니다.

반면 탐색기에 보이는 Block Hash는 헤더에서 계산한 결과이고, Block Height 역시 헤더의 별도 필드는 아닙니다.

블록에는 여러 트랜잭션이 함께 들어가며 첫 번째에는 특별한 코인베이스 트랜잭션이 위치합니다. 거래들의 TXID는 머클 트리를 통해 Merkle Root와 연결되고 이 값이 블록 헤더에 포함됩니다.

결국 실제 블록 탐색기를 볼 때 가장 중요한 것은

“화면에 보이는 숫자가 무엇인가?”보다 “이 값은 실제 블록 헤더 필드인가, 블록의 거래 데이터인가, 아니면 탐색기가 계산·정리해 보여주는 정보인가?”

를 구분하는 것입니다.

이 기준만 잡으면 복잡한 블록 탐색기 화면도 훨씬 쉽게 읽을 수 있습니다.


📚 함께 읽으면 좋은 글

📚 참고자료

📢 안내

이 글은 Bitcoin을 기준으로 블록체인 데이터 구조를 이해하기 위한 일반적인 정보입니다. 다른 블록체인은 서로 다른 블록 구조와 상태 관리 방식, 합의 규칙을 사용할 수 있으므로 Bitcoin의 필드를 모든 블록체인에 그대로 적용해서는 안 됩니다.

richissue

richissue
함께 보면 좋은 글

댓글 0

첫 댓글을 남겨보세요.

광고 차단 알림

광고 클릭 제한을 초과하여 광고가 차단되었습니다.

단시간에 반복적인 광고 클릭은 시스템에 의해 감지되며, IP가 수집되어 사이트 관리자가 확인 가능합니다.