---
title: "블록체인 데이터 저장 전략"
description: "블록체인을 사용하여 데이터를 저장하는 방법에는 여러 가지가 있습니다. 이 글에서는 다양한 전략, 비용 및 장단점, 그리고 안전하게 사용하기 위한 요구 사항을 비교합니다."
lang: ko
---

정보를 블록체인에 직접 저장하거나 블록체인에 의해 보호되는 방식으로 저장하는 방법에는 여러 가지가 있습니다.

- EIP-4844 블롭
- 콜 데이터
- L1 메커니즘을 활용한 오프체인
- 컨트랙트 "코드"
- 이벤트
- EVM 저장소

어떤 방법을 사용할지 선택하는 기준은 다음과 같습니다.

- 정보의 출처. 콜 데이터의 정보는 블록체인 자체에서 직접 가져올 수 없습니다.
- 정보의 목적지. 콜 데이터는 이를 포함하는 트랜잭션에서만 사용할 수 있습니다. 이벤트는 온체인에서 전혀 접근할 수 없습니다.
- 어느 정도의 번거로움을 감수할 수 있는가? 풀 노드를 실행하는 컴퓨터는 브라우저에서 실행되는 애플리케이션의 경량 클라이언트보다 더 많은 처리를 수행할 수 있습니다.
- 모든 노드에서 정보에 쉽게 접근할 수 있도록 해야 하는가?
- 보안 요구 사항.

## 보안 요구 사항 {#security-requirements}

일반적으로 정보 보안은 세 가지 속성으로 구성됩니다.

- _기밀성(Confidentiality)_, 승인되지 않은 주체는 정보를 읽을 수 없습니다. 이는 많은 경우에 중요하지만, 여기서는 예외입니다. _블록체인에는 비밀이 없습니다_. 블록체인은 누구나 상태 전환을 검증할 수 있기 때문에 작동하며, 따라서 비밀을 직접 저장하는 데 사용하는 것은 불가능합니다. 기밀 정보를 블록체인에 저장하는 방법이 있긴 하지만, 모두 최소한 키를 저장하기 위해 어떤 오프체인 구성 요소에 의존합니다.

- _무결성(Integrity)_, 정보가 정확하며, 승인되지 않은 주체나 승인되지 않은 방식(예: `Transfer` 이벤트 없이 [ERC-20 토큰](https://eips.ethereum.org/EIPS/eip-20#events)을 전송하는 것)으로 변경될 수 없습니다. 블록체인에서는 모든 노드가 모든 상태 변경을 검증하므로 무결성이 보장됩니다.

- _가용성(Availability)_, 승인된 주체라면 누구든 정보에 접근할 수 있습니다. 블록체인에서 이는 일반적으로 모든 [풀 노드](https://ethereum.org/developers/docs/nodes-and-clients/#full-node)에서 정보를 사용할 수 있도록 함으로써 달성됩니다.

여기에 소개된 다양한 솔루션들은 해시가 L1에 게시되기 때문에 모두 뛰어난 무결성을 갖추고 있습니다. 하지만 가용성 보장 수준은 서로 다릅니다.

## 전제 조건 {#prerequisites}

[블록체인 기초](/developers/docs/intro-to-ethereum/)에 대한 충분한 이해가 필요합니다. 또한 이 페이지는 독자가 [블록](/developers/docs/blocks/), [트랜잭션](/developers/docs/transactions/) 및 기타 관련 주제에 익숙하다고 가정합니다.

## EIP-4844 블롭 {#eip-4844-blobs}

[덴쿤 하드포크](https://github.com/ethereum/consensus-specs/blob/master/specs/deneb/beacon-chain.md)를 시작으로 이더리움 블록체인에는 [EIP-4844](https://eips.ethereum.org/EIPS/eip-4844)가 포함되어, 제한된 수명(초기에는 약 [18일](https://github.com/ethereum/consensus-specs/blob/master/specs/deneb/p2p-interface.md#configuration))을 가진 데이터 블롭이 이더리움에 추가되었습니다. 이러한 블롭은 유사한 메커니즘을 사용하지만 [실행 가스](/developers/docs/gas)와는 별도로 가격이 책정됩니다. 이는 임시 데이터를 게시하는 저렴한 방법입니다.

EIP-4844 블롭의 주요 사용 사례는 롤업이 트랜잭션을 게시하는 것입니다. [옵티미스틱 롤업](/developers/docs/scaling/optimistic-rollups)은 자체 블록체인에 트랜잭션을 게시해야 합니다. 롤업의 [시퀀서](https://docs.optimism.io/connect/resources/glossary#sequencer)가 잘못된 상태 루트를 게시할 경우 [검증자](https://docs.optimism.io/connect/resources/glossary#validator)가 오류를 수정할 수 있도록, [이의 제기 기간(challenge period)](https://docs.optimism.io/connect/resources/glossary#challenge-period) 동안 누구나 해당 트랜잭션에 접근할 수 있어야 합니다.

하지만 이의 제기 기간이 지나고 상태 루트가 완결된 후에는, 이러한 트랜잭션을 알아야 하는 남은 목적은 체인의 현재 상태를 복제하는 것뿐입니다. 이 상태는 훨씬 적은 처리량으로 체인 노드에서도 얻을 수 있습니다. 따라서 트랜잭션 정보는 [블록 탐색기](/developers/docs/data-and-analytics/block-explorers)와 같은 몇몇 곳에 여전히 보존되어야 하지만, 이더리움이 제공하는 수준의 검열 저항성에 대한 비용을 지불할 필요는 없습니다.

[영지식 롤업(Zero-knowledge rollups)](/developers/docs/scaling/zk-rollups/#data-availability) 역시 다른 노드가 기존 상태를 복제하고 유효성 증명을 검증할 수 있도록 트랜잭션 데이터를 게시하지만, 이 또한 단기적인 요구 사항입니다.

작성 시점을 기준으로 EIP-4844에 게시하는 비용은 바이트당 1 Wei(10<sup>-18</sup> ETH)이며, 이는 [블롭을 게시하는 트랜잭션을 포함하여 모든 트랜잭션에 소요되는 21,000 실행 가스](https://eth.blockscout.com/tx/0xf6cfaf0431c73dd1d96369a5e6707d64f463ccf477a4131265397f1d81466929?tab=index)에 비하면 무시할 수 있는 수준입니다. 현재 EIP-4844 가격은 [blobscan.com](https://blobscan.com/blocks)에서 확인할 수 있습니다.

다음은 유명 롤업들이 게시한 블롭을 확인할 수 있는 주소입니다.

| 롤업                               | 메일박스 주소                                                                                                         |
| ------------------------------------ | ----------------------------------------------------------------------------------------------------------------------- |
| [옵티미즘](https://www.optimism.io/) | [`0xFF00000000000000000000000000000000000010`](https://blobscan.com/address/0xFF00000000000000000000000000000000000010) |
| [아비트럼](https://arbitrum.io/)     | [`0x1c479675ad559DC151F6Ec7ed3FbF8ceE79582B6`](https://blobscan.com/address/0x1c479675ad559DC151F6Ec7ed3FbF8ceE79582B6) |
| [Base](https://base.org/)            | [`0xFF00000000000000000000000000000000008453`](https://blobscan.com/address/0xFF00000000000000000000000000000000008453) |

## 콜 데이터 {#calldata}

콜 데이터는 트랜잭션의 일부로 전송되는 바이트를 의미합니다. 이는 해당 트랜잭션을 포함하는 블록 내에 블록체인의 영구적인 기록의 일부로 저장됩니다.

이것은 블록체인에 데이터를 영구적으로 기록하는 가장 저렴한 방법입니다. 바이트당 비용은 4 실행 가스(바이트가 0인 경우) 또는 16 가스(그 외의 값)입니다. 데이터가 압축된 경우(일반적인 관행), 모든 바이트 값이 나타날 확률이 동일하므로 평균 비용은 바이트당 약 15.95 가스입니다.

작성 시점을 기준으로 가격은 12 Gwei/가스 및 2300 $/ETH이며, 이는 킬로바이트당 약 45센트의 비용이 든다는 것을 의미합니다. EIP-4844 이전에는 이것이 가장 저렴한 방법이었기 때문에, 롤업은 [오류 이의 제기(fault challenges)](https://docs.optimism.io/stack/protocol/overview#fault-proofs)를 위해 사용할 수 있어야 하지만 온체인에서 직접 접근할 필요는 없는 트랜잭션 정보를 저장하는 데 이 방법을 사용했습니다.

다음은 유명 롤업들이 게시한 트랜잭션을 확인할 수 있는 주소입니다.

| 롤업                               | 메일박스 주소                                                                                                               |
| ------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------- |
| [옵티미즘](https://www.optimism.io/) | [`0xFF00000000000000000000000000000000000010`](https://eth.blockscout.com/address/0xFF00000000000000000000000000000000000010) |
| [아비트럼](https://arbitrum.io/)     | [`0x1c479675ad559DC151F6Ec7ed3FbF8ceE79582B6`](https://eth.blockscout.com/address/0x1c479675ad559DC151F6Ec7ed3FbF8ceE79582B6) |
| [Base](https://base.org/)            | [`0xFF00000000000000000000000000000000008453`](https://eth.blockscout.com/address/0xFF00000000000000000000000000000000008453) |

## L1 메커니즘을 활용한 오프체인 {#offchain-with-l1-mechs}

보안의 장단점에 따라, 정보를 다른 곳에 두고 필요할 때 데이터를 사용할 수 있도록 보장하는 메커니즘을 사용하는 것이 허용될 수 있습니다. 이것이 작동하려면 두 가지 요구 사항이 있습니다.

1. <em>입력 커밋먼트(input commitment)</em>라고 불리는 데이터의 [해시](https://en.wikipedia.org/wiki/Cryptographic_hash_function)를 블록체인에 게시합니다. 이는 단일 32바이트 단어일 수 있으므로 비용이 많이 들지 않습니다. 입력 커밋먼트를 사용할 수 있는 한, 동일한 값으로 해시되는 다른 데이터를 찾는 것은 불가능하므로 무결성이 보장됩니다. 따라서 잘못된 데이터가 제공되면 이를 감지할 수 있습니다.

2. 가용성을 보장하는 메커니즘을 갖춥니다. 예를 들어, [Redstone](https://redstone.xyz/docs/what-is-redstone)에서는 모든 노드가 가용성 이의 제기를 제출할 수 있습니다. 시퀀서가 기한 내에 온체인에서 응답하지 않으면 입력 커밋먼트가 폐기되므로, 해당 정보는 게시되지 않은 것으로 간주됩니다.

옵티미스틱 롤업의 경우 상태 루트에 대해 최소 한 명의 정직한 검증자가 있다는 것에 이미 의존하고 있기 때문에 이는 허용됩니다. 이러한 정직한 검증자는 블록을 처리할 데이터를 가지고 있는지 확인하고, 오프체인에서 정보를 사용할 수 없는 경우 가용성 이의 제기를 발행합니다. 이러한 유형의 옵티미스틱 롤업을 [플라즈마](/developers/docs/scaling/plasma/)라고 합니다.

## 컨트랙트 코드 {#contract-code}

한 번만 작성하면 되고, 덮어쓸 일이 없으며, 온체인에서 사용할 수 있어야 하는 정보는 컨트랙트 코드로 저장할 수 있습니다. 즉, 데이터가 포함된 "스마트 컨트랙트"를 생성한 다음 [`EXTCODECOPY`](https://www.evm.codes/#3c?fork=shanghai)를 사용하여 정보를 읽습니다. 코드를 복사하는 것이 비교적 저렴하다는 장점이 있습니다.

메모리 확장 비용을 제외하고, `EXTCODECOPY`는 컨트랙트에 처음 접근할 때("콜드(cold)" 상태일 때) 2600 가스가 소요되며, 동일한 컨트랙트에서 후속 복사를 수행할 때는 100 가스에 32바이트 단어당 3 가스가 추가로 소요됩니다. 바이트당 15.95 가스가 드는 콜 데이터와 비교할 때, 이는 약 200바이트부터 더 저렴해집니다. [메모리 확장 비용 공식](https://www.evm.codes/about#memoryexpansion)에 따르면, 4MB 이상의 메모리가 필요하지 않은 한 메모리 확장 비용은 콜 데이터를 추가하는 비용보다 적습니다.

물론 이것은 데이터를 _읽는_ 데 드는 비용일 뿐입니다. 컨트랙트를 생성하는 데는 약 32,000 가스 + 바이트당 200 가스가 소요됩니다. 이 방법은 동일한 정보를 여러 트랜잭션에서 여러 번 읽어야 할 때만 경제적입니다.

컨트랙트 코드는 `0xEF`로 시작하지 않는 한 의미 없는 내용이어도 상관없습니다. `0xEF`로 시작하는 컨트랙트는 훨씬 더 엄격한 요구 사항을 가진 [이더리움 객체 형식(ethereum object format)](https://notes.ethereum.org/@ipsilon/evm-object-format-overview)으로 해석됩니다.

## 이벤트 {#events}

[이벤트](https://docs.alchemy.com/docs/solidity-events)는 스마트 컨트랙트에서 발생(emit)하며 오프체인 소프트웨어에서 읽습니다.
오프체인 코드가 이벤트를 수신할 수 있다는 것이 장점입니다. 비용은 [가스](https://www.evm.codes/#a0?fork=cancun)로 지불되며, 375 가스에 데이터 바이트당 8 가스가 추가됩니다. 12 Gwei/가스 및 2300 $/ETH를 기준으로 하면, 이는 1센트에 킬로바이트당 22센트가 추가되는 셈입니다.

## 저장소 {#storage}

스마트 컨트랙트는 [영구 저장소](https://docs.alchemy.com/docs/smart-contract-storage-layout#what-is-storage-memory)에 접근할 수 있습니다. 하지만 비용이 매우 비쌉니다. 이전에 비어 있던 저장소 슬롯에 32바이트 단어를 쓰는 데 [22,100 가스가 소요](https://www.evm.codes/#55?fork=cancun)될 수 있습니다. 12 Gwei/가스 및 2300 $/ETH를 기준으로 하면, 이는 쓰기 작업당 약 61센트, 즉 킬로바이트당 19.5달러에 해당합니다.

이것은 이더리움에서 가장 비싼 형태의 저장소입니다.

## 요약 {#summary}

이 표는 다양한 옵션의 차이점과 장단점을 요약한 것입니다.

| 저장소 유형                | 데이터 출처      | 가용성 보장                                                                                                             | 온체인 가용성                                             | 추가 제한 사항                                                  |
| --------------------------- | ------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------- | ----------------------------------------------------------------------- |
| EIP-4844 블롭              | 오프체인            | [약 18일](https://github.com/ethereum/consensus-specs/blob/master/specs/deneb/p2p-interface.md#configuration) 동안 이더리움이 보장 | 해시만 사용 가능                                           |                                                                         |
| 콜 데이터                    | 오프체인            | 이더리움이 영구적으로 보장(블록체인의 일부)                                                                                | 컨트랙트에 기록된 경우 해당 트랜잭션에서만 사용 가능 |                                                                         |
| L1 메커니즘을 활용한 오프체인 | 오프체인            | 이의 제기 기간 동안 "최소 한 명의 정직한 검증자" 보장                                                                        | 해시만                                                        | 이의 제기 메커니즘에 의해 보장되며, 이의 제기 기간 동안에만 유효 |
| 컨트랙트 코드               | 온체인 또는 오프체인 | 이더리움이 영구적으로 보장(블록체인의 일부)                                                                                | 예                                                              | "무작위" 주소에 기록되며, `0xEF`로 시작할 수 없음                 |
| 이벤트                      | 온체인             | 이더리움이 영구적으로 보장(블록체인의 일부)                                                                                | 아니요                                                               |                                                                         |
| 저장소                     | 온체인             | 이더리움이 영구적으로 보장(블록체인의 일부이자 덮어쓸 때까지 현재 상태 유지)                                        | 예                                                              |                                                                         |