코스모스 네트워크 아키텍처에 대한 이해

번역날짜: 2018/08/06

이 글은 Lunamint, a cosmos hub validator의 후원으로 번역된 글입니다.

※이 글은 BuboWerks에서 작성했으며 그들의 지적재산입니다. CØSMOS Korea는 BuboWerks의 동의 하에 번역된 글만 제공할 뿐입니다. BuboWerks와 저자인 drzow에게 감사의 말씀을 올립니다.

※This post is written by BuboWerks and it is their intellectual property. CØSMOS Korea merely provides a translated version of the post under the consent of BuboWerks. We express our deepest gratitude to BuboWerks and drzow once again.


이 글은 엄밀히 말해서 보안(security)과 관련된 내용은 아닙니다. 우리는 텐더민트 코어 엔진을 기반으로 하는 코스모스 네트워크의 보안적인 측면에 대해 설명해달라는 요청을 많이 받았습니다. 하지만 보안에 관해 논의하기 전에 먼저 네트워크의 커뮤니케이션(communication)이 어떻게 진행되는지 아는 것이 중요합니다. 이번 글은 코스모스 네트워크의 각 구성요소들이 어떻게 ‘소통(communicate)’하는지 설명하려 합니다. 코스모스와 텐더민트에 대한 간략한 설명부터 네트워크의 구성요소들에 대한 소개와 각 구성요소의 핵심적인 데이터 컴포넌트(component) 및 서로 어떻게 의사소통을 하는지 살펴보겠습니다.

코스모스와 텐더민트

먼저 기반이 되는 기술에 대해 살펴봅시다. 텐더민트는 비잔틴 결함 감내성(Byzantine Fault-Tolerant)을 가진 작업증명(Proof of Work)이 아닌 지분증명(Proof of Stake) 블록체인 기술(합의 엔진)입니다. 검증인(validator)의 1/3이 컨센서스에 도달하지 못하더라도(악의적인 행위를 하는 경우 포함) 블록이 생성될 수 있으며 전체 검증인의 2/3 이상이 적극적으로 악의적인 행위를 해야만 체인에 유효하지 않은 블록이 추가됩니다.

인터넷이 ‘네트워크들의 네트워크’인 것처럼 코스모스 네트워크는 ‘블록체인들의 네트워크(Internet of Blockchains)’입니다. 이런 블록체인 네트워크 집합의 중심에는 텐더민트 엔진 기반의 코스모스 허브(Cosmos Hub)라는 블록체인이 존재합니다. 네트워크 내의 다른 블록체인들은 블록체인 간 통신(Inter-Blockchain Communication, IBC)을 통해 허브에 암호화폐를 전송할 수 있습니다. 결국, 코스모스 허브는 거대한 유동성 풀(liquidity pool)입니다.

코스모스 네트워크에는 다양한 기술이 적용되지만 이 글에서는 코스모스 허브에 적용된 텐더민트 기술을 중점적으로 설명하고자 합니다.

네트워크 구성 요소

풀 노드(Full Node): 블록체인의 전체 기록(또는 원장내역)을 모두 보관하고 있는 머신.

검증인(Validator): 새로운 블록을 제안(propose)하거나 제안된 블록에 동의(accept) 또는 거절(reject)할 수 있는 풀 노드(Full Node)입니다. 코스모스 허브의 론칭에는 총 100개의 검증인 노드가 존재할 것이며 10년 동안 순차적으로 300개까지 늘어날 것입니다. 검증인들은 보안에 신경을 많이 써야 합니다. 만약 검증인 노드에 문제가 생기면(무응답 상태, 이중 서명, 해킹, 등등) 슬래싱(slashing)을 통해 처벌을 받게 됩니다. 그러므로 검증인 노드는 퍼블릭 인터넷 환경에 직접 연결되어 있으면 안 됩니다.

센트리 노드(Sentry Node): 검증인 노드는 퍼블릭 인터넷 환경에 직접 연결되면 안 되기 때문에 센트리 노드가 존재합니다. 센트리 노드는 검증인 노드 대신 퍼블릭 인터넷에 연결되어 메시지를 받은 다음 이를 전달하는 일종의 방화벽 같은 존재입니다. 물론 센트리 노드도 그 용도에 따라 ‘퍼블릭 센트리 노드(Public Sentry Node)’와 ‘프라이빗 센트리 노드(Private Sentry Node)’로 구분할 수 있습니다. 프라이빗 센트리 노드는 내부 redundancy 또는 검증인-대-검증인 커뮤니케이션을 쉽게 하기 위해 사용됩니다.

애플리케이션 노드(Application Node): 애플리케이션 노드는 ‘공개적으로 이용 가능한(publicly available)’ 풀 노드에 연결되어 전체 네트워크와 상호작용을 할 수 있습니다. 하지만, 현실에서는 일반적으로 애플리케이션 노드 독자적으로 전체 네트워크와 상호작용하기 위해 풀 노드를 운영할 것입니다.

씨드 노드(Seed Node): 공개적으로 이용가능한 다른 노드에게 지속적으로 문의(query)를 함으로써 네트워크에 있는 “노드”들의 상태를 업데이트합니다. 씨드 노드들의 리스트(list)를 작성해서 노드들의 상태(down 되었는지 여부)를 정리한 다음 네트워크에 새롭게 참여하는 노드들에 정보를 제공합니다.

라이트웨이트 노드(Lightweight Node): 블록체인의 전체가 아니라 최근 블록들만 저장하는 머신(machine).

데이터 구성요소

트랜잭션: 애플리케이션에 의해 기록되는 이산적(discrete)이고 결정론(deterministic)적인 상태 변화(state change).

블록: 트랜잭션들의 집합.

블록체인: 컨센서스에 의해 검증된, 순서를 가진 블록들의 묶음.

네트워크 커뮤니케이션

디폴트적으로 텐더민트 RPC 커뮤니케이션은 TCP port 26657의 HTTP REST 인터페이스를 통해 이뤄집니다(우리는 이를 Application Connection이라고 함). P2P 커뮤니케이션은 TCP port 26656을 통해 이뤄집니다. 일단 각 구성요소가 서로 어떻게 소통하는지 전체적인 그림을 본 다음 각각의 부분들을 자세하게 살펴볼 것입니다.

이제 우리는 애플리케이션(노드), 다른 노드들, 검증인 노드와 퍼블릭 센트리 노드, 프라이빗 센트리 노드, 그리고 anti-패턴들을 살펴볼 것입니다. 하지만 먼저, 노드들이 서로 연결되는 방법을 살펴봅시다.

연결 방법

  1. 애플리케이션 연결(Application Connection)
  2. 퍼블릭 인터넷을 통한 텐더민트 P2P 연결(Tendermint P2P connection over public Internet)
  3. 프라이빗 인터넷을 통한 텐더민트 P2P 연결(Tendermint P2P connection over private Internet)
  4. 문제가 있는 텐더민트 P2P 연결(Ill-advised Tendermint P2P connection)

애플리케이션

다른 노드들

검증인 노드와 퍼블릭 센트리 노드

프라이빗 센트리 노드

Anti-Patterns

결론

이 글을 통해 코스모스 네트워크, 코스모스 허브, 그리고 텐더민트와 각각의 구성요소와 그 구성요소들이 서로 어떻게 연결되는지를 살펴보았습니다. 기술적으로 더 자세하게 들어가면 훨씬 복잡하지만, 이해를 돕기 위해 쉽게 설명하고자 노력했습니다. 추후 다른 블로그 포스트를 통해 더 자세하게 설명하도록 하겠습니다.

drzow에게 감사의 말씀을 올림.


CØSMOS Korea SNS

Lunamint Validator SNS


※이 글은 Lunamint, a cosmos hub validator의 후원으로 작성된 번역글입니다.

※이 글은 원문 저자의 동의 하에 번역된 글입니다.

※번역글에 대한 무단 도용 및 배포는 허락하지 않습니다. 아래는 원문링크, 저자, 그리고 작성날짜입니다.

원문링크: https://bubowerks.io/blog/2018/07/19/cosmos-tendermint-network-architecture/#comment-41

원문저자: drzow (Twitter / Blog)

원문날짜: 2018/07/19