Segregated Witness(SegWit)란 무엇인가요?

Bitcoin SegWit 초보자 가이드 💭
Segregated Witness(SegWit)는 2017년 8월 1일 Bitcoin 소스 코드에 적용된 업그레이드입니다.
많은 사람들이 Bitcoin 블록체인에 대한 개선이라고 여겼음에도 불구하고, SegWit은 커뮤니티를 분열시키는 강력한 반대에 부딪혔습니다.
이 문제의 핵심은 채굴자의 수익성과 Bitcoin을 더 저렴하고 빠르게 사용하려는 네트워크 개발자 간의 상충되는 이해관계였습니다.
이러한 긴장은 커뮤니티 내부에 균열을 일으켰고, 결국 네트워크 최초의 사용자 활성화 소프트 포크와 적대적인 분할로 이어졌습니다. 이 분할은 Bitcoin Cash를 포함한 일련의 새로운 Bitcoin 포크 프로젝트를 탄생시켰습니다.
현재까지 SegWit은 Bitcoin 역사상 가장 논란이 많은 사건 중 하나로 남아 있습니다. 그러나 이는 프로토콜의 장기적인 생존 가능성을 위한 가장 중요한 업데이트 중 하나임이 입증되기도 했습니다.
매년 많은 Bitcoin 커뮤니티 구성원들은 8월 1일을 “Bitcoin 독립 기념일”로 기념합니다. 이 날은 기성 Bitcoin 채굴 회사들의 중앙 집중식 이익에 맞서 사람들의 의지가 승리한 날을 기념합니다.
이러한 각 사건이 어떻게 발생했는지 살펴보고 SegWit의 배경에 있는 역사를 파헤쳐 봅시다.
SegWit 이전의 Bitcoin ⏮️
SegWit 활성화 전에는 Bitcoin의 블록 용량이 수년 동안 변하지 않았습니다. 블록 용량은 주어진 블록 내에 기록될 수 있는 최대 트랜잭션 수를 의미합니다.
2009년 Bitcoin이 출시되었을 때, 창시자(들)인 Satoshi Nakamoto는 Bitcoin 블록의 크기에 대한 어떤 매개변수도 설정하지 않았습니다.
그러나 2010년, Nakamoto는 다른 Bitcoin 기여자들의 승인 없이 1메가바이트(MB) 블록 크기 제한을 비밀리에 추가했습니다.
많은 사람들은 Nakamoto가 네트워크에 영향을 미칠 수 있는 미래의 분산 서비스 거부(DDoS) 공격을 방지하기 위해 이 제한을 포함했다고 믿었습니다.
블록 용량에 대한 이러한 고정된 제한은 Bitcoin의 확장 잠재력을 여러 면에서 제한하는 원치 않는 결과를 초래했습니다.
낮은 처리량과 느린 트랜잭션 시간
Bitcoin이 채택한 비교적 작은 1MB 블록에는 제한된 수의 트랜잭션만 들어갈 수 있습니다. 이 작은 용량은 Bitcoin 네트워크가 초당 약 2–3개의 Bitcoin(BTC) 트랜잭션만 처리할 수 있음을 의미하며, 이는 초당 수만 개의 트랜잭션을 처리할 수 있는 기존 디지털 결제 네트워크와는 거리가 멉니다.
또한, Bitcoin 채굴 프로세스의 일부로 트랜잭션 블록이 유효하다고 간주되려면 6개의 확인을 받아야 합니다. 즉, 해당 블록이 최종 확정되기 전에 6개의 새로운 블록이 블록체인에 추가되어야 합니다. 평균 블록 시간이 10분인 점을 고려하면, Bitcoin 블록 확인에는 약 1시간이 걸립니다.
당시에는 소수의 “Cypherpunk” 암호학자들만이 Bitcoin을 알고 있었기 때문에 큰 문제는 아니었습니다. 그러나 Satoshi가 Bitcoin 백서에서 구상했던 것처럼 Bitcoin 네트워크가 글로벌 “개인 간 전자 현금 시스템”이 되려면 변화가 필요했습니다.
높은 수수료
Bitcoin의 낮은 처리량은 작은 블록 용량에 의해 제한되었으며, 이는 수수료 또한 오늘날보다 상대적으로 훨씬 높았다는 것을 의미했습니다.
이 문제를 쉽게 이해하는 방법이 있습니다. 연극을 본 후 사람들이 붐비는 곳에 서 있다고 상상해 보세요. 극장에서 나온 모든 사람이 동시에 택시를 타고 집에 가고 싶어 합니다. 택시가 충분히 많다면 모두가 쉽게 집에 갈 수 있을 것입니다. 그러나 택시가 몇 대밖에 없다면, 사람들은 운전자가 자신을 먼저 집에 데려다주도록 유도하기 위해 택시 운전자에게 더 높은 요금을 지불하려고 할 수 있습니다. 수요에 따라 택시 요금은 평소보다 훨씬 더 많이 오를 수 있습니다.
Bitcoin 수수료는 이러한 동일한 수요와 공급 원칙에 따라 작동합니다. 많은 사람들이 동시에 트랜잭션을 처리하기를 원한다면, 일부는 채굴자가 트랜잭션을 더 빨리 처리하도록 더 많은 수수료를 지불할 수 있습니다. Bitcoin 네트워크 사용량이 많은 기간에는 혼잡으로 인해 사용자 간의 경쟁이 발생하여 트랜잭션 수수료가 급격히 상승할 수 있습니다.
트랜잭션 가변성
Bitcoin 블록이 작동하는 방식의 또 다른 내재된 미묘한 차이는 트랜잭션 가변성(transaction malleability)으로 알려져 있었습니다. SegWit 이전에는 블록체인에서 충분한 확인을 받기 전에 트랜잭션 ID를 변경할 수 있었습니다.
특정 트랜잭션과 관련된 정보를 해시 함수를 통해 실행하면 트랜잭션 ID가 생성됩니다. 해시 함수에 대한 자세한 내용은 당사의 문서 암호화폐는 암호화를 어떻게 사용하나요?에서 확인할 수 있습니다.
하지만 간단히 말해, 이러한 트랜잭션 ID는 블록체인에서 트랜잭션을 식별하고 참조하는 데 사용되는 디지털 지문이라고 생각할 수 있습니다.
트랜잭션 ID를 변경하면 완전히 새로운 해시가 생성되어 때때로 블록체인 클라이언트 소프트웨어를 혼란스럽게 할 수 있습니다. 모든 노드는 블록체인과 상호 작용하고 데이터 검증과 같은 중요한 역할을 수행하기 위해 클라이언트 소프트웨어를 실행합니다.
Bitcoin 코드의 이러한 가변성 버그는 악의적인 공격의 문을 열었습니다. 트랜잭션 가변성 공격의 가장 악명 높은 사례 중 하나는 2014년 Mt. Gox 거래소 해킹으로, 역사상 가장 큰 Bitcoin 해킹으로 알려져 있습니다.
전문가들은 해커 또는 해커 그룹이 Mt. Gox 거래소의 Bitcoin 지갑을 비웠다고 보고했습니다. 그들은 부분적으로 인출 트랜잭션 ID를 변경하여 이를 수행했습니다.
트랜잭션 가변성 공격은 인출이 블록체인에서 확인되지 않는 것처럼 보이게 했지만, 실제로는 확인되고 있었습니다.
이 취약점은 다른 공격 벡터와 결합되어 해커가 거래소에서 840,000 BTC 이상을 빼낼 수 있도록 했습니다.
SegWit은 어떤 개선을 이루었나요? ⚙️
Bitcoin 기여자 Pieter Wuille는 2015년 Bitcoin 홍콩 행사에서 SegWit 업그레이드를 처음 발표했습니다.
그의 솔루션은 세 가지 측면에서 혁신적이었습니다. SegWit은 Bitcoin의 확장성을 개선하고, 가변성을 제거했으며, 노드가 새로운 트랜잭션 구조를 채택할 수 있도록 했습니다. 무엇보다도, 이는 네트워크를 하드 포크하지 않고도 구현될 수 있었습니다.
디지털 서명 및 트랜잭션 정보 분리
Wuille의 제안은 블록에서 "증인(witness)" 데이터를 "분리"하여 코인베이스 트랜잭션으로 이동함으로써 Bitcoin 블록 용량을 증가시켰습니다. 코인베이스 트랜잭션은 각 새 Bitcoin 블록 내의 첫 번째 트랜잭션입니다. 코인베이스 트랜잭션은 Bitcoin 채굴 프로세스에 대한 보상으로 새로 발행된 암호화폐를 유통시키는 역할을 합니다.
Bitcoin의 암호화 기반 작업 증명 경쟁에서 성공한 채굴자들은 새로 발행된 이 토큰을 "블록 보상"으로 얻습니다.
ScriptSig 또는 잠금 해제 스크립트(Unlocking Script)로도 알려진 증인 데이터는 전송된 Bitcoin을 잠금 해제하는 데 필요한 디지털 서명 및 공개 키 정보를 포함합니다. SegWit 업그레이드는 트랜잭션의 ScriptSig 부분에 대해 별도의 "증인 필드"를 도입했습니다.
트랜잭션 입력 필드와 별도로 디지털 서명 정보를 처리함으로써 각 블록에 더 많은 트랜잭션을 담을 수 있는 공간이 생겼습니다.
블록당 더 많은 트랜잭션은 더 높은 트랜잭션 처리량 기능을 의미합니다. 따라서 Bitcoin은 초당 2-3개의 트랜잭션 대신 초당 7-10개의 SegWit 트랜잭션을 처리할 수 있습니다. 용량 증가는 Bitcoin 블록체인이 더 많은 양의 트랜잭션을 처리할 수 있으므로 수수료 절감도 의미합니다.
분리에도 불구하고, 노드는 여전히 트랜잭션 데이터와 증인 데이터를 온체인에서 모두 처리한다는 점에 유의하는 것이 중요합니다. 사이드체인이나 Layer 2 프로토콜은 사용되지 않습니다.
블록 가중치
SegWit 이전에는 채굴자들이 Bitcoin 블록을 크기(바이트 단위)로 측정했습니다. 이 시스템은 블록에 증인 데이터와 트랜잭션 데이터가 모두 포함될 때는 잘 작동했지만, 분리되었을 때는 문제가 발생했습니다.
이를 극복하기 위해 업그레이드는 블록 크기를 관리하기 위해 블록 가중치(block weight)라는 측정 기준을 도입했습니다.
이 개념에 따라 각 1메가바이트 블록은 4,000,000 가중치 단위(WU)로 구성됩니다. 각 트랜잭션에는 다음 공식에 따라 가중치가 부여됩니다.
바이트 단위의 기본 트랜잭션 크기(증인 데이터 없음) * 3 + 바이트 단위의 총 트랜잭션 크기.
계산에서 증인 필드 데이터를 제거함으로써 SegWit 트랜잭션은 훨씬 낮은 가중치를 가집니다. 반면에 비 SegWit 트랜잭션은 여전히 증인 데이터를 포함합니다. 이는 비 SegWit 트랜잭션이 항상 SegWit 트랜잭션보다 4배 더 무겁다는 것을 의미합니다.
이 개념은 블록이 거의 전적으로 증인 데이터로 구성될 경우 Bitcoin 블록의 크기를 이론적으로 1MB에서 4MB로 증가시킵니다. 그러나 실제로는 불가능합니다.
가중 시스템의 주요 이점은 채굴자들이 주로 SegWit 트랜잭션을 포함하는 블록을 처리하도록 유도한다는 것입니다. SegWit 트랜잭션이 레거시 블록과 동일한 수수료를 부과한다고 가정하면, 채굴자는 블록당 훨씬 더 많은 SegWit 트랜잭션을 처리할 수 있습니다. 블록당 더 많은 트랜잭션을 처리할수록 더 많은 수수료를 얻습니다.
양측 모두에게 윈윈입니다. 그렇게 생각할 수도 있겠죠.
더 이상 트랜잭션 가변성 문제 없음
SegWit 구조에서는 해시된 트랜잭션 ID에 증인 필드 정보가 아닌 트랜잭션 정보만 포함됩니다.
이 변경은 이전에 가변성 공격을 가능하게 했던 Bitcoin 트랜잭션의 수정 가능한 구성 요소를 제거합니다.
그 결과, Bitcoin Lightning Network와 같은 보조 확장 솔루션이 가능해졌습니다.
SegWit이 논란이 된 이유는 무엇인가요? 🤔
많은 개발 커뮤니티 구성원들은 SegWit이 Bitcoin의 확장성 문제를 해결하는 데 충분하지 않다고 느꼈습니다.
SegWit 활성화에 대한 주요 반대 의견은 다음과 같습니다.
- Bitcoin의 증가된 처리량인 초당 7-10개의 트랜잭션은 분산형 글로벌 결제 시스템에는 여전히 충분히 높지 않습니다.
- 수수료는 상대적으로 높게 유지되어 소액 거래와 같은 것들을 재정적으로 비현실적으로 만듭니다.
- 채굴자들은 여전히 레거시 트랜잭션 블록을 처리할 수 있으며, 이는 가변성이 여전히 위협이 된다는 것을 의미합니다.
- 나중에 SegWit이 Bitmain의 ASICBOOST 메커니즘(채굴 장비 효율성을 크게 높이는 데 사용되는 익스플로잇)을 무효화한다는 사실이 밝혀졌습니다.
Wuille의 제안 후 약 1년 뒤, 그와 Eric Lombrozo를 포함한 다른 Bitcoin Core 개발자들은 다가오는 Bitcoin Core 0.13.1 업데이트에서 코드를 라이브로 전환할 준비를 마쳤습니다. SegWit을 활성화하기 위한 유일한 남은 단계는 채굴자들이 새로운 SegWit 블록을 처리하기 시작하는 것이었습니다.
구현을 확고히 하기 위해, 모든 Bitcoin 채굴자의 95% 이상이 시작 후 2주 이내에 SegWit에 대한 지지를 보여야 했습니다. 이는 당시 상황을 고려할 때 큰 장애물이었습니다.
사용자 활성화 소프트 포크
말할 필요도 없이, Bitmain과 같은 대형 채굴 회사들은 제안된 변경 사항에 여전히 불만을 품고 SegWit 활성화를 지지하기를 거부했습니다.
2017년 초, “Shaolinfry”라는 가명의 개발자가 온라인 Bitcoin 개발자 게시물에서 Bitcoin 노드가 소프트 포크를 강제할 가능성을 제기했습니다.
사용자 활성화 소프트 포크는 Bitcoin 네트워크에서 이전에 시도된 적이 없었지만, 이는 채굴자들의 약 51% 지지로 SegWit을 추진할 수 있게 할 것이었습니다. 새로운 블록을 지원하기를 거부하는 사람들은 노드에 의해 블록이 거부될 위험이 있었습니다. 이 해결책은 위험이 없는 것은 아니었습니다. SegWit이 채굴자들로부터 충분한 지지를 받지 못하면, 그 결과는 필연적으로 체인 분할로 이어질 것이었습니다.
SegWit에 반대하는 사람들은 대신 다른 SegWit 2X 하드 포크 업그레이드를 제안했습니다. 이는 SegWit을 구현하고 Bitcoin의 블록 크기를 2MB로 늘리는 것이었습니다.
이전 업그레이드와 달리, SegWit 2X는 이전 버전의 Bitcoin 클라이언트와 역호환되지 않을 것이었습니다. 이러한 변경은 노드가 네트워크에서 계속 작동하려면 소프트웨어를 업데이트해야 한다는 것을 의미했습니다.
SegWit 및 New York Agreement 🗽
업계 최고 기업들은 Consensus 2017에서 만나 "New York Agreement"라고 불리는 양해각서에 공동으로 서명했습니다. 이 문서는 여름에 SegWit을 활성화하고 11월까지 Bitcoin의 블록 크기를 2MB로 늘릴 계획을 명시했습니다.
11월을 앞두고 Shaolinfry는 두 가지 Bitcoin 개선 제안(BIP); BIP148과 BIP149를 작성했습니다. 전자는 강력하고 빠른 해결책을 제시했습니다. 즉, SegWit 블록에 대한 지원을 알리지 않으면 노드가 블록을 거부할 것이라는 내용이었습니다. 후자는 채굴자들이 온보딩할 수 있는 더 긴 시간적 여유를 제공하여 다음 해 7월을 활성화 마감일로 설정했습니다.
날짜가 다가오자 Bitmain Warranty 엔지니어인 James Hillard는 새로운 BIP인 BIP91을 제안했습니다. 그의 해결책은 SegWit 2X와 BIP148을 서로 호환되도록 하는 것이었습니다. 두 개의 경쟁적인 SegWit 업데이트로 인해 체인 분할의 위험을 감수하는 대신, 둘 다 호환되도록 만들 수 있지 않을까요?
8월 1일, 충분한 채굴 지원으로 SegWit의 활성화가 확고해졌습니다. 그러나 New York Agreement의 두 번째 단계는 동일한 지지를 받지 못했습니다.
Bitcoin의 블록 크기를 2MB로 늘리는 데 실패한 결과, Bitcoin 블록체인에서 포크된 새로운 프로젝트인 Bitcoin Cash(BCH)가 형성되었습니다.
Bitcoin 독립 기념일의 중요성
SegWit의 도입과 블록 크기 증가를 거부하기로 한 커뮤니티의 결정은 더 넓은 Bitcoin 커뮤니티에 있어 중요한 순간을 의미했습니다.
SegWit은 Bitcoin 블록체인 변경에 있어 합의의 중요성과 Bitcoin이 제공하는 탈중앙화된 권력의 정도를 보여주었습니다.
어떤 개인도 네트워크를 장악하고 자신의 제안을 관철시킬 수 없었습니다.
대신, 커뮤니티는 논의하고, 반복하며, 단일 개인의 지시가 아닌 집단으로서 합의에 도달하는 긴 과정을 계속했습니다.
Bitcoin 구매 시작하기
이제 SegWit에 대해 모두 배우셨으니, 암호화폐 여정을 계속하고 Bitcoin을 구매할 준비가 되셨나요?
Bitcoin(BTC) 구매 방법에 대한 자세한 내용은 Kraken Learn Center 가이드를 확인하고 지금 바로 Kraken 계정에 가입하세요.