---
title: "이더리움 가상 머신(EVM)이란?"
description: "EVM에 관한 모든 것"
---

## **EVM - 여러 이름을 가진 기계**

세계의 컴퓨터. 멈출 수 없는 기계. Ethereum의 심장. Ethereum Virtual Machine\(EVM\)은 여러 이름을 가지고 있으며, 이는 Ethereum 네트워크에서 EVM이 갖는 중요성을 보여준다. EVM은 Ethereum을 Bitcoin처럼 단순한 '분산 원장'이 아니라 '분산 상태 머신'으로 만드는 핵심 기능이다.

EVM을 통해 개발자는 [Solidity](https://www.alchemy.com/overviews/solidity)라는 프로그래밍 언어로 스마트 컨트랙트를 작성할 수 있다. 스마트 컨트랙트의 대표적인 활용 사례는 토큰의 생성과 교환을 관리하는 것이다. 많은 애플리케이션과 프로토콜이 자신의 목표에 중요한 행동을 한 사용자에게 보상하기 위해 토큰을 사용한다. EVM이 없다면 이 중 어느 것도 가능하지 않다.

EVM의 힘을 더 잘 이해하기 위해 핵심 구성 요소들을 살펴보자.

## **가상 머신 - EVM의 플랫폼**

분산 네트워크는 무너뜨리기 어렵다. 만약 무너뜨리려 한다면 현재 온라인에 있는 모든 노드를 제거하고, 새로운 노드가 생겨나는 것을 막을 방법을 찾아야 한다.

<ImageBlock
  src="https://media.alchemy.com/1703769963-distributed-networks.png"
  alt="중앙형, 분산형, 분산 네트워크 토폴로지를 비교한 다이어그램"
  width={1445}
  height={420}
  caption="분산 네트워크"
/>

분산 네트워크를 확장하는 좋은 방법은 가상 머신\(VM\)을 사용하는 것이다. VM은 서로 다른 운영체제와 하드웨어에서, 그리고 어느 지리적 위치에서든 실행될 수 있기 때문이다. VM은 코드와 이를 실행하는 머신 사이의 추상화 계층으로 작동한다.

VM은 저장소, 메모리, CPU를 갖춘 물리적 머신과 유사한 방식으로 동작하지만, 순수하게 코드로만 작동한다. 이론적으로 누구나 VM을 실행할 수 있기 때문에 분산 네트워크의 플랫폼으로서 이동성이 매우 높다. EVM은 스마트 컨트랙트를 실행하기 위해 분산된 노드 네트워크를 사용한다.

## **스마트 컨트랙트 - EVM의 앱**

스마트 컨트랙트는 중앙 기관 없이도 당사자들이 서로 거래할 수 있도록 하는 자기 실행 코드 라인이다. 스마트 컨트랙트 내부에는 온체인 또는 오프체인의 특정 조건이 충족되면 실행되는 정의된 연산 목록이 있다. 이러한 연산에는 특정 주소로 자금을 전송하거나, 다른 컨트랙트와 통신하거나, 새로운 컨트랙트를 생성하는 것 등이 포함될 수 있다. 제3자가 거래를 실행하는 대신, 누구든 발신자가 스마트 컨트랙트의 주소로 자금을 보내 이러한 연산을 트리거할 수 있다.

<ImageBlock
  src="https://media.alchemy.com/1703770046-how-smart-contract-works.png"
  alt="스마트 컨트랙트가 조건 충족 시 자동 실행되는 과정을 나타낸 다이어그램"
  width={820}
  height={521}
  caption="스마트 컨트랙트 작동 방식"
/>

스마트 컨트랙트가 안전한 거래 방식인 이유는 코드가 변경되거나 수정될 수 없다는 사실 때문이다. 스마트 컨트랙트에는 항상 예상되는 결과가 있으며, 이는 코드에 내장된 신뢰라 할 수 있다. 컨트랙트가 실행될 때마다 EVM의 상태가 변경된다고 말한다.

EVM은 스마트 컨트랙트 코드 실행의 결과로 발생하는 상태 변화를 계산하는 역할을 하기 때문에 '상태 머신'이라고 설명할 수 있다. 즉, EVM은 계정의 이더 잔액, 스마트 컨트랙트의 데이터 저장소, 그리고 계정 및 컨트랙트 수준에서 완료된 거래를 유지 관리한다. 이러한 모든 동작이 네트워크의 '상태'를 변화시키는 것이다.

<ImageBlock
  src="https://media.alchemy.com/1703770183-evm-transactions.png"
  alt="EVM 트랜잭션이 Ethereum 네트워크 상태를 변경하는 과정을 나타낸 다이어그램"
  width={1080}
  height={607}
  caption="EVM 트랜잭션"
/>

스마트 컨트랙트는 주로 Solidity 언어로 작성된다. EVM은 Solidity를 직접 실행할 수 없으므로, 먼저 코드를 opcode라는 하위 수준의 머신 명령어로 컴파일해야 한다.

## **Opcode - EVM의 언어**

EVM은 널리 [Turing Complete](https://en.wikipedia.org/wiki/Turing_completeness)라고 불리지만, 더 정확히는 준 Turing Complete에 가깝다. 이는 EVM이 이론적으로 어떤 계산 문제도 해결할 수 있다는 의미다. 이는 EVM opcode라는 머신 수준 명령어를 실행함으로써 이루어진다.

EVM opcode는 스마트 컨트랙트나 거래의 특정 작업을 완료하도록 EVM을 돕는다. 현재 EVM이 실행할 수 있는 opcode는 약 150개다. 이들은 산술 연산, 정지, 로깅, 복제, push, 메모리, 비교, 교환 등 다양한 연산을 다루며, 블록 및 환경 정보를 조회하는 데도 사용된다. opcode 목록은 [여기](https://github.com/wolflo/evm-opcodes/blob/main/gas.md)에서 확인할 수 있다.

<ImageBlock
  src="https://media.alchemy.com/1703770312-evm-opcodes.jpeg"
  alt="EVM이 실행하는 기계 수준 명령어인 EVM 옵코드를 나타낸 다이어그램"
  width={1600}
  height={916}
  caption="EVM 옵코드"
/>

효율성을 위해 EVM은 바이트코드를 opcode로 변환하며, 각 opcode에는 바이트코드 내에서 하나 이상의 바이트가 할당된다. 각 opcode 연산은 EVM에 의해 실행되기 위해 특정量의 gas를 필요로 한다. gas에 대해 들어봤겠지만, 정확히 무엇일까?

## **Gas - EVM의 연료**

Gas는 EVM과 관련해 가장 많이 언급되면서도 가장 잘 이해되지 않는 주제일 것이다. 이 글을 쓰는 시점 기준으로 gas 가격은 매우 높을 수 있지만, 이를 개선하려는 노력도 있다. 높은 gas 가격은 Ethereum이 대중적으로 채택되는 데 큰 장벽이 될 수 있다. 그렇다면 왜 gas 가격을 지불해야 하며, 무엇이 가격을 그렇게 높게 만드는 것일까?

Gas의 목적은 각 Ethereum 노드가 수행하는 스마트 컨트랙트 연산에 대한 수수료 역할을 하는 것이다. 공격자가 오랜 계산 시간이 필요한 복잡한 컨트랙트를 대량으로 배포해 네트워크를 정지시키는 것을 막기 위해 계산에 대한 수수료가 필요하다. 이러한 유형의 DDoS 공격은 실행 비용이 매우 높기 때문에 억제된다.

각 opcode에는 [gas 비용](https://github.com/wolflo/evm-opcodes/blob/main/gas.md)이 할당되어 있으며, 더 복잡한 opcode일수록 비용이 높다. 예를 들어 단순한 덧셈은 3 gas가 들고, 모든 거래는 기본적으로 21,000 gas에서 시작한다. 대부분의 불만은 gas 자체가 아니라 거래를 성공적으로 완료하는 데 필요한 gas 한도에 관한 것이다.

Gas 한도는 발신자가 거래를 실행하고 검증하기 위해 지불할 의사가 있는 최대 gas 양이다. Gas 수수료를 구하려면 총 gas 비용\(연산의 기본값\)에 gas 가격\(해당 연산을 완료하는 데 드는 비용\)을 곱하면 된다. 실제 자동차에 기름을 넣을 때 기름 자체의 가격과 목적지까지 가는 데 필요한 기름의 양이 있는 것과 비슷하다.

Gas 수수료 = 총 Gas 비용 x Gas 가격

Gas 수수료는 거래 정보가 유효한지, EVM에서 오류나 예외가 발생하지 않는지, 발신자가 계산 비용을 지불할 충분한 자금을 가지고 있는지를 확인하는 검증자에게 보상하기 위한 것이다. 발신자가 높은 gas 한도를 설정하면 이는 해당 연산이 복잡하다는 것을 나타내며, 이는 검증자가 높은 보상을 위해 해당 거래를 처리하도록 유도한다.

<ImageBlock
  src="https://media.alchemy.com/1703770395-evm-gas.png"
  alt="가스비가 EVM 연산에 대해 검증자에게 보상하는 과정을 나타낸 다이어그램"
  width={1080}
  height={607}
  caption="EVM 가스"
/>

네트워크 활동이 많을 때, 검증자는 대기 중인 거래 풀 중에서 더 높은 gas 한도를 가진 거래를 단순히 선택할 수 있다. 따라서 gas 수수료는 수요와 공급에 의해 영향을 받는다. 다행히 소비되지 않은 gas는 발신자에게 환불된다.

미리 지불한 gas 한도에 도달하면, 검증자는 자신의 작업에 대해 여전히 보상을 받지만 거래는 완료되지 않는다. 이런 점에서 EVM은 준 Turing Complete인데, EVM이 완료할 수 있는 계산이 발신자가 지불할 의사가 있는 금액만큼으로 제한되기 때문이다.

## **EVM의 활용 사례**

지금까지 EVM의 각 구성 요소를 살펴봤으니, 이제 이 부분들이 어떻게 결합되어 Ethereum 프로젝트를 구동하는지 살펴보자.

### **ERC-20 토큰**

[ERC-20](https://www.alchemy.com/overviews/erc20-solidity) 토큰은 주소 간에 전송될 수 있고, 발행량이 고정되어 있으며, 네트워크 전체에서 동일한 가치를 갖는 토큰이다. EVM 상에서 정의된 데이터 구조를 따르는 스마트 컨트랙트가 ERC-20 토큰을 생성하는 데 사용된다. 이 데이터 구조는 토큰의 이름, 배포, 공급량, 모니터링을 제어한다.

여러 애플리케이션과 프로젝트가 사용자에게 인센티브를 주기 위해 ERC-20 토큰을 사용한다. 탈중앙화 비디오 스트리밍 네트워크인 [Livepeer](https://www.alchemy.com/dapps/livepeer)는 네트워크에 리소스를 공급하는 이들에게 인센티브를 주기 위해 Livepeer 토큰\(LPT\)을 사용한다. 스마트 컨트랙트 기반의 탈중앙화 보험인 [Nexus Mutual](https://www.alchemy.com/dapps/nexus-mutual)은 사용자가 보장을 구매하고 청구를 할 수 있도록 NXM 토큰을 사용한다.

### 탈중앙화 거래소

탈중앙화 거래소는 사용자가 ERC-20 토큰을 교환할 수 있도록 스마트 컨트랙트를 배포한다. 이러한 스마트 컨트랙트는 제3자의 통제 없이 사용자가 특정 토큰의 유동성 풀에 기여할 수 있게 하기 때문에 Automated Market Maker\(AMM\)라고 불린다. [Uniswap](https://www.alchemy.com/dapps/uniswap)과 [SushiSwap](https://ethereum.org/en/developers/docs/standards/tokens/erc-721/) 같은 인기 있는 거래소들이 이 AMM 모델의 적용 사례다.

<ImageBlock
  src="https://media.alchemy.com/1703770478-automated-market-maker.png"
  alt="자동화된 마켓 메이커가 유동성 풀을 통해 토큰 스왑을 매칭하는 과정을 나타낸 다이어그램"
  width={1236}
  height={1128}
  caption="자동화된 마켓 메이커"
/>

### **ERC-721 토큰**

또 다른 널리 알려진 토큰 표준은 ERC-20의 대체 불가능한 사촌 격인 [ERC-721](https://ethereum.org/en/developers/docs/standards/tokens/erc-721/)이다. 이 스마트 컨트랙트는 블록체인 전체에서 고유한 가치를 갖는 토큰인 NFT\(Non-fungible Token\)를 발행하는 데 사용된다. 고유한 예술 작품을 만드는 것이 이러한 토큰의 가장 큰 활용 사례다. [Axie Infinity](https://www.alchemy.com/dapps/axie-infinity)와 God Unchained 같은 게임 분야의 다른 프로젝트들도 게임 내 수집품으로 이 토큰을 사용한다.

### EVM, 그리고 그 너머

EVM은 Ethereum을 단순한 블록체인이 아닌 하나의 플랫폼으로 만든다. 하지만 EVM이 완벽한 시스템은 아니다. 거래 속도와 네트워크 처리량과 관련해 많은 과제가 남아 있다. 이는 개발 커뮤니티와 [Ethereum 로드맵](https://ethereum.org/en/roadmap/)에서 초점을 맞추고 있는 영역이다. Ethereum이 우리가 서로 거래하는 방식을 혁신하겠다는 약속을 실현하려면, 그것은 EVM의 개선을 바탕으로 이루어질 것이다.
