TIL

블록체인: 기본과 역사

1990년대, 암호학자들과 프로그래머들이 모였습니다. 이들은 Cypherpunk라 불렸고, 하나의 신념을 공유했습니다. "개인의 프라이버시는 디지털 시대의 필수 권리다."Cypherpunk 운동은 단순한 기술 커뮤니티가 아니었습니다. 이들은 정부와 기업의 감시로부터 개

2025년 11월 17일7min read

1. 블록체인 배경 🎯

1-1. Cypherpunk ✅

1990년대, 암호학자들과 프로그래머들이 모였습니다. 이들은 Cypherpunk라 불렸고, 하나의 신념을 공유했습니다. "개인의 프라이버시는 디지털 시대의 필수 권리다."

Cypherpunk 운동은 단순한 기술 커뮤니티가 아니었습니다. 이들은 정부와 기업의 감시로부터 개인의 자유를 지키기 위해 암호학 기술을 연구하고 보급했습니다. 이메일 암호화, 익명 네트워크, 디지털 현금 등 우리가 지금 당연하게 사용하는 많은 기술의 철학적 토대가 여기서 시작되었죠.

비트코인의 창시자 사토시 나카모토도 이 운동의 영향을 받았습니다. 블록체인은 바로 이 Cypherpunk 정신의 구현체입니다.

1-2. 검열 문제 ✅

ISP 업체의 검열 🌀

인터넷을 사용할 때마다, ISP(KT, SKT, LG U+)는 우리가 어떤 웹사이트에 접속하는지, 얼마나 많은 데이터를 주고받는지 파악할 수 있습니다. 특정 국가에서는 정부가 ISP를 통해 특정 사이트를 차단하거나, 트래픽을 검열합니다.

거대 플랫폼의 검열 🌀

페이스북, 유튜브, 트위터 같은 플랫폼은 중앙화된 서버를 운영합니다. 이들은 언제든 우리의 계정을 정지시키거나, 게시글을 삭제할 수 있습니다. 명확한 기준 없이, 설명 없이 말이죠. 우리의 10년 치 콘텐츠가 하루아침에 사라질 수 있습니다.

돈에 대한 검열 🌀

중앙은행은 금리를 조정하고, 정부는 법적 규제를 통해 우리가 보유한 돈의 가치를 변화시킵니다. 특정 국가에서는 외환 거래를 제한하거나, 개인의 송금을 막기도 합니다. 우리의 은행 계정은 정부의 명령으로 동결될 수 있습니다.

이 모든 문제는 중앙화된 권력으로부터 나옵니다. 블록체인은 이러한 문제에 대한 기술적 해답입니다.


2. 블록체인 등장 🎯

2-1. 중앙화 DB / 분산 DB / 탈중앙화 DB ✅

데이터를 저장하는 방식은 시대에 따라 진화해왔습니다.

중앙화 DB(Centralized Database) 🌀

전통적인 방식입니다. 하나의 서버에 모든 데이터가 저장됩니다. 페이스북의 데이터는 페이스북 서버에, 은행의 데이터는 은행 서버에 있죠.

- 장점: 빠르고 효율적입니다. - 단점: 서버가 다운되면 모든 서비스가 멈춥니다. 해킹당하면 모든 데이터가 위험합니다. 그리고 운영자가 절대적인 권력을 갖습니다.

분산 DB(Distributed Database) 🌀

데이터를 여러 서버에 복사해 저장합니다. 구글, 아마존 같은 대기업이 사용하는 방식이죠. 주로 마스터-슬레이브 구조를 갖습니다. 하나의 주 서버(마스터)가 있고, 여러 보조 서버(슬레이브)가 데이터를 복제합니다.

- 장점: 한 서버가 다운되어도 다른 서버가 서비스를 유지합니다. - 단점: 여전히 중앙 관리자가 존재합니다. 데이터의 최종 권한은 마스터 서버에 있죠.

탈중앙화 DB(Decentralized Database) 🌀

블록체인이 바로 이 방식입니다. 모든 노드(참여자, 컴퓨터)가 동등한 권한을 갖습니다. 누군가 주인이고 누군가 부하인 구조가 아닙니다. 모두가 전체 데이터의 복사본을 갖고, 모두가 검증자입니다.

- 장점: 단일 실패 지점이 없습니다. 검열이 불가능합니다. 투명하고 신뢰할 수 있습니다. - 단점: 느리고 비용이 많이 듭니다. 모든 노드가 합의해야 하니까요.

2-2. 비잔틴 장군 문제 ✅

비잔틴 제국 시대, 여러 장군들이 적을 포위하고 있습니다. 공격 시간을 정해야 하는데, 장군들은 멀리 떨어져 있고 메신저로만 소통합니다. 여기서 두 가지 문제가 발생합니다.

문제 1: 각 노드를 운영하는 개별 주체는, 메세지가 위변조되지 않았음을 어떻게 알 수 있을까? 🌀

메신저가 적에게 잡혀 거짓 명령서를 전달할 수도 있습니다. 또는 배신자 장군이 거짓 명령을 보낼 수도 있죠.

해결책: 공개키 암호화

각 장군(노드)은 비밀키와 공개키 쌍을 갖습니다. 메시지를 보낼 때 비밀키로 디지털 서명을 합니다. 받는 쪽은 공개키로 이 서명을 검증합니다. 이렇게 하면 메시지가 위조되지 않았고, 진짜 그 장군이 보낸 것임을 확인할 수 있습니다.

문제 2: 각 노드가 메세지에 있는 내용을 알맞게 처리하는지 어떻게 알 수 있을까? 🌀

메시지는 진짜지만, 배신자 장군이 명령을 무시하거나 다르게 행동할 수 있습니다.

해결책: 합의

모든 노드가 동일한 규칙(프로토콜)을 따르도록 합니다. 작업 증명(PoW), 지분 증명(PoS) 같은 합의 알고리즘을 통해, 대다수의 정직한 노드가 합의한 내용만 블록체인에 기록됩니다. 배신자가 있어도 다수가 정직하면 시스템은 정상 작동합니다.


3. 블록체인 기본 🎯

3-1. 트랜잭션 / 해시 / 블록 ✅

트랜잭션(Transaction) 🌀

블록체인 세계의 메시지입니다. "A가 B에게 1 BTC를 보냈다", "스마트 컨트랙트 함수를 실행했다" 같은 모든 행동이 트랜잭션입니다.

예시:

code
From: 0xAlice...
To: 0xBob...
Amount: 1 ETH
Timestamp: 2025-11-17 10:30:00
Signature: [디지털 서명]

해시(Hash) 🌀

데이터를 고유한 지문으로 변환하는 함수입니다. 같은 입력은 항상 같은 출력을 만들고, 조금만 바뀌어도 완전히 다른 출력이 나옵니다.

code
Input: "Hello World" 
→ Hash: a591a6d40bf420404a011733cfb7b190d62c65bf0bcda32b57b277d9ad9f146e

Input: "Hello World!" (느낌표 하나만 추가)
→ Hash: 7f83b1657ff1fc53b92dc18148a1d65dfc2d4b1fa3d677284addd200126d9069

이 특성 덕분에 블록체인은 위변조를 감지할 수 있습니다.

블록(Block) 🌀

여러 트랜잭션을 묶은 것입니다. 각 블록은 다음 정보를 포함합니다.

code
Block #12345
- 이전 블록 해시: 0x7a8f...
- 타임스탬프: 2025-11-17 10:35:00
- 트랜잭션들: [Tx1, Tx2, Tx3, ...]
- Nonce: 185732 (작업 증명용)
- 현재 블록 해시: 0x9b2e...

각 블록이 이전 블록의 해시를 포함하기 때문에, 체인처럼 연결됩니다. 이것이 블록체인이라는 이름의 유래입니다.

3-2. 공개키 암호화 방식 ✅

블록체인에는 아이디와 비밀번호가 없습니다. 대신 공개키와 비밀키를 사용합니다.

비밀키(Private Key) 🌀

나만 아는 긴 숫자입니다. 이것으로 디지털 서명을 만듭니다. 절대 타인에게 공개하면 안 됩니다. 비밀키를 잃어버리면 자산도 영원히 잃습니다.

code
예시: 0x4c0883a69102937d6231471b5dbb6204fe5129617082792ae468d01a3f362318

공개키(Public Key) 🌀

비밀키로부터 수학적으로 유도된 키입니다. 다른 사람들에게 공개해도 됩니다. 이것으로 디지털 서명을 검증합니다. 공개키를 해싱하면 나의 지갑 주소가 됩니다.

작동 원리 🌀

1. 원민관이 트랜잭션을 만들고 자신의 비밀키로 서명합니다. 2. 네트워크의 모든 노드는 원민관의 공개키로 서명을 검증합니다. 3. 서명이 유효하면, 이 트랜잭션은 진짜 원민관이 보낸 것이고 위조되지 않았음을 확인합니다.

3-3. 블록체인 경제 / 이중 지불 문제 / 작업 증명(PoW) ✅

블록체인 경제 🌀

블록체인은 자원봉사가 아닙니다. 노드(컴퓨터)를 운영하려면 전기세, 하드웨어 비용, 시간이 듭니다. 그럼 왜 사람들은 노드를 운영할까요? 돈을 벌 수 있으니까요.

채굴자(비트코인) 또는 검증자(이더리움)는 새 블록을 생성하고 보상을 받습니다. 비트코인은 약 10분마다 새 블록이 생성되고, 채굴자는 현재 약 3.125 BTC(2024년 반감기 이후)와 거래 수수료를 받습니다.

이중 지불 문제 🌀

디지털 자산의 가장 큰 문제입니다. 파일은 복사할 수 있습니다. 그럼 디지털 돈도 복사할 수 있지 않을까요?

예시: 원민관이 1 BTC를 갖고 있습니다. 원민관은 백예린에게 1 BTC를 보내는 트랜잭션을 만듭니다. 동시에 한로로에게도 똑같은 1 BTC를 보내는 트랜잭션을 만듭니다. 어떻게 될까요?

작업 증명(Proof of Work, PoW) 🌀

블록체인은 이 문제를 작업 증명으로 해결합니다. 새 블록을 생성하려면 복잡한 수학 퍼즐을 풀어야 합니다.

code
목표: 블록 해시가 특정 숫자보다 작은 값 찾기
예시: 해시가 0000으로 시작해야 함

시도 1: Nonce=1 → Hash=7a8f... (실패)
시도 2: Nonce=2 → Hash=9b2e... (실패)
...
시도 185,732: Nonce=185732 → Hash=0000bc4a... (성공!)

이 퍼즐은 풀기는 어렵지만 검증은 쉽습니다. 채굴자가 수백만 번 시도해서 답을 찾으면, 다른 노드들은 한 번만 계산해서 검증할 수 있습니다.

원민관의 이중 지불 시도로 돌아가 봅시다. 백예린에게 보내는 트랜잭션과 한로로에게 보내는 트랜잭션이 서로 다른 블록에 포함되려 합니다. 하지만 오직 하나의 블록만 체인에 추가됩니다. 더 많은 채굴 파워를 가진 정직한 채굴자들이 먼저 블록을 찾으면, 그 블록이 공식 블록이 됩니다. 다른 블록은 버려집니다.

3-4. 합의(Consensus) ✅

블록체인의 핵심은 합의입니다. 중앙 권력 없이 모두가 동일한 진실에 동의하는 것이죠.

모두가 동일한 규칙으로 🌀

모든 노드는 동일한 소스코드를 다운로드하고, 이해하고, 빌드해서 실행합니다. 이 코드에는 규칙이 명시되어 있습니다.

- 블록 크기는 얼마인가? - 블록 생성 시간은 얼마인가? - 보상은 얼마인가? - 트랜잭션이 유효하려면 무엇이 필요한가?

모두가 같은 규칙을 따르면, 모두가 같은 결과를 얻습니다. 이것이 코드가 곧 법이라는 블록체인의 철학입니다.

포크(Fork) 🌀

때로는 커뮤니티가 규칙을 변경하고 싶어 합니다. 이때 두 가지가 일어날 수 있습니다:

- 소프트 포크: 이전 버전과 호환되는 업그레이드 - 하드 포크: 이전 버전과 호환되지 않는 업그레이드. 체인이 두 개로 나뉩니다.

이더리움과 이더리움 클래식의 분리, 비트코인과 비트코인 캐시의 분리가 하드 포크의 유명한 예시입니다.


4. 블록체인 심화 🎯

4-1. 스마트 컨트랙트 / 대체 가능 토큰 / 대체 불가능 토큰 ✅

(판교에서 카공중인 부테린 형님)

스마트 컨트랙트 🌀

비트코인은 단순히 돈을 주고받는 데 사용됩니다. 하지만 이더리움의 창시자 비탈릭 부테린은 생각했습니다. "블록체인에 프로그램을 저장하면 어떨까?"

스마트 컨트랙트는 블록체인에 배포된 프로그램입니다. 조건이 충족되면 자동으로 실행됩니다. 중개자가 필요 없습니다.

예시: 자동 보험

solidity
contract FlightInsurance {
    function claim() public {
        if (flight.isDelayed() > 2hours) {
            transfer(passenger, 500 dollars);
        }
    }
}

비행기가 2시간 이상 지연되면 자동으로 보험금이 지급됩니다. 보험사에 전화할 필요도, 서류를 제출할 필요도 없습니다.

대체 가능 토큰(FT-ERC20) 🌀

누구나 자신만의 화폐를 만들 수 있습니다. 1 USDT는 다른 1 USDT와 완전히 동일합니다. 서로 교환 가능하죠.

ERC-20은 이더리움의 토큰 표준입니다. 이 표준을 따르면 모든 거래소와 지갑이 나의 토큰을 지원합니다.

solidity
contract MyToken {
    mapping(address => uint256) public balances;
    
    function transfer(address to, uint256 amount) public {
        balances[msg.sender] -= amount;
        balances[to] += amount;
    }
}

대체 불가능 토큰(NFT-ERC721) 🌀

각 토큰이 고유합니다. 하나의 NFT는 다른 NFT로 대체할 수 없습니다. 디지털 예술 작품, 게임 아이템, 부동산 증서 등에 사용됩니다.

solidity
contract MyNFT {
    mapping(uint256 => address) public owners;
    mapping(uint256 => string) public tokenURIs;
    
    function mint(address to, uint256 tokenId, string memory uri) public {
        owners[tokenId] = to;
        tokenURIs[tokenId] = uri;
    }
}

4-2. 레이어 1 / 레이어 2 ✅

블록체인의 트릴레마 🌀

비탈릭 부테린은 블록체인이 세 가지를 동시에 최적화할 수 없다고 말했습니다.

- Scalability: 네트워크가 많은 사용자와 트랜잭션을 처리할 수 있어야 함 - Security: 네트워크가 공격, 해킹으로부터 안전해야 함 - Decentralization: 네트워크에 많은 노드가 합의에 참여해야 함

비트코인과 이더리움은 보안과 탈중앙화를 선택했고, 확장성을 희생했습니다. 비트코인은 초당 약 7개 트랜잭션, 이더리움은 약 15개를 처리합니다. Visa는 초당 수천 개를 처리하죠.

레이어 분리: 레이어 1의 한계점을 인정하고 현실적인 우회안을 제시 🌀

레이어 1 (L1): block 메인 체인입니다. 비트코인, 이더리움, 솔라나 등이 레이어 1입니다. 모든 트랜잭션이 block에 기록되고, 최종 보안을 제공합니다.

레이어 2 (L2): batch 레이어 1의 한계를 인정하고 현실적인 우회책을 제시합니다. 아이디어는 간단합니다. 모든 트랜잭션을 메인 체인에 기록하지 말자.

작동 방식 🌀

- L1은 개별 거래(block)를 하나하나 기록 - L2는 여러 거래를 묶어(batch) 한 번에 L1에 제출

예시: Optimistic Rollup 1. 수천 개의 트랜잭션을 L2에서 처리 2. 처리 결과를 하나의 배치로 압축 3. 이 배치를 L1에 제출 4. L1은 최종 보안을 보장

이렇게 하면 L2는 빠르고 저렴하게 동작하면서도, L1의 보안을 상속받습니다.


5. 마치며 🎯

내일은 블록체인 지갑의 개념을 이해하고 실습을 진행하고자 합니다. 블록체인 시리즈는 약 30편의 글로 구성될 것으로 예상됩니다. 한 달간 약 30편의 글을 작성함과 동시에, 하나의 DApp과 두 개의 체인을 개발해 보려 합니다. 어려운 게 아니라 낯선 것이라는 마인드셋만 장착해도 해내지 못할 일이 없는 것 같습니다. 많이 해서 익숙해지면 그만이니까요. 파이팅입니다.