새해는 상콤하게 맞이하고 계신지요? ㅎㅎ 2018년의 첫 글이네요.
아침부터 스팀이 달려주셔서 기분좋은 새해 출발이 되는 거 같습니다.(스파업을 향한 꿈은 저 멀리로.. 연말에 술먹고 질렀어야하는데 말이죠.ㅋㅋ)
오늘 설명드릴 스크립트에 관한 글은 컴퓨터 언어를 공부하자는 글이 아닙니다.
천상 문과생이라 프로그래밍 언어에 대한 기반 지식도 없을 뿐더러, 아직 스크립트 언어 자체에 대한 공부도 안 되있거든요.
단지 스크립트 언어라는 게 어떤 건지 간단히라도 알고 왜 비트코인이 이 스크립트 언어를 썼는지 정도만 알고자 합니다.
앞으로 공부하게 될 이더리움이 이 스크립트 언어의 튜링 불완정성(쉽게 이 언어로 모든 것을 구현할 수 없다 란 뜻입니다)이란 문제의식에서 출발했다고 알고 있습니다. 그래서 조금이라도 알고 이더리움으로 넘어가려고 합니다.
스크립트라고 불리는 비트코인 거래 스크립트 언어는 포스 언어처럼 구성되고 역폴란드식 표기법(reverse-polish notation)을 따르는 스택 기반의 실행 언어다.
(인용 : 책 [비트코인, 블록체인과 금융의 혁신](안드레아스 M, 안토노풀로스)
위 책에도 이렇게 써놓고 이 말이 횡설수설하는 거처럼 들릴지도 모른다고 합니다.
스크립트 언어 자체에 대한 설명이나 포스 언어는 무엇이고 역폴란드식 표기법은 무엇인지 자세히 알면 좋겠지만 그건 우리 위키 형님에게 맡기기로 하고 쉽게만 이해하겠습니다.
스크립트 언어는 프로그래밍 언어의 세계에서 원로? 조상? 같은 존재라고 합니다.
1960년대에 주로 쓰인 언어로 사용 범위가 한정되어 있어 매우 단순한 언어라고 하네요.
포스 언어는 쉽게 덧셈을 하는 방법을 가로에서 세로로 바꾸어 쌓는 것(스택 기반)입니다.
예를 들면, 일반적으로 저희가 하는 덧셈은
이렇게 가로로 써 가지만 포스 언어는
이렇게 밑에서부터 수식을 하나하나 쌓아가는 것입니다. 이것이 스택기반이라고 하는 포스(forth)언어이고 저희가 아는 일반적인 순서가 아니라 2번째 그럼처럼 연산기호를 숫자 뒤에 붙이는 것이 역폴란식 표기법이라고 합니다.
스크립트 언어가 어떻게 작동하는지는 @easyblockchain님의 글을 꼭 보시기 바랍니다. 저같은 초보에게 쉽다고는 할 수 없지만 제가 이 글보다 더 쉽게 설명할 자신이 없네요.ㅎ
쉽게 설명하는 블록체인, 스크립트란 뭔가요?(비트코인의 언어)
위에 링크글을 읽으셨다는 전제로 글을 써나가겠습니다.
비트코인의 거래 방식에서 잠금스크립트와 해제스크립트에 대한 설명을 해드린 적이 있습니다. UTXO를 기본 단위로 거래하며 출력값에 잠금 스크립트가, 입력값에 해제스크립가 들어갑니다. 출력값은 잠금 스크립트로 잠겨져 있으며 받는 사람은 자신의 서명이 들어간 해제 스크립트로 이 잠금장치를 풀어야 받은 돈(새로 생긴 UTXO)를 사용할 수 있게 됩니다. 저희가 이제까지 공부한 내용 중에 이 두 가지 장치가 스크립트라는 언어로 쓰여있습니다.
그럼 비트코인은 왜 이 오래된 언어인 스크립트를 사용했을까요?
우선 딱 드는 생각은 간단합니다. 위에 예를 너무 간단한 걸 들어서 더 그럴 수도 있겠지만 계산을 하는데 문제가 없다면 작은 전자계산기와 같이 간단하고 쉬운 게 최고겠죠. 덧셈, 뺄셈 하는데 슈퍼컴퓨터가 필요없는 것처럼 말이죠. 적절한 수식을 만들고 그걸 풀기 위한 최소한의 장치만 있다면 그게 가장 효율적일 것입니다.
심플함이 장점이 되는 이유는 비트코인이 화폐이기 때문입니다. 화폐의 본래 기능은 지불수단입니다. 현재 비트코인이 지불수단이 아닌 가치저장 쪽으로 많이 생각되고 있긴 하지만 출발은 지불수단인 화폐의 기능이었죠. 우리가 일상생활에서 화폐를 쓰는 경우는 간단합니다. 계산하고 주고 받고. 스크립트 언어는 그 기본적인 사용방식에 맞는 가장 쉽고 효율적인 수단이 됩니다. 프로그래밍으로 구현할 수 있는 것은 많겠지만 굳이 필요가 없다면 그런 기능을 지원하는 프로그램 언어도 필요없어지는 거죠. 범위가 한정된 단순한 언어로 최소한의 처리과정만 거치게 되면 실행과정에서 제 3자가 공격할 수 있는 거리도 줄어듭니다. 보안에서도 중요한 장점이 되죠.
비트코인의 스크립트 언어는 쉽게 예시를 든 덧셈, 뺄셈 이외에도 많은 연산 기능이 있습니다. 다양한 형태의 거래를 성립시킬 수 있다는 것이죠. 하지만 의도적으로 빼놓은 기능도 있습니다. 대표적으로 거론되는 게 자동반복(무한 루프)입니다. 이것이 비트코인 스크립트 언어가 튜링 완전하지 않다고 하는 이유 중 하나입니다. 무한 루프는 한마디로 프로그램에서 동일한 작업을 계속해서 하는 것입니다. 비트코인 스크립트 언어는 계속되는 동일한 작업으로 과부하가 걸리는 것(논리 폭탄)을 막기위해 의도적으로 루프 기능을 제한했습니다. 모든 거래는 비트코인 네트워크의 모든 폴 노드들에 의해 검증되는데 거래 안에 저런 논리폭탄이 들어있다면 네트워크가 제대로 굴러갈 수 없겠죠. 이런 형태의 공격을 방지하기 위해 만든 제한입니다.
또한 무상태형 검증이라고 해서 어떤 스크립트 언어를 실행하는데 필요한 모든 정보는 해당 스크립트 내에 담겨 있습니다. 그 스크립트를 실행하기 위해 가지고 있어야 할 조건 같은 것도 없고 스크립트 실행 후 결과를 바꿀 변수도 없다는 것이죠. 그래서 이 스크립트는 어떤 시스템에서든 동일한 방식으로 실행되고 동일한 결과를 가져다 줍니다. 모든 풀노드가 동일한 거래 장부를 가지고 있는 비트코인 블록체인에서 '하나의 유효한 거래는 다른 노드들에게도 유효한 거래가 된다'는 결과에 대한 예측 가능성은 스크립트 언어의 핵심 장점입니다.
비트코인 블록체인은 위에서 말한 바와 같이 화폐기능에 초점을 맞추었기 때문에 화폐의 용도에 맞는 블록체인 메커니즘을 설계했습니다. 하지만 스크립트 언어는 블록체인 위에서 다양한 기능을 사용하기엔 제한적이고 프로그래밍으로 모든 것을 구현하지 못하는(튜링 불완전) 한계가 분명히 있습니다.
현재 나오는 다른 코인들이나 플랫폼을 보면 화려하죠. 블록체인 위에 어플리케이션이 올라가고 사물인터넷이 접목되고 빅데이트를 통한 예측시장이 나오고. 이런 기능들을 다 수행하기에 스크립트 언어는 너무 제한적입니다.
그래서 나온 것이 이더리움이라는 플랫폼과 스마트 컨트랙트입니다. 블록체인 위에서 화폐만 사용할 것이 아니라 구글 플레이처럼 다양한 어플리케이션 을 구현해보자. 분산화 네트워크(Decentralized Network)인 블록체인 위에서 사용되는 어플리케이션(Application). 이걸 바로 DAPP(Decentralized Application)라고 부릅니다.
비트코인 스크립트는 아마 위에 언급한 내용 말고도 다른 장점들이 있을 거라고 생각합니다. 그런 장점들을 알기 위해서라도 이제 이더리움을 공부해야겠습니다. 비트코인의 단점들을 해결하자고 나온 것이니만큼 이더리움을 공부하면서 서로를 비교해가는 게 많은 도움이 될 거라고 생각합니다. 이더리움 백서는 생각만 해도...우어...
어제 글에서 말씀드렸듯이 비트코인 블록체인에 관한 글도 이더리움 공부하다가 더 알아봐야겠다는 생각이 들면 계속 추가할 것입니다. 둘의 비교에 관한 챕터도 만들까 고민중이구요.(생각만 무성..ㅎㅎ) 블록체인이라 함부로 적으면 안되는데 흐음...
긴 글 읽어주셔서 감사합니다~ 혹시나 제가 모르는 다른 내용을 아시거나 틀린 내용있으면 꼭 댓글로 남겨주세요!
서로 이야기하면서 같이 공부했으면 합니다.
비트코인 백서부터 시작합니다
[비트코인트리1-1] 블록이란 무엇인가
비트코인 백서부터 시작합니다(2)
비트코인 백서부터 시작합니다(3)
[비트코인트리3-1] 어렵게만 보이는 암호화와 해시함수
비트코인 백서부터 시작합니다(4)
[비트코인트리4-1] 블록의 생성에 대해 알아봅시다
비트코인 백서부터 시작합니다(5)
[비트코인트리5-1] 거래수수료와 Unconfirmed Transaction
[비트코인트리5-1-1] 거래수수료 인센티브와 1컨펌 처리(생각의 확장)
비트코인 백서부터 시작합니다(6)
[비트코인 트리 6-1] 블록의 저장공간과 스케일링(세그윗)
비트코인 백서부터 시작합니다(7)
[비트코인트리7-1] 비트코인의 특이한 거래 방식
비트코인 백서부터 시작합니다(8)
참조 :
책 [비트코인, 블록체인과 금융의 혁신](안드레아스 M, 안토노풀로스)
@Maa 님의 글 스케일링 전쟁(Scailing War)(1) - Bitocin Core: 비트코인 코어
@easyblockchain 님의 글 쉽게 설명하는 블록체인, 스크립트란 뭔가요?(비트코인의 언어)
Ourselves 캠페인
셀프보팅을 하지 않고 글을 올리시고
ourselves 테그를 달아 주시면
많은 분들이 관심 가져 줄꺼에요