[비트코인 트리 6-1] 블록의 저장공간과 스케일링(세그윗)

in #kr7 years ago (edited)

대문1.jpg

크리스마스 연휴가 끝나고 연말이 다가오네요.ㅎ 하루 늦은 월요병에 고생하셨을텐데 다행히 1월1일도 월요일이라 또 연휴가 찾아옵니다. 조금은 힘이 되시나요? ㅎㅎ
전 연말에는 또 뭐하나..고민만 되네요.ㅋㅋ
쓸데없는 생각 그만하고 시작해볼까요? 어차피 술먹겠죠 뭐.ㅎ

지난 글에서 Unconfirmed Transaction에 관해서 말씀드렸습니다.
블록에 담기지 못해, 승인되지 못하고 있는 거래가 늘고 그에 따라 수수료가 높아졌었습니다.
현재 조금 낮아졌다고는 하지만 안정적인 상황이라고는 생각이 안드네요.
현재 173376건으로 어제 보다는 조금 더 늘었습니다.

이렇게 미승인 거래수가 늘어나는 이유는 거래의 수는 늘어나는데 블록의 저장공간은 한정되어 있기 때문입니다.
지니의 요술램프가 아닌 이상 크기가 정해져있으면 그 안에 담을 수 있는 양도 정해져있기 마련이죠. 최신 블록을 한번 살펴보겠습니다.

블록 저장공간.jpg
(출처 : 블록체인 인포)
한번 항목별로 보시면서 저게 뭐였더라 복습하시는 것도 좋겠네요. ^^

최근 생성된 #501072 블록에는 2159 건의 거래가 담겨 있고 크기는 1081.846kB입니다. 블록의 크기는 최대 1MB 정도라고 알려져 있으니 거의 꽉 채워서 담았네요. 10분에 하나씩 열심히 블록을 생성하고 최대 1초에 7건 정도(Transaction per Second)로 열심히 일하는데 다 못 담는 경우가 생기면 어떻게 해야할까요? 이 문제는 비트코인 뿐만 아니라 전반적인 블록체인 기술의 이슈인 스케일링에 관한 것입니다.

저흰 비트코인을 공부하고 있으니 우선 비트코인만 집중해보죠.
이런 저장공간에 대한 해결책으로 가장 쉽게 생각해 볼 수 있는 것이 상자, 즉 블록의 크기를 키우는 것입니다. 당연히 상자가 크면 많이 넣을 수 있으니까요. 근데 상자를 키우는 것은 장단점이 있습니다.

상자가 작으면 많이 넣을 수는 없지만 옮길 때 가벼워서 허리 다칠 일이 없습니다. 물론 몇개씩 옮길 수도 있겠죠.ㅎㅎ 상자를 키우면? 많이는 들어가지만 무거워서 하나 들기도 힘든 경우가 생기죠. 옮기는데 시간도 많이 걸리구요. 블록도 마찬가지입니다. 블록의 크기가 커져서 많은 거래가 들어가고 무거워지면 당연히 이 블록을 전파하는 시간이 오래 걸립니다. 다음 생성될 블록은 이전 블록이 어디선가 생성되었다는 것을 알고 그 블록의 해시값을 넣어야하는데 이런 전파지연은 다음 블록생성에도 악영향을 끼칠 수 밖에 없습니다. 정확한 블록의 상태에 대한 전파가 늦어지니 분기도 더 많이 발생하고 부모블록보다 먼저 도착해 고아가 되 버리는 자식블록도 더 생기겠죠.

크기를 키우는 것의 또다른 문제는, 비트코인 블록체인은 P2P 네트워크의 노드를 기반으로 하고 있어 풀노드는 모든 블록체인의 기록을 가지고 있어야한다는 것입니다. 블록의 크기가 2배로 늘면? 당연히 노드가 가져야할 전체 용량이 2배로 늘게 되고 앞으로 계속 생성될 블럭을 생각하면 풀노드를 유지하려는 유저의 수를 줄게 만들 것입니다. 갑자기 집에 큰 짐들이 들어오게 되면 전 집을 옮기거나 다른 짐들을 버려야하겠죠. 채굴을 하지 않는 이상 풀노드를 굴린다고 뭐 떨어지는 것도 없는데 컴퓨터를 바꿔야한다면 저같아도 고민을 하게 될 것입니다.

이 블록의 크기를 조정하는 문제는 또한 하드포크라는 체인의 분리를 가져옵니다. 1MB로 유지되던 블록이 갑자기 2MB가 되는 거니 섞이지 못하고 예전 블록과 분리되어 다른 체인을 만들어나가는 거죠.(아직 하드포크에 대해서는 다루지 않았으니 쉽게 이전 블록체인과는 같이 쓸 수 없는 다른 블록체인과 코인이 생긴다는 정도로 이해하시면 됩니다.)

물론 단점만 있는 것은 아닙니다. 블록생성이 10분으로 정해져있으니 한번에 더 많은 거래를 처리할 수 있게 되고 그렇게 됨으로써 수수료도 낮아질 수 있습니다. 지금 1초에 7건 정도라는 TPS 문제도 어느 정도 해결될 수 있겠죠.

다른 해결책은 무엇이 있을까요?
블록의 크기를 건드리지 않는다면 블록에 들어가는 것들 중 쓸데없는 것은 버리거나 혹은 테트리스를 하듯이 비는 공간이 없게 활용하는 것입니다. 이 해결책으로 나온 것이 세그윗(Segregated Witness)입니다. 해석하면 분리된 증인 정도가 되겠네요.

거래 방식에 대한 지난글에서 저흰 거래 내역에 입력값과 출력값이 들어간다는 것을 알았습니다. 그리고 입력값에는 잠금해제를 위한 전자서명(서명+공개키)을 포함하고 있는 해제스크립트가 들어가죠. 세그윗은 이 전자서명이 거래내역의 구조에서 너무 많은 저장공간을 차지한다는 문제의식에서 출발합니다.

전자서명.jpg

데이터 순서가 아니라 데이터가 차지하는 용량으로 표현하면 거래내역은 이런 구조라는 거죠. 여기서 아예 저 전자서명을 저장공간의 여유가 있는 딴 곳으로 옮기고 밑에 칸에 들어있는 거래내역을 구성하는 다른 요소들로 저 공간을 채운다면 더 많은 거래 내역이 한 블록에 들어갈 수 있을 것입니다.
이를 위해서 찾아낸 곳이 코인베이스 거래(생성거래)가 기록되는 공간입니다. 코인베이스 거래는 블록 생성에 대한 보상으로 만들어지는 거래이고 입력값이 없습니다. 이 코인베이스 거래에 비어있는 데이터 영역(이를 Witness라고 부름)으로 각 거래의 전자서명을 분리시켜 더 많은 거래내역을 담는 방법이 바로 세그윗(Segregated Witness)입니다.
전자서명이 거래내역의 75%정도의 용량을 차지한다고 하니 세그윗을 실행하면 상당히 많은 거래처리량 증가 효과가 있을 것입니다.(이건 1.7배 에서 사실상 4배라는 이야기까지 다양한 의견이 있네요.)
세그윗은 이런 처리 용량의 증가 말고도 거래 가변성문제(Transaction Malleability)를 해결해준다고도 알려져있습니다. 거래 가변성문제(Transaction Malleability)는 문제는 중요하긴 한데 우선 저장공간에 대해 쓰고 있으므로 @easyblockchain님의 글
@coinpressokr 님의 [비트코인 시리즈 칼럼] (2) 첫 번째 약점, 거래의 변동성으로 대신합니다.

제가 생각한 마지막 방법은 블록을 열라 빨리 찍어내는 겁니다. 스팀의 블럭 생성 시간은 3초죠. 10분이라는 시간을 줄이면 좀 나아지지 않을까요? 근데 이건 비트코인의 근본을 흔드는 일이 되겠죠?ㅎㅎ 그냥 제 생각입니다.

어떤 방법이든 장단점이 있는 만큼 우선 이 저장공간의 부족문제를 해결하기 위해 그나마 최선의 안을 시행시키는 게 바람직해 보입니다. 이를테면 세그윗 같은 것이겠죠. 근데 블록체인이라는 특성상 이것을 적용하기도 쉽지 않습니다.
바로 결정기관이 없다는 문제죠. 비트코인 블록체인에서 어떤 문제에 대한 합의나 결정은 작업 증명 합의 알고리즘(POW)라는 형태를 가지고 있습니다. 이 POW는 단순히 채굴에 관한 것이 아니라 중요한 업데이트나 합의가 필요한 사항에서 채굴자들이 작업증명이란 방식으로 얼마나 참여하는가로 합의 여부가 결정된다는 것입니다. 세그윗도 채굴자들의 몇 퍼센트 이상이 세그윗을 지원하는 방식의 블록을 만들어야 적용이 된다는 말이죠.
그럼 당연히 채굴자들의 파워가 세지겠죠? 지금같이 중국에서 채굴풀의 70%이상을 가진다면? 그리고 문제를 해결하는 방식이 채굴자들의 이익과 반한다면?
비트코인의 문제점에서 왜 꼭 채굴자 이야기들이 나오는 지 감이 오시나요?ㅎㅎ

이 스케일링에 관한 문제는 자세히 다룰 수 있는 내용도 많습니다. 하지만 어려워지는 걸 막고자 깊이 있게는 쓰지 않았습니다.(쓸 능력도 사실...) 조금 더 들어가면 하드포크와 새로운 포크 코인들(비트코인 캐시, 비트코인 골드 등), 그리고 채굴자들의 채산성과 그에 대한 입장, 중국 채굴진영과 비트코인 코어진영 간의 오랜 싸움 등 어마어마한 이슈들이 많이 있습니다. 스팀잇에서 스케일링이나 세그윗만 쳐보셔도 좋은 글들이 많이 나오구요. 저두 이해가 안 될만큼 좀 어렵긴 하지만요. 이런 내용들은 제 비트코인 트리가 좀 더 크면 다루겠습니다.

사실 개인키, 공개키 메커니즘이나 비트코인 스크립트에 관해서 다뤄야하는데, 그럼 또 "그래서? 어쩌라구?" 가 나올 거 같아서 비교할 수 있는 대상이 있으면 좋겠다는 생각이 많이 듭니다. 그래야 뭐가 더 좋고 나쁘고를 알 수 있을 거 같아서요. 글을 어떻게 진행해 나가야할 지 고민을 해봐야겠네요.^^

긴 글 읽어주셔서 감사합니다. 지루하지 않게 그림을 그려서라도 좀 넣고 싶은데 아직 잘 안되네요.ㅎ 열심히 노력해보겠습니다. 밑에 참조 글을 보시면 더 자세히 아실 수 있는 내용이 많을 것이라고 생각됩니다.
혹시 제 글에서 틀린 점은 꼭 지적해주세요~~ 같이 알아가요.ㅎㅎ

비트코인 백서부터 시작합니다
[비트코인트리1-1] 블록이란 무엇인가
비트코인 백서부터 시작합니다(2)
비트코인 백서부터 시작합니다(3)
비트코인 백서부터 시작합니다(4)
[비트코인트리4-1] 블록의 생성에 대해 알아봅시다
비트코인 백서부터 시작합니다(5)
[비트코인트리5-1] 거래수수료와 Unconfirmed Transaction
비트코인 백서부터 시작합니다(6)
비트코인 백서부터 시작합니다(7)
[비트코인트리7-1] 비트코인의 특이한 거래 방식
비트코인 백서부터 시작합니다(8)

참조 :
@easyblockchain 님의 글 [쉽게 설명하는 Blockchain, Segregated Witness란 뭔가요? -1 확장성(Scalability)
@maa 님의 글 세그윗
@twinbraid 님의 글 세그윗(Segwit)에 대해서 알아보자
@coinpressokr 님의 [비트코인 시리즈 칼럼] (2) 첫 번째 약점, 거래의 변동성
leejungmin님의 글 [비트코인과 스케일링 논쟁]
http://www.leejungmin.org/post/2017/07/28/bitcoin-scaling-debate/ (출처를 분명히 해야할 거 같아서 주소로 링크합니다.)
브런치에 한승환님의 글 비트코인 확장성과 경제학(블록체인 중급) - 블록크기 논쟁의 핵심-

Sort:  

글 하나 하나 천천히 살펴봐야겠어요. 더 자세히 알 수 있을 것 같아요.

댓글 감사합니다~~ 쉽게 써볼라고 하는데 제가 이해가 부족한지 잘 안되네요.ㅎㅎ
조금이라도 도움이 되시길 바랍니다.^^

예전에 세그윗2x?인가 진행한다고했다가 취소된적 있던걸로 알고있는데 그게 이런 얘기였나보네요! 비트코인 거래 속도도 자꾸 느려지고 수수료도 비싸지고 해결이 필요하긴 할것같아요. 속도와 수수료탓에 비트코인 가격이 오르지못한다면 채굴자들도 이동을 하지않을까요? 그럼에도 불구하고 대장 자리를 유지하면 바꿀생각 안할것같아요 ㅎㅎ

비트코인은 무언가 큰 해결책이 나오기 전까지 원래 취지였던 화폐로서의 기능을 수행하긴 힘들겠죠. 그렇게 안되려고 개발진들이 노력하고 있지 않을까요? 지금은 그냥 금같은 가치저장 수단으로 인식되는 거 같아요.ㅎ 채굴자들은 어차피 돈 벌라고 하는 거니 그게 무엇이 되었든 돈이 더 되는 곳으로 달려들겠죠.ㅎㅎ
댓글 감사합니다~~ 우리 대장은 안 무너졌으면 좋겠네요.ㅎㅎ

자세하고 상세한 설명 감사드립니다 :D 가상화폐에 관심이 있고 투자를 하지만 막상 그것이 무엇인지도 모르고 있던 스스로에게 부끄럽군요. 앞서 써주신 글도 차분히 다시 읽어보면서 이해해보겠습니다. 정말 양질의 글 감사드립니다! :D

양질의 글은 아니지만 도움이 되셨길 바래요~ 제가 받은 도움을 조금이라도 갚을 수 있길.ㅎㅎ
지금처럼 스팀잇 꾸준히 같이 즐겨봐요 ^^

Coin Marketplace

STEEM 0.19
TRX 0.15
JST 0.029
BTC 63407.49
ETH 2645.11
USDT 1.00
SBD 2.81