이더리움 이더리움 가상 머신(EVM) 데이터 저장 메커니즘 개요

이더리움 가상 머신(EVM)은 스마트 계약을 실행하는 런타임 환경으로, 효율적이고 안전한 데이터 저장 메커니즘은 전체 이더리움 생태계의 안정적인 운영을 위한 초석입니다. EVM이 데이터를 어떻게 처리하고 저장하는지 이해하는 것은 스마트 계약 개발자가 계약 성능을 최적화하고, 가스 비용을 절감하며, 계약의 보안을 보장하는 데 매우 중요합니다.EVM은 주로 다섯 가지 데이터 저장 영역을 제공하며, 각각 고유한 특성, 수명 주기 및 가스 비용 모델을 가지고 있습니다.

Storage: 스마트 계약의 영구 저장소

以太坊虚拟机(EVM)数据存储机制深度解析

Storage는 스마트 계약의 가장 핵심적인 저장 영역으로, 계약의 영구 상태 데이터를 저장하는 데 사용됩니다. 주요 특징은 다음과 같습니다.

  • 영속성: 데이터는 블록체인에 영구적으로 저장되며, 서로 다른 함수 호출 및 트랜잭션 간에도 지속적으로 액세스할 수 있습니다.
  • 구조: 각 스마트 계약은 독립적인 저장 공간을 가지며, 거대한 키-값 매핑으로 구성되어 있습니다. 총 2^256개의 슬롯이 있으며, 각 슬롯의 크기는 32바이트(256비트)입니다.
  • 데이터 구조 저장 방식:
    • 기본 유형: 고정 크기의 변수(예:uint256)는 선언된 순서대로 슬롯을 차례로 차지하며, 슬롯 0부터 시작합니다. EVM은 공간과 가스를 절약하기 위해 32바이트 미만의 변수를 동일한 슬롯에 묶어 저장하려고 시도합니다.
    • 정적 배열: 요소는 순서대로 연속된 슬롯에 저장됩니다.
    • 동적 배열: 첫 번째 슬롯에는 배열의 길이가 저장되며, 실제 요소는keccak256(slot)계산된 위치부터 저장됩니다.
    • 매핑(Mappings): 해시 테이블과 유사하며, 키-값 쌍은 비연속적으로 저장됩니다. 각 키-값 쌍의 저장 위치는 키와 매핑이 저장된 위치에 대한 해시 계산을 통해 결정됩니다.
    • 구조체(Structs): 구조체 내의 변수는 순서대로 저장되며, EVM은 여러 변수를 단일 32바이트 저장 슬롯에 묶어 저장하려고 시도합니다.
  • 가스 비용: 스토리지(Storage)에 데이터를 기록하는 데 드는 가스 비용이 가장 높습니다. 하나의 저장 슬롯 값을 0에서 0이 아닌 값으로 수정하는 데 약 20,000 가스가 소요됩니다. 첫 번째 읽기(cold SLOAD) 비용은 약 2,100 가스이며, 이후 읽기(warm SLOAD) 비용은 약 100 가스입니다.

2026년 4월 현재, 스토리지 가격 책정 및 가스 계산에 대한 설계는 여전히 탐구 중이며, 실시간 가스 계산, 지연 가스 계산, 스토리지 비용 분리, 수량 기반 스토리지 증가 제어 등의 방법을 통해 EVM 스토리지 증가를 최적화하는 것을 목표로 하고 있습니다.

Memory: 함수 실행 중 사용되는 임시 메모리

Memory는 임시적이고 가변적인 저장 영역으로, 데이터는 계약 함수 실행 기간 동안에만 존재합니다. 함수 실행이 종료되면 Memory 내의 데이터는 즉시 해제됩니다.

以太坊虚拟机(EVM)数据存储机制深度解析

  • 용도: 중간 계산, 임시 변수 및 단일 함수 호출 내의 데이터 조작에 적합합니다.
  • 가스 비용: 스토리지보다 저렴하지만, 메모리 사용량이 증가함에 따라 가스 비용은 제곱 비례로 증가합니다.

Calldata: 외부 함수 호출의 읽기 전용 매개변수

Calldata는 읽기 전용이며 변경 불가능한 특수한 데이터 영역으로, 주로 외부 함수 호출의 매개변수를 저장하는 데 사용됩니다. 이는 바이트 단위로 주소 지정 가능한 공간으로, Memory보다 효율적이며 특히 동적 데이터를 전달해야 하고 수정이 필요 없는 경우에 적합합니다.

  • 용도: 외부 함수 호출의 입력 매개변수.
  • 가스 비용: 메모리보다 저렴합니다. 0이 아닌 각 바이트당 Calldata 비용은 16 가스이며, 0바이트는 4 가스입니다.

Stack: EVM의 실행 스택

以太坊虚拟机(EVM)数据存储机制深度解析

EVM은 스택 기반의 가상 머신이며, 스택(Stack)은 후입선출(LIFO) 데이터 구조로, 스마트 계약 실행 과정에서 임시 값을 저장하는 데 사용됩니다. EVM의 오퍼코드(Opcode)는 스택상의 데이터를 직접 조작합니다.

  • 특성: 각 스택 요소는 32바이트이며, 최대 깊이는 1024개 요소입니다.
  • 제한 사항: 스택은 배열, 문자열 또는 맵과 같은 복합 유형을 직접 저장할 수 없습니다.
  • 가스 비용: 연산에 드는 가스 비용은 상대적으로 낮지만, 깊이 제한이 있습니다.

Transient Storage: 단일 트랜잭션 수명 주기 내의 일시적 저장소

EIP-1153을 통해 도입된 일시 저장소(Transient Storage)는 비영구적 저장소로, 데이터는 단일 트랜잭션이 지속되는 동안에만 존재하며 트랜잭션이 종료되면 즉시 삭제됩니다. 이는 데이터를 블록체인에 영구적으로 기록할 필요 없이, 동일한 트랜잭션 내의 서로 다른 함수 호출 간에 데이터를 공유할 수 있는 저비용 방식을 제공합니다.

  • 가용성: Solidity v0.8.30부터 값형(예:uint256, bool)에 대한 일시적 저장을 지원하며,transient키를 통해 액세스할 수 있습니다. 참조형에 대한 지원은 향후 버전에서 제공될 예정입니다.
  • 가스 비용: 스토리지의 영구적 기록과 비교할 때, 일시적 저장소는 온체인 상태를 영구적으로 수정하지 않기 때문에 비용이 현저히 낮습니다.

가스 비용 비교 및 최적화 전략

以太坊虚拟机(EVM)数据存储机制深度解析

서로 다른 저장 유형 간의 가스 비용 차이를 이해하는 것은 스마트 계약 개발자가 최적화를 수행하는 데 핵심입니다.Storage의 쓰기 비용이 가장 높으므로, 불필요한 온체인 저장은 최대한 줄여야 합니다. Memory와 Calldata는 임시 데이터 및 함수 매개변수 전달에 적합하며, 그중 Calldata는 읽기 전용 특성 덕분에 대량의 동적 데이터를 전달할 때 일반적으로 비용 효율성이 더 높습니다. Transient Storage는 단일 트랜잭션 내의 함수 간 데이터 공유를 위한 새로운 저비용 대안을 제공합니다.

스마트 계약 개발자는 데이터의 영속성, 가변성, 접근 빈도 및 가스 비용을 고려하여 적절한 저장 위치를 선택해야 합니다.예를 들어, 슬롯 사용을 최소화하기 위해 구조체 변수를 재배열하고, 가능한 한 정적 배열을 사용하며, 맵을 현명하게 활용하는 것은 모두 저장소 레이아웃을 최적화하고 가스 비용을 절감하는 효과적인 방법입니다. 또한, 감사자는 잠재적인 취약점과 가스 최적화 기회를 식별하기 위해 EVM의 메모리 모델과 저장 메커니즘을 깊이 이해해야 합니다.