TON 가상 머신(TVM)이란? 완벽 가이드 (2026)
— By Tony Rabbit in Tutorials

TVM은 모든 TON 스마트 계약을 실행하는 엔진입니다. 이 가이드는 스택 모델, 비동기 메시지 전송, 셀 기반 데이터 레이아웃, 가스 계량 및 TVM과 EVM의 비교를 설명합니다.
TVM(TON 가상 머신)은 The Open Network에서 모든 스마트 계약을 실행하는 엔진입니다. EVM, SVM 및 기타 주요 가상 머신과는 진정으로 다릅니다. 주로 TON의 설계 철학이 비동기적이기 때문입니다: 계약은 동기 함수 호출을 하는 대신 메시지를 전달합니다. TVM을 이해하는 것은 TON 개발을 블랙 박스로 취급하는 것과 네트워크의 병렬성과 잘 작동하는 계약을 작성하는 것의 차이를 의미합니다.
간단한 답변: TVM은 TON 스마트 계약을 실행하는 스택 기반 가상 머신입니다. 모든 것이 작은 조각(최대 1023비트)으로 저장되고 최대 네 개의 다른 셀에 대한 참조가 있는 셀 기반 데이터 레이아웃을 사용합니다. 실행은 비동기적입니다: 계약은 메시지를 수신하고 완료될 때까지 실행되며 새로운 메시지를 방출할 수 있습니다. 계약 간에는 동기 호출이 없습니다. 가스 계량은 계약당 메시지당이며, 사용하지 않은 가스는 환불됩니다.
- 스택 기반. 연산은 레지스터를 주소 지정하는 대신 스택에서 값을 푸시하고 팝합니다.
- 셀 기반 데이터. 저장소는 각 셀에 최대 네 개의 참조가 있는 작은 조각인 셀을 사용합니다.
- 비동기 실행. 계약은 동기 호출이 아닌 메시지를 통해 통신합니다.
- 메시지당 가스 계량. 각 메시지는 자체 가스 예산을 가지고 있습니다.
- 언어는 TVM 바이트코드로 컴파일됩니다. FunC, Tact 등은 모두 동일한 실행 계층을 목표로 합니다.
TVM이란 무엇이며 왜 존재하는가
TVM은 스마트 계약 코드를 실제 온체인 작업으로 변환하는 런타임입니다. 네트워크의 모든 노드는 TVM 사양에 동의하므로 한 노드에서 실행되는 계약은 어디서나 동일하게 실행됩니다. 이러한 결정론은 네트워크가 계약 결과에 대한 합의에 도달할 수 있게 해줍니다.
왜 커스텀 VM인가
TON의 설계자는 네트워크의 샤드형 비동기 아키텍처에 맞는 커스텀 VM을 구축했습니다. EVM을 차용하는 것은 EVM의 동기 호출 모델을 수용하는 것을 의미했으며, 이는 TON의 병렬 샤드 실행과 충돌합니다. TVM은 각 메시지가 다른 샤드와 조정 없이 언제든지 실행될 수 있는 작업 단위인 모델을 TON에 제공합니다.
스택에서의 위치
TVM 아래에는 네트워크의 계정, 저장소 및 합의가 있습니다. TVM 위에는 스마트 계약 언어(FunC, Tact)가 있습니다. TVM은 보편적인 인터페이스입니다: 모든 언어는 TVM 바이트코드로 컴파일되며, 모든 노드는 해당 바이트코드를 실행합니다.
셀과 데이터 레이아웃
TVM의 대표적인 설계 선택 중 하나는 셀입니다. 계약 상태에서 메시지 본문, NFT 메타데이터에 이르기까지 TON에 저장된 모든 것은 셀의 트리 형태로 배치됩니다.
셀의 정의
셀은 최대 1023비트의 원시 데이터와 최대 네 개의 다른 셀에 대한 참조를 보유합니다. 더 큰 객체(긴 문자열, 큰 배열, 복잡한 계약 상태)는 셀의 트리로 표현됩니다. 이 구조는 본질적으로 머클 트리와 유사합니다.
셀의 중요성
셀 레이아웃은 콘텐츠 주소 지정(각 셀은 해시를 가짐), 효율적인 차이 비교(변경 사항은 영향을 받는 셀만 수정), 저장소 임대 계산(셀 수와 시간이 모두 중요함)을 지원합니다. 장기 계약은 유지하는 셀 수에 따라 소액의 임대료를 지불합니다.
저장소 임대
이더리움의 영구 저장소와 달리, TON은 셀을 유지하는 데 소액의 지속적인 수수료를 부과합니다. 이는 무기한 부풀림을 방지하기 위한 의도입니다. 활성 계약은 거의 비용이 들지 않으며, 큰 상태를 보유한 버려진 계약은 더 많은 비용을 지불하고, 잔액이 0에 도달하면 결국 동결됩니다.
비동기 실행
TVM은 계약 A가 계약 B를 동기적으로 호출하는 것을 허용하지 않습니다. 대신 계약 A는 계약 B에 메시지를 보내며, 이는 이후 단계에서 처리됩니다.
하나의 메시지, 하나의 실행
온체인 상호작용은 메시지에 의해 촉발됩니다. 수신 계약은 메시지를 읽고 상태를 업데이트하며 부작용으로 새로운 메시지를 방출할 수 있습니다. 이러한 새로운 메시지는 이후 네트워크 라운드에서 처리됩니다.
개발자에 대한 의미
동기 EVM 스타일 호출에 익숙한 개발자는 TON에서 다르게 생각해야 합니다. TON의 "트랜잭션"은 종종 메시지의 연쇄입니다. 실패 처리도 다릅니다: 되돌아오는 메시지는 발신자에게 자금을 반환하지만, 발신자가 메시지를 되돌릴 수 있도록 구성한 경우에만 가능합니다.
병렬성에 대한 의미
비동기 모델은 TON이 샤드체인을 병렬로 실행할 수 있게 해줍니다. 두 개의 샤드는 조정 없이 관련 없는 메시지를 처리할 수 있으며, 심지어 샤드 간의 메시지도 대기열에 쌓여 이후 라운드에서 해결됩니다.
TON의 가스 계량
모든 TVM 작업에는 가스 비용이 있습니다. 비용 시스템은 이더리움의 가스와 유사하지만 몇 가지 중요한 차이점이 있습니다.
메시지당 가스
각 수신 메시지는 자체 가스 할당량을 가지고 있습니다. 메시지가 처리될 때, 실행된 작업에 의해 가스가 소모됩니다. 사용하지 않은 가스는 발신자에게 반환되며, 사용하지 않은 TON 잔액과 함께 반환됩니다.
저장소 임대 대 계산 가스
TON은 저장소 임대(장기 셀 저장소)와 계산 가스(TVM이 수행하는 작업)에 대해 별도로 요금을 부과합니다. 둘 다 TON으로 지불됩니다. 대부분의 사용자 대면 계약에서는 계산 가스가 더 큰 비용입니다.
왜 수수료가 낮은가
수수료는 수요가 급증할 때 네트워크가 샤딩을 통해 확장할 수 있기 때문에 낮게 유지됩니다. 대부분의 계약 실행은 저렴하고 예측 가능하며, 과대 평가된 경우 환불됩니다.
TVM 대 EVM
두 엔진은 서로 다른 메커니즘으로 동일한 문제를 해결합니다.
| 속성 | TVM | EVM |
|---|---|---|
| 아키텍처 | 스택 기반 | 스택 기반 |
| 데이터 레이아웃 | 셀(1023비트 + 4개 참조) | 단어 주소 지정 저장소 |
| 실행 모델 | 비동기 메시지 | 동기 호출 |
| 가스 환불 | 예, 사용하지 않은 가스 환불 | 예, 부분 환불 |
| 저장소 비용 | 저장소 임대 | 영구 저장소 비용 선불 |
| 언어 | FunC, Tact | Solidity, Vyper, Yul |
개발자에게 의미하는 바
TON에서 구축하는 것은 이더리움이나 솔라나에서 구축하는 것과는 다른 사고 모델을 요구합니다.
함수 호출이 아닌 메시지로 생각하기
계약 A 내에서 "계약 B의 결과"를 원하게 된다면, 보통 모델에 맞서 싸우고 있는 것입니다. 계약 A가 B에 메시지를 보내고 콜백을 기대하거나 대기하지 않고 자체 상태 변경을 완료하도록 흐름을 재구성하세요.
상태 저장 시 셀로 생각하기
큰 평면 배열은 TON에서 친숙하지 않습니다. 트리 형태의 데이터 구조가 셀 레이아웃과 더 잘 작동합니다. 무한히 성장하는 상태는 여러 셀이나 하위 계약에 걸쳐 분할되어야 합니다.
더 친숙한 구문을 위해 Tact 사용하기
FunC는 어셈블리와 더 가깝습니다. Tact는 TVM 바이트코드로 컴파일되는 더 높은 수준의 구문을 제공하며 읽기 쉽습니다. 대부분의 새로운 TON 프로젝트는 세밀한 제어가 필요하지 않는 한 Tact를 사용합니다.
실용적인 학습 경로
- Tact 튜토리얼로 시작하세요. 더 높은 수준의 구문이 메시지 모델을 먼저 이해하는 데 도움이 됩니다.
- Jetton 구현을 읽어보세요. 마스터 및 지갑 계약은 비동기 모델을 명확하게 설명합니다.
- 테스트넷에서 작은 계약을 구축하세요. 메시지를 보내고 어떻게 전파되는지 관찰하세요.
- 가스를 최적화하거나 셀 레이아웃을 세밀하게 조정해야 할 때는 FunC로 내려가세요.
- 개발 중 스택과 메시지를 검사하기 위해 TVM 실행 추적 도구를 사용하세요.
자주 묻는 질문
TVM은 EVM과 호환되나요?
아니요. 실행 모델, 데이터 레이아웃 및 가스 시스템이 다릅니다. 일부 실험적인 EVM 호환성 계층이 존재하지만 기본 개발 경로는 아닙니다.
Solidity로 TON 계약을 작성할 수 있나요?
네이티브 TON 개발은 FunC 또는 Tact를 사용합니다. Solidity와 유사한 구문을 허용하는 일부 어댑터가 있지만, 대부분의 생산 코드는 TON의 네이티브 언어를 사용합니다.
왜 TVM은 스택 기반인가요?
스택 기반 VM은 레지스터 기반 VM보다 명세하고 검증하기가 더 간단하며, 결정론적 가스 모델을 설계하기가 더 쉽습니다. EVM도 같은 이유로 스택 기반입니다.
TON에서 셀은 무엇인가요?
TON의 기본 데이터 단위입니다. 셀은 최대 1023비트와 최대 네 개의 다른 셀에 대한 참조를 보유합니다. TON에 저장된 모든 것은 셀의 트리 형태로 배치됩니다.
TON에서 데이터를 저장하는 데 임대료를 지불하나요?
네. 저장소 임대는 셀 수와 시간에 비례하는 소액의 지속적인 수수료입니다. 활성 계약은 거의 느끼지 못하며, 버려진 계약은 0으로 고갈되어 동결될 수 있습니다.
최종 요약: TVM은 TON 설계에서 가장 독특한 요소입니다. 셀 레이아웃, 비동기 메시지 모델 및 메시지당 가스 시스템을 이해하면 나머지 네트워크의 특성(샤딩, 낮은 수수료, 빠른 최종성)이 자연스러운 결과로 이해됩니다. 모델에 맞춰 구축하세요, 반대로 하지 마세요.
면책 조항: 이 가이드는 교육 목적으로만 제공되며 투자, 재정, 법률 또는 거래 조언을 구성하지 않습니다.