사전 지식

자료구조와 알고리즘

블록체인은 컴퓨터공학의 토대에 세워진 건축물과 같습니다. 컴퓨터공학의 핵심이자 기본이라 할 수 있는 자료구조와 알고리즘을 학습하여 블록체인을 지탱하는 기술을 이해합니다.

스택(stack)

스택은 LIFO(last-in-first-out)의 자료구조로써 한쪽 끝에서만 데이터가 삭제 및 삭제되는 특징이 있습니다. 블록체인에서는 트랜잭션을 실행시킬 때 명령어(opcode)가 스택에 삽입, 삭제되면서 순차적으로 실행됩니다.

리스트(list)

리스트는 데이터를 연결해서 일렬로 만들어놓은 자료구조로써 어떠한 위치에 있는 데이터이든 삭제할 수 있고 어떠한 위치에든 데이터를 삽입할 수 있습니다. 블록체인 자체가 다수의 블록 데이터를 연결해놓은 거대한 리스트이므로 리스트에 대한 이해는 필수적입니다.

트리(tree)

트리는 데이터들을 마치 나무를 뒤집은 모양처럼 저장된다는 데에서 이름붙여진 자료구조입니다. 하나의 데이터 노드는 한개 이상의 자식 노드를 가지고 있고 이러한 형태가 반복됩니다. 블록체인에서는 주로 상태를 머클 트리 형태로 저장하기 위해서 사용됩니다.

해시 테이블(hash table)

해시 테이블은 특정 데이터의 해시값을 '키'로, 데이터 자체를 '값'으로 저장하는 자료구조입니다. 빠른 시간 안에 데이터를 검색할 수 있다는 특징이 있습니다. 블록체인에서는 P2P 네트워크에서 분산된 이웃 노드를 빠르게 탐색하기 위해서 분산 해시 테이블(DHT)로 사용됩니다.

암호학

암호학이 없었다면 블록체인은 애초에 탄생할 수가 없었습니다. 개인키, 공개키를 사용해 데이터를 암호화, 복호화하는 과정 및 이를 통해 어떻게 블록체인의 보안이 유지될 수 있는지를 이해합니다.

양방향 암호화

양방향 암호화를 사용하면 한번 암호화한 데이터를 다시 원문(plain text)로 복호화할 수 있습니다. 이 때 암호화, 복호화 과정에서 '키'가 사용됩니다.

단방향 암호화

단방향 암호화를 사용하면 한번 암호화한 데이터는 다시 원문(plain text)로 복화할 수 없습니다. 이 때 암호화된 데이터를 '해시'라고 지칭합니다.

공개키 암호화

공개키 암호화는 양방향 암호화의 일종으로 암호화 과정과 복호화 과정에서 사용되는 키가 구분되는 방식입니다. 이를 통해 키의 보관 및 전달 문제를 해결할 수 있습니다.

머클 트리

머클 트리는 트리의 특수한 형태로써 각각의 노드의 값이 모두 해시로 이루어져 있습니다. 다량의 데이터 중 손상 혹은 변조된 데이터가 있는지 여부를 빠르고 효과적으로 검증할 수 있습니다.

컴퓨터 네트워크

블록체인은 P2P 네트워크 위에 구성되어 있으며 이를 이해하기 위해서는 우선 컴퓨터 네트워크에 대한 이해가 필수적입니다. 데이터가 어떤 경로로 전파되어 다른 노드에 도달하는지를 구체적으로 이해하면 블록체인 포크 시 발생할 수 있는 이슈 등에 대한 통찰을 얻을 수 있습니다.

노드

어떤 디바이스가 네트워크에 연결되어 있다면 그것은 곧 노드입니다. 블록체인에서는 클라이언트 프로그램 및 이를 가동하는 사용자의 PC 혹은 채굴기를 의미합니다.

위상(topology)

위상은 네트워크의 노드들이 어떤 모양으로 배열되어있는지를 나타내며 철저히 중앙화된 형태에서 완전히 분산된 형태까지 다양한 경우의 수가 존재합니다. 블록체인의 네트워크 위상을 어떻게 표현할 수 있는지 알아봅니다.

라우팅

라우팅이란 데이터가 물리적인 매체를 통해 다른 노드로 전달되는 과정을 의미하고, 라우팅이 효율적으로 이루어진다면 데이터의 전송 속도가 빨라질 확률이 높아집니다. P2P 네트워크에서는 라우팅이 어떻게 이루어지는지 이해합니다.

TCP/IP 4계층

노드들간의 데이터는 전체 크기로 전송되는 것 같지만 실제로는 그렇지 않고 TCP/IP 4계층을 따라 미리 정해진 규약에 따라 잘게 쪼개진 뒤 다시 합쳐지는 과정을 통해 상대방의 노드에 도달하게 됩니다. 이를 이해하게 되면 블록체인 상에서 데이터의 전파를 어떻게 효율적으로 수행할 수 있을지 알 수 있습니다.

네트워크 보안

네트워크의 데이터는 평문 그대로 전송이 될 수도 있지만 이 경우 중간에서 감청자(sniffer)가 데이터를 가로챌 수 있기 때문에 조심해야 합니다. 데이터를 암호화해서 전송하는 여러가지 기법을 알아봅니다.

시스템 프로그래밍

시스템 프로그래밍을 학습하면 블록체인의 핵심 컴포넌트라고 할 수 있는 가상 머신의 원리에 대해 이해할 수 있습니다.

컴퓨터 구조(architecture)

우리가 일반적으로 사용하는 컴퓨터의 세부 구조는 명령어 집합 구조(Instruction set architecture, ISA), 마이크로아키텍처, 시스템 디자인로 이루어져 있고 블록체인의 가상 머신 또한 동일합니다.

기계 언어/바이트 코드

기계 언어 혹은 바이트 코드는 컴퓨터를 동작시키기 위한 최소 단위의 네이티브 언어를 의미합니다. 기계 언어는 사람이 이해하기 힘들기 때문에 조금 더 높은 레벨의 언어로부터 컴파일이 된 결과물로써 컴퓨터에 입력이 됩니다.

어셈블러

어셈블러란 어셈블리 언어를 기계 언어로 변환해주는 소프트웨어을 의미합니다.

컴파일러

컴파일러는 사람이 읽고 쓰기 쉬운 높은 레벨의 언어를 어셈블리 언어로 변환해주는 소프트웨어를 의미합니다.