어제의 글을 다시 복기해보자면 블록체인은 혼자 쓰는 장부가 아니라, 전 세계 여러 노드가 함께 유지하는 장부다. 그래서 누가 만든 블록을 인정할지 그리고 여러 블록이 동시에 생겼을 때 어떤 블록을 선택할지 정하는 규칙이 필요하다. 그 규칙이 바로 합의 알고리즘이었고 오늘은 그 합의 알고리즘을 이해할 때 중요한 두 가지 개념인 Safety와 Liveness를 정리해보려고 한다.
Safety란?

Safety는 쉽게 말해, 정상적인 노드들이 서로 같은 결과를 바라보는 성질이다. 블록체인에서는 여러 노드가 같은 장부를 가지고 있어야 한다. 그런데 어떤 노드는 A 블록을 정답이라고 보고, 다른 노드는 B 블록을 정답이라고 보면 문제가 생긴다.
각자 다른 장부를 보기 때문에 하나의 블록체인이라고 보기 어렵다. 그래서 Safety가 보장된다는 것은 이런 의미다. 정상적으로 작동하는 노드들은 서로 충돌하는 결과에 합의하지 않는다.
즉, 포크가 발생하지 않거나, 적어도 최종 확정된 상태에서는 하나의 블록만 정답으로 인정되어야 한다.
Safety가 깨진다면?
Safety가 깨지면 위에서 말한 가장 대표적으로 포크가 발생할 수 있다. 포크는 체인이 두 갈래 이상으로 갈라지는 상황이다.
- 예를 들어 서울의 채굴자와 뉴욕의 채굴자가 거의 동시에 새로운 블록을 만들었다.
근데 네트워크 지연 때문에 어떤 노드는 서울 채굴자의 블록을 먼저 받고, 다른 노드는 뉴욕 채굴자의 블록을 먼저 받을 수 있다. - 그러면 그 잠깐 동안 체인이 두 갈래로 나뉜다.
이 자체가 항상 치명적인 문제는 아니다. 비트코인에는 이후 어떤 체인을 정답으로 볼지 선택하는 규칙이 있기 때문이다.
하지만 중요한 점은 이것이다. 포크가 발생한다는 것은, 적어도 그 순간에는 모든 노드가 같은 블록을 보고 있지 않다는 뜻이다. 즉, Safety가 완벽하게 보장되는 상태는 아니다. 특히 포크가 오래 지속되면 더 큰 문제가 생긴다. 어떤 거래는 한쪽 체인에는 포함되어 있지만, 다른 쪽 체인에는 포함되지 않을 수 있다. 나중에 한쪽 체인이 버려지면, 그 체인에 들어 있던 거래도 취소된 것처럼 보일 수 있다. 이런 상황은 이중지불 문제와도 연결될 수 있다. 그래서 Safety는 블록체인에서 매우 중요한 가치라고 볼 수 있다.
Liveness란?

Liveness는 시스템이 멈추지 않고 결국 다음 단계로 진행되는 성질이다.
블록체인에서는 새로운 블록이 계속 만들어져야 한다. 만약 사용자가 거래를 했는데 네트워크가 계속 합의하지 못해서 다음 블록이 만들어지지 않는다면? 거래는 처리되지 않고 네트워크가 멈춘 것처럼 보일 수 있다.
그래서 Liveness가 보장된다는 것은 이런 의미다. 정상적인 노드들은 결국 합의에 도달하고 시스템이 계속 진행되는 것이다.
Liveness가 깨진다면?
Liveness가 깨지면 블록체인은 안전할 순 있어도 네트워크가 멈출 수 있다.
- 예를 들어, 모든 노드가 완벽하게 같은 블록에 동의해야만 다음 블록을 만들어야 한다면,
겉으로 보면 굉장히 안전해 보인다. 모두가 같은 블록에 동의해야 하니까 포크가 생기기 어렵다. - 하지만 문제가 있다.
일부 노드의 응답이 늦어지거나, 네트워크가 불안정하거나, 블록을 제안해야 하는 노드가 멈춘다면?
모두가 동의할 때까지 기다리다가 다음 단계로 넘어가지 못할 수 있다. 즉, 블록 생성이 멈출 수 있다. 이 경우 Safety는 높지만, Liveness는 낮아진다.
Safety와 Liveness는 서로 충돌할 수 있다
여기서 중요한 점은 Safety와 Liveness가 항상 동시에 완벽하게 만족되기 어렵다는 것이다. 특히 비동기 네트워크 환경에서는 이 문제가 더 크게 나타난다. 이런 환경에서 합의를 하려면 아래와 같은 딜레마가 생긴다.
- 하나는 충분히 기다리는 방식이다.
모든 노드가 같은 값을 확인할 때까지 기다리면 Safety는 높아진다.
하지만 응답이 늦어지는 노드가 있으면 시스템이 계속 멈출 수 있다.
즉, Safety를 높이려다 Liveness가 약해질 수 있다. - 반대로 일단 진행하는 방식도 있다.
모든 노드가 완벽히 같은 상태가 아니더라도 블록을 계속 만들면 Liveness는 높아진다.
하지만 동시에 서로 다른 블록이 생기면서 포크가 발생할 수 있다.
즉, Liveness를 높이려다 Safety가 약해질 수 있다.
결국 합의 알고리즘은 이 두 가치 사이에서 어떤 선택을 할 것인지에 대한 설계라고 볼 수 있다.
비트코인은 어느 쪽에 가까울까?
비트코인은 상대적으로 Liveness를 더 우선시하는 방식에 가깝다. 전 세계 채굴자들이 각자 블록을 만들기 위해 경쟁하다 보니 거의 동시에 두 개의 블록이 만들어질 수 있어서 이 경우 체인이 잠깐 두 갈래로 나뉘는 포크가 발생한다. 즉, 비트코인은 포크가 절대 발생하지 않도록 막는 구조가 아니다.
오히려 포크가 발생할 수 있음을 인정하고 이후에 더 적절한 체인을 선택하는 방식에 가깝다. 비트코인에서는 보통 더 많은 작업증명이 쌓인 체인이 선택된다. 쉽게 말하면 더 많은 연산이 투입된 체인을 정답 체인으로 본다. 이 방식은 완벽한 Safety를 처음부터 보장하지는 않지만 네트워크가 조금 불안정하더라도 블록 생성이 계속 이어질 수 있다.
'블록체인' 카테고리의 다른 글
| PBFT 합의와 비잔틴 노드 (1) | 2026.06.10 |
|---|---|
| 비트코인과 피어코인의 Fork 선택 규칙 (0) | 2026.06.09 |
| 합의 알고리즘이 왜 필요할까? (0) | 2026.06.06 |
| 이더리움의 숨은 본질 : 이어서 (0) | 2026.06.05 |
| 이더리움의 숨은 본질 (0) | 2026.06.04 |