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

# 전송 보장

> LaserStream의 전송 보장을 이해하고, 정확히 한 번만 전송, 메시지 순서, 슬롯 알림 동작 및 포크 처리에 대해 알아보세요.

LaserStream은 Geyser 노드와 동일한 전송 보장을 제공합니다. 이 가이드는 LaserStream 스트림의 메시지 전송 동작에서 기대할 수 있는 내용을 다룹니다.

<Info>
  이 보장은 **표준 구독** (트랜잭션, 계정, 슬롯, 블록)에 적용됩니다. [전처리된 트랜잭션](/docs/ko/shred-delivery/preprocessed-transactions) (Shred Delivery의 일부)은 별도의 최선의 노력 기반 전송 보장을 따릅니다.
</Info>

## 정확히 한 번만 전송

LaserStream은 **정확히 한 번만 전송**을 보장합니다. 각 메시지는 스트림에 정확히 한 번씩 전달되며, 중복 메시지를 받거나 메시지가 누락되지 않습니다.

LaserStream은 여러 Solana 노드에 동시에 연결하고, 들어오는 데이터를 중복 제거한 후 스트림으로 전달하여 이를 구현합니다. 이 다중 노드 아키텍처는 단일 실패 지점을 제거하여 전송 정확도를 희생하지 않고 최대 가동 시간을 보장합니다.

## 커밋 수준에 따른 메시지 순서

전송 순서는 메시지의 커밋 수준에 따라 달라집니다.

### 확인됨 및 확정됨

모든 **확인된** 및 **확정된** 메시지는 순서대로 전달됩니다. 이러한 커밋 수준은 온체인 상태의 일관되고 순차적인 보기를 제공합니다.

### 처리됨

모든 **처리된** 메시지는 포크가 없는 경우 오름차순 슬롯 순서로 전송됩니다. 포크가 발생하면, 네트워크가 기준 체인으로 재조직되는 동안 슬롯 순서가 일시적으로 변동될 수 있습니다. 포크가 해결되면, 오름차순 순서가 재개됩니다.

<Warning>
  처리된 커밋 수준에서는 나중에 처리된 슬롯이 건너뛰어지거나 포크될 가능성이 있습니다. Geyser는 포크된 업데이트에 대한 명시적인 롤백 알림을 전송하지 **않습니다**. 애플리케이션이 처리된 수준의 데이터를 소비하는 경우, 일부 업데이트가 최종적으로 포기된 슬롯에 속할 가능성을 고려해야 합니다. 확실성이 필요한 애플리케이션은 **확인됨** 또는 **확정됨** 커밋 수준을 사용하세요.
</Warning>

## 슬롯 내에서의 순서

단일 슬롯 내에서 LaserStream은 계정 업데이트 및 트랜잭션을 다음의 보장으로 제공합니다.

### 트랜잭션 전 계정 업데이트

각 트랜잭션에 대해 야기된 계정 업데이터는 해당 트랜잭션 자체 **전에** 전달됩니다.

```
<accounts updated by tx X> → <tx X> → <accounts updated by tx Y> → <tx Y>
```

### 트랜잭션 간 순서

LaserStream은 [Agave의 Geyser 플러그인](https://docs.solanalabs.com/validator/geyser#ordering-guarantees)과 동일한 순서를 유지합니다. 다른 트랜잭션의 업데이트가 결정론적 순서로 도착하는지는 **쓰기 잠금**에 따라 달라집니다.

* **동일한 쓰기 잠금** (예: 동일한 Raydium 풀에서의 세 가지 거래): 항상 결정적입니다. Agave는 동일한 계정에 쓰는 경우 이들을 순차적으로 실행합니다.
* **다른 쓰기 잠금** (예: 두 개의 관련 없는 트랜잭션): 반드시 결정적이지는 않습니다. Agave는 이를 병렬로 실행할 수 있으며, 스트림 내에서의 업데이트가 섞일 수 있습니다.

완전한 결정적 순서를 재구성하려면, 트랜잭션 데이터의 **블록/트랜잭션 인덱스**를 사용하세요.

### 쓰기 버전 표준화

LaserStream은 다중 노드 아키텍처 전반에서 쓰기 버전을 표준화합니다. 로컬 노드마다 쓰기 버전이 다를 수 있는 원시 Geyser나 Yellowstone과 달리, LaserStream은 처리 수준의 계정 업데이트에 대한 순서를 제공하는 일관된 쓰기 버전을 제공합니다.

<Note>
  **일시적 예외:** 크기가 512KB를 초과하는 계정은 성능상의 이유로 Geyser 플러그인에서 현재 버퍼링되어 있으며, 해당 계정의 결정적 순서에 영향을 미칠 수 있습니다. 이 제한은 곧 제거될 예정입니다.
</Note>

## 슬롯 알림

**처리된 슬롯 알림**은 해당 슬롯의 모든 메시지가 전달된 후 도착합니다. 즉, 처리된 슬롯 알림을 받았을 때 해당 슬롯과 관련된 모든 트랜잭션 및 계정 업데이트 데이터가 이미 스트림으로 전송되었음을 확신할 수 있습니다. 슬롯 알림을 슬롯에 대한 버퍼링된 데이터를 플러시하거나 해제하는 신호로 사용할 수 있습니다.

## 연결 해제 시 데이터 연속성

LaserStream은 최근 슬롯 데이터의 버퍼를 유지하여 최대 **24시간** (\~216,000 슬롯)의 과거 데이터를 [역사적 재생](/docs/ko/laserstream/historical-replay)할 수 있습니다. 애플리케이션이 연결을 끊으면 마지막으로 처리된 슬롯에서 다시 연결하여 데이터를 놓치지 않고 재개할 수 있습니다.

[LaserStream SDK 클라이언트](/docs/ko/laserstream/clients)를 사용하는 경우, 이 복구는 자동으로 처리됩니다. 클라이언트는 슬롯 번호로 스트리밍 위치를 추적하고, 원활하게 다시 연결됩니다. 수동 재연결 로직은 필요하지 않습니다.

## 커밋 수준 참조

| 수준      | 설명                                          | 대기 시간    | 순서                        | 롤백 위험                  |
| ------- | ------------------------------------------- | -------- | ------------------------- | ---------------------- |
| **처리됨** | 노드가 알고 있는 가장 최근 블록에 포함됨; 아직 클러스터 전체의 투표는 없음 | \~400ms  | 오름차순 슬롯 순서 (포크 중 깨질 수 있음) | 슬롯이 건너뛰어지거나 포크될 작은 가능성 |
| **확인됨** | 스테이크의 슈퍼 다수 (≥66%)가 블록에 투표함 (낙관적 확인)        | 몇 초      | 엄격히 순서화됨                  | 무시할 수 있는 수준            |
| **확정됨** | 최소 31개의 추가 확정 블록이 위에 구축됨 (32 투표 잠금)         | \~12-15초 | 엄격히 순서화됨                  | 사실상 되돌릴 수 없음           |
