Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
---
title: "라이트 클라이언트"
description: "이더리움 라이트 클라이언트 소개."
lang: ko
---

전체 노드를 실행하는 것은 이더리움과 상호작용하는 가장 신뢰가 필요 없고, 비공개적이며, 탈중앙화되고, 검열에 저항하는 방법입니다. 전체 노드를 사용하면 즉시 쿼리할 수 있는 블록체인의 자체 사본을 유지하고 이더리움의 P2P(peer-to-peer) 네트워크에 직접 액세스할 수 있습니다. 하지만 전체 노드를 실행하려면 상당한 양의 메모리, 저장 공간, CPU가 필요합니다. 이는 모든 사람이 자신의 노드를 실행하는 것이 실현 가능하지 않다는 것을 의미합니다. 이더리움 로드맵에는 무상태성을 포함하여 이에 대한 몇 가지 해결책이 있지만, 구현되기까지는 몇 년이 걸릴 것입니다. 단기적인 해결책은 전체 노드 실행의 이점 중 일부를 대폭적인 성능 향상과 맞바꾸어 매우 낮은 하드웨어 요구 사항으로 노드를 실행할 수 있도록 하는 것입니다. 이러한 트레이드오프를 하는 노드를 라이트 노드라고 합니다.

## 라이트 클라이언트란 무엇인가요? {#what-is-a-light-client}

라이트 노드는 라이트 클라이언트 소프트웨어를 실행하는 노드입니다. 블록체인 데이터의 로컬 사본을 보관하고 모든 변경 사항을 독립적으로 검증하는 대신, 일부 공급자에게 필요한 데이터를 요청합니다. 공급자는 전체 노드에 직접 연결하거나 일부 중앙화된 RPC 서버를 통해 연결될 수 있습니다. 그런 다음 데이터는 라이트 노드에 의해 검증되어 체인의 헤드를 따라갈 수 있습니다. 라이트 노드는 블록 헤더만 처리하며, 실제 블록 콘텐츠는 가끔씩만 다운로드합니다. 노드는 실행하는 라이트 및 전체 클라이언트 소프트웨어의 조합에 따라 경량성이 다를 수 있습니다. 예를 들어, 가장 가벼운 구성은 라이트 실행 클라이언트와 라이트 합의 클라이언트를 실행하는 것입니다. 또한 많은 노드가 라이트 합의 클라이언트를 전체 실행 클라이언트와 함께 실행하거나 그 반대로 실행하는 것을 선택할 가능성이 높습니다.

## 라이트 클라이언트는 어떻게 작동하나요? {#how-do-light-clients-work}

이더리움이 지분 증명 기반 합의 메커니즘을 사용하기 시작했을 때, 라이트 클라이언트를 특별히 지원하기 위한 새로운 인프라가 도입되었습니다. 작동 방식은 1.1일마다 512명의 검증자 중 일부를 무작위로 선택하여 **동기화 위원회**로 활동하게 하는 것입니다. 동기화 위원회는 최근 블록의 헤더에 서명합니다. 각 블록 헤더에는 동기화 위원회의 검증자들의 집계된 서명과 어떤 검증자가 서명했고 어떤 검증자가 서명하지 않았는지 보여주는 "비트필드"가 포함됩니다. 각 헤더에는 다음 블록 서명에 참여할 것으로 예상되는 검증자 목록도 포함됩니다. 이는 라이트 클라이언트가 동기화 위원회가 수신한 데이터에 서명했음을 신속하게 확인할 수 있으며, 이전 블록에서 예상하라고 전달받은 것과 수신한 것을 비교하여 동기화 위원회가 진짜인지 확인할 수도 있음을 의미합니다. 이러한 방식으로 라이트 클라이언트는 블록 자체를 실제로 다운로드하지 않고 요약 정보가 포함된 헤더만으로 최신 이더리움 블록에 대한 지식을 계속 업데이트할 수 있습니다.

실행 레이어에는 라이트 실행 클라이언트에 대한 단일 사양이 없습니다. 라이트 실행 클라이언트의 범위는 전체 노드의 모든 EVM 및 네트워킹 기능을 갖추고 있지만 관련 데이터를 다운로드하지 않고 블록 헤더만 검증하는 전체 실행 클라이언트의 "라이트 모드"부터, 이더리움과 상호작용하기 위해 RPC 공급자에게 요청을 전달하는 데 크게 의존하는 더 간소화된 클라이언트에 이르기까지 다양할 수 있습니다.

## 라이트 클라이언트가 왜 중요한가요? {#why-are-light-clients-important}

라이트 클라이언트는 전체 노드의 아주 적은 계산 리소스만 사용하면서도 사용자가 데이터 제공업체가 정확하고 정직하다고 맹목적으로 신뢰하는 대신 들어오는 데이터를 직접 검증할 수 있게 해주기 때문에 중요합니다. 라이트 클라이언트가 수신하는 데이터는 무작위로 선정된 512명의 이더리움 검증자 중 최소 2/3가 서명한 것으로 알려진 블록 헤더와 대조하여 확인할 수 있습니다. 이는 데이터가 정확하다는 매우 강력한 증거입니다.

라이트 클라이언트는 아주 적은 양의 컴퓨팅 파워, 메모리, 저장 공간만 사용하므로 휴대폰, 앱에 내장되거나 브라우저의 일부로 실행될 수 있습니다. 라이트 클라이언트는 신뢰를 최소화한 이더리움 액세스를 제3자 제공자를 신뢰하는 것만큼이나 원활하게 만드는 방법입니다.

간단한 예를 들어보겠습니다. 계정 잔액을 확인하고 싶다고 상상해 보세요. 이를 위해서는 이더리움 노드에 요청을 해야 합니다. 해당 노드는 이더리움 상태의 로컬 사본에서 잔액을 확인하고 사용자에게 반환합니다. 노드에 직접 액세스할 수 없는 경우 이 데이터를 서비스로 제공하는 중앙화된 운영자가 있습니다. 그들에게 요청을 보내면 그들은 자신의 노드를 확인하고 결과를 다시 사용자에게 보냅니다. 이것의 문제점은 제공자가 올바른 정보를 제공하고 있다고 신뢰해야 한다는 것입니다. 스스로 확인할 수 없다면 정보가 정확한지 결코 알 수 없습니다.

라이트 클라이언트는 이 문제를 해결합니다. 여전히 외부 공급자에게 데이터를 요청하지만, 데이터를 다시 받을 때 라이트 노드가 블록 헤더에서 받은 정보와 대조하여 확인할 수 있는 증명과 함께 제공됩니다. 이는 신뢰할 수 있는 일부 운영자 대신 이더리움이 데이터의 정확성을 검증하고 있음을 의미합니다.

## 라이트 클라이언트는 어떤 혁신을 가능하게 하나요? {#what-innovations-do-light-clients-enable}

라이트 클라이언트의 주요 이점은 더 많은 사람들이 무시할 수 있는 하드웨어 요구 사항과 제3자에 대한 최소한의 의존으로 독립적으로 이더리움에 액세스할 수 있도록 하는 것입니다. 이는 사용자가 자신의 데이터를 직접 검증할 수 있기 때문에 사용자에게 좋고, 체인을 검증하는 노드의 수와 다양성을 증가시키기 때문에 네트워크에도 좋습니다.

매우 작은 저장 공간, 메모리, 처리 능력을 가진 장치에서 이더리움 노드를 실행할 수 있는 능력은 라이트 클라이언트에 의해 가능해진 주요 혁신 분야 중 하나입니다. 오늘날 이더리움 노드는 많은 컴퓨팅 리소스를 필요로 하지만, 라이트 클라이언트는 브라우저에 내장되거나, 휴대폰에서 실행되거나, 심지어 스마트 워치와 같은 더 작은 장치에서도 실행될 수 있습니다. 이는 내장된 클라이언트가 있는 이더리움 지갑이 휴대폰에서 실행될 수 있음을 의미합니다. 이는 모바일 지갑이 데이터에 대해 중앙화된 데이터 제공업체를 신뢰할 필요가 없으므로 훨씬 더 탈중앙화될 수 있음을 의미합니다.

이것의 연장선상에서 **사물 인터넷(IoT)** 장치를 활성화할 수 있습니다. 라이트 클라이언트는 동기화 위원회가 제공하는 모든 보안 보증을 통해 일부 토큰 잔액 또는 NFT의 소유권을 신속하게 증명하고 IoT 네트워크에서 일부 작업을 트리거하는 데 사용될 수 있습니다. 내장된 라이트 클라이언트가 있는 앱을 사용하여 대여 서비스의 NFT를 소유하고 있는지 신속하게 확인하고, 그렇다면 자전거 잠금을 해제하여 타고 갈 수 있는 [자전거 대여 서비스](https://youtu.be/ZHNrAXf3RDE?t=929)를 상상해 보세요!

이더리움 롤업 또한 라이트 클라이언트의 이점을 누릴 수 있습니다. 롤업의 큰 문제 중 하나는 이더리움 메인넷에서 롤업으로 자금을 이전할 수 있게 해주는 브리지를 대상으로 한 해킹이었습니다. 한 가지 취약점은 롤업이 사용자가 브리지에 입금했음을 감지하는 데 사용하는 오라클입니다. 오라클이 잘못된 데이터를 제공하면 롤업을 속여 브리지에 입금된 것으로 생각하게 하고 자금을 잘못 출금하게 할 수 있습니다. 롤업에 내장된 라이트 클라이언트는 손상된 오라클로부터 보호하는 데 사용될 수 있습니다. 왜냐하면 브리지에 대한 입금은 롤업이 토큰을 출금하기 전에 검증할 수 있는 증명과 함께 제공될 수 있기 때문입니다. 동일한 개념이 다른 인터체인 브리지에도 적용될 수 있습니다.

라이트 클라이언트는 이더리움 지갑을 업그레이드하는 데에도 사용될 수 있습니다. RPC 공급자가 제공하는 데이터를 신뢰하는 대신, 지갑이 내장된 라이트 클라이언트를 사용하여 사용자에게 제시되는 데이터를 직접 검증할 수 있습니다. 이렇게 하면 지갑의 보안이 강화됩니다. RPC 공급자가 부정직하여 잘못된 데이터를 제공한 경우, 내장된 라이트 클라이언트가 이를 알려줄 수 있습니다!

## 라이트 클라이언트 개발의 현재 상태는 어떤가요? {#current-state-of-development}

실행, 합의 및 결합된 실행/합의 라이트 클라이언트를 포함하여 여러 라이트 클라이언트가 개발 중입니다. 이 페이지를 작성하는 시점에 우리가 알고 있는 라이트 클라이언트 구현은 다음과 같습니다:

- [Lodestar](https://github.com/ChainSafe/lodestar/tree/unstable/packages/light-client): TypeScript로 작성된 합의 라이트 클라이언트
- [Helios](https://github.com/a16z/helios): Rust로 작성된 결합된 실행 및 합의 라이트 클라이언트
- [Geth](https://github.com/ethereum/go-ethereum/tree/master/beacon/light): Go로 작성된 실행 클라이언트용 라이트 모드(개발 중)
- [Nimbus](https://nimbus.guide/el-light-client.html): Nim으로 작성된 합의 라이트 클라이언트

우리가 알기로는 아직 이들 중 어느 것도 프로덕션 준비가 된 것으로 간주되지 않습니다.

또한 라이트 클라이언트가 이더리움 데이터에 액세스하는 방식을 개선하기 위한 많은 작업이 진행되고 있습니다. 현재 라이트 클라이언트는 클라이언트/서버 모델을 사용하여 전체 노드에 대한 RPC 요청에 의존하지만, 미래에는 P2P(peer-to-peer) 가십 프로토콜을 사용하여 라이트 클라이언트에 데이터를 제공할 수 있는 [포털 네트워크](https://www.ethportal.net/)와 같은 전용 네트워크를 사용하여 더 탈중앙화된 방식으로 데이터를 요청할 수 있습니다.

다른 [로드맵](/roadmap/) 항목인 [버클 트리](/roadmap/verkle-trees/) 및 [무상태성](/roadmap/statelessness/)은 결국 라이트 클라이언트의 보안 보증을 전체 클라이언트의 보안 보증과 동일한 수준으로 끌어올릴 것입니다.

## 더 읽어보기 {#further-reading}

- [Geth 라이트 클라이언트에 대한 Zsolt Felfodhi](https://www.youtube.com/watch?v=EPZeFXau-RE)
- [라이트 클라이언트 네트워킹에 대한 Etan Kissling](https://www.youtube.com/watch?v=85MeiMA4dD8)
- [병합 이후의 라이트 클라이언트에 대한 Etan Kissling](https://www.youtube.com/watch?v=ZHNrAXf3RDE)
- [Piper Merriam: 기능적인 라이트 클라이언트로 가는 구불구불한 길](https://snakecharmers.ethereum.org/the-winding-road-to-functional-light-clients/)
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
---
title: "노드 아키텍처"
description: "이더리움 노드가 어떻게 구성되는지에 대한 소개."
lang: ko
---

이더리움 노드는 [실행 클라이언트](/developers/docs/nodes-and-clients/#execution-clients)와 [합의 클라이언트](/developers/docs/nodes-and-clients/#consensus-clients)의 두 클라이언트로 구성됩니다. 노드가 새 블록을 제안하려면 [검증자 클라이언트](#validators)도 실행해야 합니다.

이더리움이 [작업 증명](/developers/docs/consensus-mechanisms/pow/)을 사용했을 때에는 실행 클라이언트만으로도 전체 이더리움 노드를 실행하기에 충분했습니다. 그러나 [지분 증명](/developers/docs/consensus-mechanisms/pow/)이 구현된 이후에는 실행 클라이언트는 [합의 클라이언트](/developers/docs/nodes-and-clients/#consensus-clients)라는 다른 소프트웨어와 함께 사용되어야 합니다.

아래 다이어그램은 두 이더리움 클라이언트 간의 관계를 보여줍니다. 두 클라이언트는 각자의 peer-to-peer (P2P) 네트워크에 연결됩니다. 실행 클라이언트는 P2P 네트워크를 통해 트랜잭션을 가십하여 로컬 트랜잭션 풀을 관리하고, 합의 클라이언트는 P2P 네트워크를 통해 블록을 가십하여 합의와 체인 성장을 가능하게 하므로 별도의 P2P 네트워크가 필요합니다.

![](node-architecture-text-background.png)

_실행 클라이언트에는 Erigon, Nethermind, Besu를 포함한 여러 옵션이 있습니다_.

이 이중 클라이언트 구조가 작동하려면 합의 클라이언트는 트랜잭션 묶음을 실행 클라이언트에 전달해야 합니다. 실행 클라이언트는 트랜잭션을 로컬에서 실행하여 트랜잭션이 이더리움 규칙을 위반하지 않는지와 제안된 이더리움 상태 업데이트가 올바른지를 검증합니다. 노드가 블록 생성자로 선택되면 해당 합의 클라이언트 인스턴스는 실행 클라이언트로부터 트랜잭션 묶음을 요청하여 새 블록에 포함하고 이를 실행하여 전역 상태를 업데이트합니다. 합의 클라이언트는 [엔진 API](https://github.com/ethereum/execution-apis/blob/main/src/engine/common.md)를 사용하여 로컬 RPC 연결을 통해 실행 클라이언트를 구동합니다.

## 실행 클라이언트는 어떤 역할을 하나요? {#execution-client}

실행 클라이언트는 트랜잭션 검증, 처리, 가십뿐만 아니라 상태 관리와 이더리움 가상 머신([EVM](/developers/docs/evm/)) 지원을 담당합니다. 블록 생성, 블록 가십 또는 합의 로직 처리는 **담당하지 않습니다**. 이는 합의 클라이언트의 소관입니다.

실행 클라이언트는 실행 페이로드, 즉 트랜잭션 목록, 업데이트된 상태 트라이, 기타 실행 관련 데이터를 생성합니다. 합의 클라이언트는 모든 블록에 실행 페이로드를 포함합니다. 실행 클라이언트는 새 블록의 트랜잭션을 재실행하여 유효성을 보장하는 역할도 합니다. 트랜잭션 실행은 [이더리움 가상 머신(EVM)](/developers/docs/evm)으로 알려진 실행 클라이언트의 내장 컴퓨터에서 수행됩니다.

실행 클라이언트는 사용자가 이더리움 블록체인을 쿼리하고, 트랜잭션을 제출하고, 스마트 계약을 배포할 수 있도록 하는 [RPC 메서드](/developers/docs/apis/json-rpc)를 통해 이더리움에 대한 사용자 인터페이스를 제공합니다. RPC 호출은 일반적으로 [Web3js](https://docs.web3js.org/), [Web3py](https://web3py.readthedocs.io/en/v5/)와 같은 라이브러리나 브라우저 지갑과 같은 사용자 인터페이스에 의해 처리됩니다.

요약하자면, 실행 클라이언트는 다음과 같습니다.

- 이더리움으로 가는 사용자 게이트웨이
- 이더리움 가상 머신, 이더리움의 상태 및 트랜잭션 풀의 홈

## 합의 클라이언트는 어떤 역할을 하나요? {#consensus-client}

합의 클라이언트는 노드가 이더리움 네트워크와 동기화 상태를 유지할 수 있도록 하는 모든 로직을 처리합니다. 여기에는 피어로부터 블록을 수신하고 포크 선택 알고리즘을 실행하여 노드가 항상 가장 많은 인증(검증자 유효 잔고에 따라 가중치가 적용됨)이 축적된 체인을 따르도록 하는 것이 포함됩니다. 실행 클라이언트와 마찬가지로, 합의 클라이언트도 블록과 인증을 공유하는 자체 P2P 네트워크를 가집니다.

합의 클라이언트는 블록을 인증하거나 제안하는 데 참여하지 않습니다. 이 작업은 합의 클라이언트의 선택적 애드온인 검증자에 의해 수행됩니다. 검증자가 없는 합의 클라이언트는 체인의 헤드만 따라가며 노드가 동기화 상태를 유지할 수 있도록 합니다. 이를 통해 사용자는 올바른 체인에 있다는 확신을 가지고 실행 클라이언트를 사용하여 이더리움과 거래할 수 있습니다.

## 검증자 {#validators}

스테이킹을 하고 검증자 소프트웨어를 실행하면 노드가 새 블록을 제안하도록 선택될 자격을 갖추게 됩니다. 노드 운영자는 예금 컨트랙트에 32 ETH를 예치하여 자신의 합의 클라이언트에 검증인을 추가할 수 있습니다. 검증자 클라이언트는 합의 클라이언트와 함께 번들로 제공되며 언제든지 노드에 추가할 수 있습니다. 검증인은 인증 및 블록 제안을 처리합니다. 또한 노드는 페널티나 슬래싱을 통해 보상을 받거나 ETH를 잃을 수 있습니다.

[스테이킹에 대해 더 알아보기](/staking/).

## 노드 구성 요소 비교 {#node-comparison}

| 실행 클라이언트 | 합의 클라이언트 | 검증자 |
| ------------------------------- | --------------------------------------------------------------------------------- | -------------- |
| P2P 네트워크를 통해 트랜잭션을 가십합니다 | P2P 네트워크를 통해 블록 및 인증을 가십합니다 | 블록 제안 |
| 트랜잭션 실행/재실행 | 포크 선택 알고리즘 실행 | 보상/페널티 발생 |
| 수신 상태 변경 확인 | 체인 헤드 추적 | 인증 생성 |
| 상태 및 영수증 트라이 관리 | 비콘 상태 관리(합의 및 실행 정보 포함) | 32 ETH 스테이킹 필요 |
| 실행 페이로드 생성 | RANDAO(검증자 선택 및 기타 합의 작업에 검증 가능한 무작위성을 제공하는 알고리즘)의 누적된 무작위성 추적 | 슬래싱 가능 |
| 이더리움과 상호작용하기 위한 JSON-RPC API 노출 | 정당성 및 완결성 추적 | |

## 더 읽어보기 {#further-reading}

- [지분 증명](/developers/docs/consensus-mechanisms/pos)
- [블록 제안](/developers/docs/consensus-mechanisms/pos/block-proposal)
- [검증자 보상 및 페널티](/developers/docs/consensus-mechanisms/pos/rewards-and-penalties)
Loading
Loading