어제 블록체인 오픈채팅방에서 어떤 분께서 너무 감사하게도 DSRV Research의 글을 추천해주셨다. 글 제목이 "Safety and Liveness" 여서 "이게 어떤 글일까?" 싶어서 읽기 시작했는데 막상 읽어보니 비트코인, 이더리움, 코스모스 같은 블록체인들이 왜 서로 다른 합의 방식을 사용하는지 이해하는 데 중요한 배경지식들이 담겨있었다. 내가 항상 궁금해왔던 블록체인 작동 방식에 대한 이야기였다.
해당 글의 핵심은 Safety와 Liveness라는 개념인데 이 개념 이해를 위해 그 전에 먼저 알아야 할 분산된 시스템에서 합의가 왜 필요한지, 그리고 동기/비동기 네트워크가 무엇인지 먼저 정리해보려고 한다.
블록 이어 붙이는 과정은 그리 단순하지 않다 !
블록체인에서 블록은 네트워크에 참여하는 여러 컴퓨터, 즉 노드들이 생성해낸다.
- 예를 들어 A, B가 각각 네트워크에 참여하고 있다고 해보자.
A, B 모두 본인 컴퓨터에 블록체인을 가지고 있다.
그런데 A가 새로운 블록을 만듦과 동시에 B도 블록을 만들어버리면 어떻게 될까? - 서로 다른 장부를 보고 있는 상황을 방지하기 위해선 둘 중 하나만을 선택해야 한다.
그래서 "여러 노드가 서로 다른 블록을 제안할 시 어떤 블록을 붙일 것인가?" 에 대한 답이 필요하다. 이 질문에 답하는 규칙이 바로 합의 알고리즘 이다.
합의 알고리즘이란?

합의 알고리즘은 모두가 같은 장부를 보기 위한 규칙이다. 단순히 "의견을 하나로 모은다"가 아닌, 노드들이 같은 상태의 블록체인을 유지하도록 만드는 규칙이다. 합의 알고리즘은 다음과 같은 역할을 한다.
- 누가 블록을 제안할 수 있는지 정한다
- 제안된 블록이 유효한지 검증한다
- 여러 후보 블록이 있을 경우 어떤 블록을 선택할지 정한다
- 최종적으로 모든 정상적인 노드가 같은 체인을 바라보도록 만든다
합의를 하려면 메시지를 주고 받아야 한다
합의 알고리즘에서 중요한 문제는 "서로 다른 노드들이 어떻게 정보를 주고 받는가?" 이다.
- A가 블록을 만들었다는 사실을, B도 알아야 한다.
- B가 블록을 만들었다면, C도 이 사실을 알아야 한다.
- 또 여러 노드가 각각 블록을 제안했다면, 다른 노드들은 그 중 어떤 블록이 유효한지 검증해야 한다.
이 과정에서 노드들은 서로 네트워크 상에서 메시지를 주고 받는다. 그리고 합의 알고리즘은 노드들이 메시지를 주고 받으며 하나의 결과에 도달하는 과정이라고 볼 수 있다.
그런데 여기서 문제가 생기는데, 모든 네트워크가 항상 같은 환경일 수 없기 때문에 완벽하지 않다는 것이다. 때문에 어떤 메시지는 일찍 도착할 수 있고, 어떤 메시지는 늦게 도착할 수 있다. 혹은, 어떤 특정 노드가 악의적으로 행동할 수도 있게 된다. 그래서 분산 시스템에서는 네트워크 환경을 어떻게 가정하는지가 매우 중요하다고 한다. 이때 등장하는 개념이 동기 네트워크와 비동기 네트워크다.
동기 네트워크란?
쉽게 말하면, 메시지가 일정 시간 안에는 도착한다고 가정하는 네트워크다.
- 예를 들어, 어떤 네트워크에서 메시지는 최대 10초 안에 도착한다고 약속되어 있다.
그럼 노드들은 10초를 기다린 뒤에 다음 단계로 넘어가게 되는 것이다. - 그럼 아래와 같이 작업 순서를 정하기가 쉬워진다.
1라운드에서는 블록을 제안
2라운드에서는 다른 노드들이 그 블록을 검증
3라운드에서는 투표
4라운드에서는 결과를 확정
조금 직관적으로 비유하자면 동기 네트워크는 수업 시간표가 정해진 학교 시스템과 비슷하다. 1교시가 끝나면 2교시가 시작되고, 2교시가 끝나면 3교시가 시작된다. 각 단계가 정해진 시간에 맞춰 진행되기 때문에 전체 시스템이 비교적 질서 있게 움직인다.
하지만 단점도 있다. 모든 노드가 같은 시간 시스템을 공유해야 한다는 것이다. 한국에 있는 노드와 미국에 있는 노드가 같은 라운드를 같은 방식으로 이해해야 한다. 만약 어떤 노드는 아직 1라운드라고 생각하는데, 다른 노드는 이미 2라운드라고 생각하면 합의 과정이 꼬일 수 있다. 그래서 동기 네트워크는 깔끔해 보이지만 실제 분산 환경에서는 구현하기가 쉽지 않다. 전 세계에 퍼진 모든 노드가 완벽하게 같은 시간 기준으로 움직이기 어렵다.
비동기 네트워크란?
비동기 네트워크는 반대로 메시지가 언제 도착할지 보장할 수 없는 네트워크다. 메시지가 1초 만에 도착할 수도 있고, 1분 뒤에 도착할 수도 있다. 극단적으로는 무한히 지연될 수도 있다.
따라서 비동기 네트워크에서는 “몇 초 안에 메시지가 도착하지 않으면 실패로 본다” 같은 확실한 기준을 두기 어렵다. 왜냐하면 진짜로 노드가 고장 난 것인지, 아니면 단순히 메시지가 늦게 도착하는 것인지 구분하기 어렵기 때문이다.
- 예를 들어 A 노드가 B 노드에게 메시지를 보냈는데 응답이 오지 않는다고 해보자
- 이때 A 노드는 이렇게 판단하기 어렵다.
“B가 죽은 건가?” , “아니면 네트워크가 느린 건가?”, “아니면 B가 악의적으로 일부러 응답을 안 하는 건가?”
이처럼 비동기 네트워크에서는 불확실성이 크다. 하지만 현실의 인터넷 환경은 완전한 동기 네트워크보다는 비동기 네트워크에 더 가깝다. 전 세계의 노드들이 같은 속도로 메시지를 주고받는 것은 불가능하기 때문이다. 그래서 블록체인 합의 알고리즘을 설계할 때는 이 비동기적인 환경을 매우 중요하게 고려해야 한다.
정리
결국 정리해보자면 장부들을 이어 붙이기 위해선 노드들이 메시지를 주고 받으면서 최종 결론 하나에 도달해야 하는 합의 과정이 필요한데, 메시지를 주고 받는 방식에는 2가지 방식이 있다. 동기 네트워크는 메시지가 제때 도착한다고 가정한다면 합의는 비교적 쉬워지지만 현실적을로구현이 어렵고, 비동기 네트워크는 메시지가 언제 도착할 지 모르기 때문에 합의하는 과정이 더욱 복잡해진다.
그래서 Safety와 Liveness 에 대한 문제가 등장하는데 이에 대한 이야기는 다음 글에서 적어보도록 하겠다 ! 추천해주신 글은 아래의 링크를 통해 원문을 확인할 수 있다.
'블록체인' 카테고리의 다른 글
| 비트코인과 피어코인의 Fork 선택 규칙 (0) | 2026.06.09 |
|---|---|
| Safety와 Liveness (0) | 2026.06.07 |
| 이더리움의 숨은 본질 : 이어서 (0) | 2026.06.05 |
| 이더리움의 숨은 본질 (0) | 2026.06.04 |
| 튤립 버블과 비트코인의 차이 (0) | 2026.06.03 |