> ## Documentation Index
> Fetch the complete documentation index at: https://docs.optimism.io/llms.txt
> Use this file to discover all available pages before exploring further.

# 동작 방식

Kona는 OP Stack을 위해 특별히 제작된 강력한 `no-std` 및 `std` Rust
컴포넌트 모음을 하나로 묶습니다. 이 생태계의 중심에는
`kona-node`가 있습니다. `kona-node`는 현대적이고 모듈화된 rollup node(L2 합의 node)로,
바로 교체 가능한 바이너리로 사용하거나 사용자 지정 서비스의 기반으로 사용할 수 있습니다.

`kona-node`는 ["Rollup Node"
사양][rollup-node]을 완전히 준수하는 구현체이며, [kona 저장소][kona]에서
[바이너리][package]로 릴리스됩니다. 프로덕션 네트워크를 운영하든,
새로운 rollup 기능을 개발하든, OP Stack을 실험하든,
`kona-node`는 견고하면서도 확장 가능하도록 설계되었습니다.

### 배경

rollup node는 L1 블록과 해당 receipt로부터 정규(canonical) L2 체인을
도출하는 역할을 합니다. rollup node는 [Engine API][engine-api]를 사용하여
이러한 블록을 검증하고, 처리를 위해 실행 계층에 전달합니다.

op-reth나 op-geth와 같은 실행 엔진과 함께 사용되는 `kona-node`는
L2 OP Stack 체인의 unsafe, safe, finalized tip을 추적하여
node가 항상 최신 상태와 동기화되도록 보장합니다.

> [!NOTE]
>
> rollup node는 최소한의 상태만 보유합니다. unsafe 및 safe payload는 모두
> 체인의 db를 보유한 실행 엔진 클라이언트로 전송됩니다. 이 방식으로
> rollup node는 체인 tip에 대한 뷰, 즉 unsafe, safe, finalized 블록 정보를
> 보유합니다. 그 외에 필요한 모든 데이터는 메모리에 보관됩니다.

`kona-node`에는 몇 가지 핵심 아키텍처 구성 요소가 있습니다.

* **Derivation Pipeline:** L1 블록으로부터 L2 payload attributes를 구성하며,
  rollup 로직의 근간을 이룹니다.
* **실행 엔진 통합:** [Engine API][engine-api]를 통해 L2 payload attributes를
  실행하며, 서로 다른 EL 클라이언트를 추상화합니다.
* **P2P 네트워킹:** 블록 gossip과 피어 탐색을 지원합니다.

이 세 가지 핵심 요소에 대한 심층적인 설명과 `kona-node`의 상세 설계는
[Node 설계 섹션](https://docs.optimism.io/ko/node-operators/kona-node/design/intro.md)을 참조하십시오.

또한 RPC 서버는 [L2 Output RPC 메서드][l2o-rpc]를 포함한
필수 메서드를 제공합니다.

### 동기화

`kona-node`는 두 가지 주요 단계로 L2 체인을 동기화합니다.

1. **실행 계층(EL) 동기화:**
   시작 시 node의 engine task queue는 처음에 비어 있습니다.
   P2P gossip으로부터 unsafe 블록을 수신하면 `InsertTask`가
   실행됩니다. 이 task는 payload를 삽입하고 engine API를 통해 forkchoice
   업데이트를 보냅니다. engine 상태는 지연 초기화되므로(safe 및 finalized
   head가 0) forkchoice 업데이트는 실행 계층(EL) 클라이언트(op-reth나
   op-geth 등)에서 EL 동기화를 시작합니다. EL 동기화는 실행 클라이언트가
   피어로부터 직접 L2 블록을 가져와 동기화하도록 지시합니다. 이 단계에서
   `kona-node`는 사실상 EL 클라이언트가 체인 tip에 도달하여 `synced`를
   반환할 때까지 대기합니다. 이 기간에는 L1으로부터 L2 블록이
   도출되지 않습니다.

2. **합의 계층(CL) 동기화:**
   EL 클라이언트가 tip까지 완전히 동기화되면 node는 합의 계층(CL)
   동기화로 전환합니다. 이 단계에서 `kona-node`는 rollup 도출 과정에 따라
   L1 체인으로부터 새로운 L2 payload attributes를 도출하기 시작합니다.
   이렇게 도출된 `OpAttributesWithParent` 값은 engine task로 실행되며,
   이 task는 검증 및 실행을 위해 payload를 실행 엔진에 제출합니다.

> [!NOTE]
>
> * `kona-node`는 과거 체인 기록에 대한 히스토리 CL 동기화나 L1으로부터의
>   L2 블록 백필(backfill)을 지원하지 **않습니다**. L2 체인의 초기 동기화는
>   EL 클라이언트에 의존합니다.
> * EL이 완전히 동기화된 후에야 node는 L1으로부터 새로운 L2 블록을
>   도출하고 따라가기 시작합니다.

### 확장성

`kona-node`는 모듈화된 actor 기반 node SDK로 설계되어,
새로운 actor를 추가하거나 기존 actor를 교체하여 node 동작을
확장하거나 사용자 지정할 수 있습니다. 이 확장성은
현재 **베타** 단계이지만, 아키텍처는 고급 사용 사례와 사용자 지정 통합을
지원하도록 의도적으로 설계되었습니다.

#### Actor 모델

`kona-node`의 핵심에는 **actor** 개념이 있습니다. actor는 채널을 통해
통신하는 독립적인 비동기 서비스입니다. 각 actor는
[`NodeActor` trait][node-actor]를 구현합니다. 이 trait는 단일 `step` 메서드만
가진 최소한의 인터페이스로, 서비스는 actor가 치명적인 오류를 보고하거나
node가 종료될 때까지 루프에서 이 메서드를 구동합니다.

[`RollupNode` 서비스][node]는 derivation, 실행 엔진과 읽기 전용
engine RPC, L1 watcher, P2P 네트워킹, node의 RPC 서버, 그리고
sequencer 모드에서는 블록 빌딩을 담당하는 고정된 actor 집합을
빌드하고 생성합니다.

[Node 설계 섹션](https://docs.optimism.io/ko/node-operators/kona-node/design/intro.md)은
이 actor 집합과 각 actor의 역할에 대한 공식 설명입니다.

#### 사용자 지정 Actor로 확장하기

`NodeActor` trait를 구현하여 직접 actor를 작성할 수 있습니다.
이를 통해 새로운 백그라운드 서비스, 이벤트 프로세서 또는 외부 시스템과의
통합을 도입할 수 있습니다.

이 trait에는 하나의 연관 타입과 하나의 메서드가 있습니다. `step`을
호출할 때마다 하나의 인바운드 요청, 이벤트 또는 예약된 tick을 처리합니다.
`Ok(())`를 반환하면 actor가 다시 step을 수행할 준비가 되었음을 의미하며,
오류를 반환하면 치명적인 것으로 간주되어 actor가 중지됩니다. 취소는
루프를 구동하는 호출자가 처리하므로 actor 자체는 취소 토큰을
소유하지 않습니다.

**예시: 사용자 지정 Actor 정의하기**

```rust theme={null}
use async_trait::async_trait;
use kona_node_service::NodeActor;

struct MyCustomActor;

#[async_trait]
impl NodeActor for MyCustomActor {
    type Error = std::io::Error;

    async fn step(&mut self) -> Result<(), Self::Error> {
        // Your actor logic for one step here.
        Ok(())
    }
}
```

#### 사용자 지정 Actor 실행하기

현재 표준 node에 actor를 교체해 넣을 수 있는 trait 기반 확장 지점은
없습니다. [`RollupNode`][node]는 trait가 아닌 구체 타입이며,
actor 집합은 해당 타입의 `start` 메서드에 고정되어 있고,
이러한 actor를 생성하고 감독하는 헬퍼는 `kona-node-service`
crate 내부에 있습니다.

따라서 사용자 지정 actor를 실행하려면 node를 직접 구성해야 합니다.
내장 actor는 `kona-node-service` crate의 공개 API입니다.
actor들이 채널을 통해 주고받는 요청 및 payload 타입도 공개되어 있으며,
`kona-node-service`, `kona-rpc` 및 `kona-gossip`과 같은 형제 kona crate,
그리고 공유 alloy engine 타입에 분산되어 있습니다. 따라서
사용자 지정 바이너리는 필요한 actor를 구성하고, 채널로 서로 연결하고,
자체 `NodeActor` 구현을 추가하고, 각 actor의 `step` 메서드를
별도의 task에서 구동할 수 있습니다.

#### 프로그래밍 방식의 Node 구성

[`RollupNodeBuilder`][builder]는 표준 node를 편리하게 구성하는 방법을
제공하지만, 고급 사용 사례에서는 actor를 직접 조합하거나
자체 빌더 패턴을 구현하여 자신만의 node를 빌드할 수 있습니다.

#### 현재 제한 사항

* actor 및 서비스 API는 **베타** 단계이며 변경될 수 있습니다.
* 표준 `RollupNode`는 개별 actor나 pipeline을 재정의하는 hook을
  제공하지 않으므로, node를 확장하려면 `RollupNode`를 래핑하는 대신
  자체 바이너리에서 actor를 조합해야 합니다.
* 고급 확장성에 대한 문서와 예시는 계속 발전 중입니다. 기여와 피드백을
  환영합니다!

#### 더 알아보기

* actor 구현에 대한 자세한 내용은 [`NodeActor` trait 문서][node-actor]를
  참조하십시오.
* 소스 코드와 더 많은 예시는 [kona-node-service crate][service]에서
  살펴보십시오.

[cli-docs]: https://docs.optimism.io/ko/node-operators/kona-node/configuration.md

[subcommands]: https://docs.optimism.io/ko/node-operators/kona-node/subcommands.md

[service]: https://github.com/ethereum-optimism/optimism/tree/develop/rust/kona/crates/node/service

[node-actor]: https://docs.rs/kona-node-service/latest/kona_node_service/trait.NodeActor.html

[node]: https://github.com/ethereum-optimism/optimism/blob/develop/rust/kona/crates/node/service/src/service/node.rs

[builder]: https://github.com/ethereum-optimism/optimism/blob/develop/rust/kona/crates/node/service/src/service/builder.rs

[kona]: https://github.com/ethereum-optimism/optimism/tree/develop/rust/kona

[packages]: https://github.com/orgs/op-rs/packages?repo_name=kona

[rollup-node]: https://specs.optimism.io/protocol/rollup-node.html

[package]: https://github.com/ethereum-optimism/optimism/pkgs/container/kona%2Fkona-node

[pdocs]: https://github.com/ethereum-optimism/optimism/pkgs/container/kona%2Fkona-node/446969659?tag=latest

[buildx]: https://github.com/ethereum-optimism/optimism/tree/develop/rust/kona/docker

[engine-api]: https://github.com/ethereum/execution-apis/blob/main/src/engine/common.md

[l2o-rpc]: https://specs.optimism.io/protocol/rollup-node.html#l2-output-rpc-method
