cosmos-sdk/docs/translations/kr/intro/sdk-app-architecture.md

5.4 KiB
Executable File

SDK 애플리케이션 아키텍쳐

스테이트 머신 (상태 기계, State machine)

블록체인 애플리케이션은 근본적으로 결정론적 복제 상태 기계(replicated deterministic state machine)입니다.

스테이트 머신은 특정 기계(머신, machine)이 오랜 기간동안 다수의 상태(스테이트, state)를 보유할 수 있지만, 특정 시점에 오직 하나의 상태를 유지하는 있는 컴퓨터 공학 개념입니다. 여기서 '스테이트 머신' 개념에는 시스템의 현 상태를 뜻하는 '스테이트(state)'가 있으며, 스테이트의 변경을 유발하는 트랜잭션(transaction)'이 있습니다.

S 라는 스테이트와 T 라는 트랜잭션이 있는 경우, 스테이트 머신은 S'라는 새로운 스테이트를 리턴합니다.

+--------+                 +--------+
|        |                 |        |
|   S    +---------------->+   S'   |
|        |    apply(T)     |        |
+--------+                 +--------+

실전에서는 트랜잭션들이 일종의 '블록' 단위로 묶여 스테이트 변경 과정을 더 효율적일 수 있게 합니다. S라는 스테이트와 B라는 트랜잭션들이 있는 경우, 스테이트 머신은 S'라는 새로운 스테이트를 리턴합니다.

+--------+                              +--------+
|        |                              |        |
|   S    +----------------------------> |   S'   |
|        |   For each T in B: apply(T)  |        |
+--------+                              +--------+

블록체인이라는 시스템 내의 개념으로 볼때 스테이트 머신은 결정론적(deterministic)입니다. 즉, 특정 스테이트에서 시작한 후 동일한 트랜잭션들을 반복할 경우, 결과 스테이트는 언제나 동일합니다.

코스모스 SDK는 애플리케이션의 스테이트, 트랜잭션 형태 그리고 스테이트 변경 기능(state-transition function)을 정의하는데 최대한의 유연성을 제공합니다. 코스모스 SDK를 이용해 스테이트 머신을 만드는 과정은 이후 항목에서 다루겠습니다. 우선 이 시스템 내에서 어떻게 텐더민트를 사용해 '스테이트'가 복제되는지 알아보겠습니다.

텐더민트

개발자는 코스모스 SDK를 사용하여 스테이트 머신만을 정의하면 되며, 해당 스테이트를 네트워크에 복제하는 기능은 텐더민트가 제공합니다.

                ^  +-------------------------------+  ^
                |  |                               |  |   코스모스 SDK로 개발
                |  |      스테이트 머신 = 애플리케이션    |  |
                |  |                               |  v
                |  +-------------------------------+
                |  |                               |  ^
    블록체인 노드   |  |             컨센서스            |  |
                |  |                               |  |
                |  +-------------------------------+  |   텐더민트 코어
                |  |                               |  |
                |  |             네트워킹            |  |
                |  |                               |  |
                v  +-------------------------------+  v

텐더민트는 오직 블록체인의 네트워킹합의(컨센서스) 계층을 처리하는 애플리케이션-불가지성(application-agnostic) 엔진입니다. 실전적으로 볼때, 텐더민트는 단순히 트랜잭션의 바이트를 나열하고, 해당 트랜잭션을 네트워크에 전파하는 역할만을 한다는 것입니다. 텐더민트 코어는 텐더민트 비잔틴 결함 감내(BFT, Byzantine-fault tolerant) 알고리즘을 사용하여 트랜잭션 순서에 대한 합의를 합니다. 텐더민트에 대해서 더 알고싶으시다면 여기를 확인하세요.

텐더민트 합의 알고리즘은 '검증인(Validators)'이라는 특정 노드 세트를 기반으로 작동합니다. 검증인의 주 역할은 트랜잭션을 블록 단위로 블록체인에 추가하는 것입니다. 특정 블록에는 V 검증인 세트 검증인 존재하며, 이 V 검증인 세트 안에 있는 검증인 중 하나의 검증인이 다음 블록 생성자로 알고리즘에 의해 선택됩니다. 만약 블록이 V 검증인 세트 2/3 이상의 프리보트(prevote)프리커밋(precommit)을 받고 내용 트랜잭션이 유효한 경우 해당 블록은 '유효(valid)'한 것으로 간주됩니다. 검증인 세트는 스테이트 머신에 작성된 규칙에 따라서 바뀔 수 있습니다. 알고리즘에 대해 더 자세한 정보는 여기를 참고하세요.

코스모스 SDK 애플리케이션의 주요 파트는 네트워크에 포함되어있는 노드가 각자 로컬 환경에서 운영하는 블록체인 데몬(daemon)입니다. 만약 검증인 세트의 1/3 이하가 악의적(byzantine)인 경우, 각 노드는 동시에 스테이트를 조회할때 동일한 결과를 받게됩니다.