---
title: "Solana 데이터 계정 vs. 프로그램 계정"
description: "Solana의 계정 모델에서 데이터 계정과 프로그램 계정의 차이 알아보기"
---

# Solana 데이터 계정 vs. 프로그램 계정

Solana는 고유한[ 계정 모델](https://www.alchemy.com/overviews/solana-account-model)을 활용해 프로세스 흐름을 조율함으로써 빠르고 안전하며 확장 가능하도록 설계된 탈중앙화 블록체인 플랫폼이다. 일반적으로 완전한 형태의 Solana dApp 구조는 세 가지 유형의 계정, 즉 네이티브 계정, 데이터 계정, 프로그램 계정으로 구성된다.

이 글에서는 Solana 데이터 계정과 프로그램 계정을 함께 다루며, Solana 블록체인에서 이들이 [Ethereum smart contracts](https://alchemy.com/overviews/smart-contract-security-best-practices), 즉 Ethereum에서의 계정에 대응하는 개념과 어떻게 다른지 살펴본다.

## **Solana 데이터 계정이란?**

**Solana 데이터 계정은 토큰, 문서, 그 밖의 여러 유형의 정보와 같은 데이터를 저장하는 Solana 블록체인상의 계정 유형이다.** 데이터 계정은 상태를 저장할 수 있지만 실행 가능하지는 않다.

데이터 계정은 다른 블록체인 플랫폼의 계정과 유사하게 잔액을 가지며 트랜잭션을 주고받을 수 있다. 이 계정들은 메타데이터와 함께 소유자와 런타임 중 가능한 상호작용 유형을 식별한다. 지갑, 민트, 토큰 계정은 데이터 계정의 좋은 예로, 가치를 보유하며 사용자와 프로그램 계정에 속한다.

## **Solana 프로그램 계정이란?**

**프로그램 계정은 Solana 블록체인상의 스마트 컨트랙트로, 일반적으로 들어오는 트랜잭션이나 시간 경과에 의해 트리거되어 코드를 실행하는 데 사용된다.** 프로그램 계정은 데이터 계정과 상호작용하여 블록체인에 데이터를 읽고 쓸 수 있다. 프로그램 계정 자체는 가변 상태를 저장할 수 없으며, 데이터 계정으로부터 이를 호출한다.

Solana 데이터 계정과 프로그램 계정의 한 가지 주요 차이점은, 프로그램 계정은 다른 프로그램 계정에 의해서만 생성될 수 있는 반면 데이터 계정은 어떤 개발자나 사용자든 생성할 수 있다는 점이다. 다만 프로그램 계정은 더 많은 프로그램 계정을 생성하는 데 사용될 수 있으며, 이를 통해 [Solana EVM](https://www.alchemy.com/overviews/solana-evm)상에서 복잡한 다층 구조의 스마트 컨트랙트 시스템을 구축할 수 있다.

## **데이터 계정과 프로그램 계정은 어떻게 함께 작동하는가?**

데이터 계정은 프로그램 계정이 사용하는 데이터를 저장하는 데 사용될 수 있으며, 프로그램 계정은 데이터 계정과 상호작용하여 이 데이터를 읽고 쓸 수 있다. 데이터 계정과 프로그램 계정은 [Solana blockchain](https://www.alchemy.com/ecosystem/solana)상에서 공존하며 협력하여 다양한 dApp 기능과 서비스를 만들어낸다.

예를 들어, 프로그램 계정은 사용자들이 데이터 계정 간에 토큰을 전송할 수 있도록 하는 간단한 토큰 컨트랙트를 만드는 데 사용될 수 있다. 이 경우 프로그램 계정은 컨트랙트의 로직을 실행하는 역할을 담당하고, 데이터 계정은 토큰의 잔액을 저장하는 데 사용된다.

다음과 같은 형태다:

이 예시에서는 한 계정에서 다른 계정으로 토큰을 전송하는 로직을 담은 "transfer_tokens.wasm"이라는 프로그램 계정을 만들었다. 그런 다음 invoke 메서드를 사용해 데이터 계정을 프로그램 계정에 연결하고, 데이터 계정과 전송에 필요한 인자들을 배열 형태로 전달한다.

프로그램 계정이 실행되면 데이터 계정에 저장된 데이터를 사용해 토큰 전송을 수행한다. 이 경우 프로그램 계정은 토큰 계정에서 수신 계정으로 100개의 토큰을 전송하게 된다.

위 예시에서 시연한 프로그램 흐름은 원하는 다른 프로그램이나[ Solana Program Library \(SPL\)](https://www.alchemy.com/overviews/solana-program-library)에 미리 준비된 프로그램들로도 테스트해볼 수 있다.

## **Solana 계정 vs. Ethereum smart contracts**

Solana 데이터 계정과 프로그램 계정은 Ethereum smart contracts와 유사하지만, 저장 방식, 호출 방식, 실행 방식, 가스 등에서 몇 가지 주요 차이점이 있다.

### **Solana 데이터 계정 및 프로그램은 Ethereum smart contracts와 어떻게 다른가?**

**Solana 데이터 계정과 프로그램 계정은 데이터 저장 방식, 컨트랙트 호출 방식, 실행 모델, 언어 지원, 가스 측면에서 Ethereum smart contracts와 차이가 있다.**

#### **1. 데이터 저장**

Solana 블록체인에서는 데이터 계정이 데이터를 저장하는 데 사용되는 반면, Ethereum 블록체인에서는 데이터가 스마트 컨트랙트 내부에 저장된다. 즉, Solana에서는 데이터와 이를 다루는 로직이 분리되어 있는 반면, Ethereum에서는 데이터와 로직이 하나의 스마트 컨트랙트에 결합되어 있다.

#### **2. 컨트랙트 호출**

Solana 블록체인에서 프로그램 계정은 들어오는 트랜잭션,[ 다른 프로그램으로부터의 호출 \(즉, cross-program invocation\)](https://www.alchemy.com/overviews/cross-program-invocation), 또는 시간 경과에 의해 트리거된다. Ethereum 블록체인에서 스마트 컨트랙트는 들어오는 트랜잭션에 의해 트리거되며, 다른 스마트 컨트랙트에 의해 호출될 수도 있다.

#### **3. 실행 모델**

Solana 데이터 계정과 프로그램 계정은 Solana 네트워크의 검증자에 의해 실행되는 반면, Ethereum smart contracts는 개별 노드에서 Ethereum Virtual Machine \(EVM\)에 의해 실행된다.

#### **4. EVM 가스와 데이터 상관관계**

Solana 데이터 계정은 무제한의 데이터를 저장할 수 있는 반면, Ethereum은 실행 중 소비되는 가스의 양에 따라 결정되는 제한된 [smart contract storage space](https://www.alchemy.com/docs/smart-contract-storage-layout)를 갖는다.

#### **5. 언어 지원**

Solana 프로그램 계정은 WebAssembly \(WASM\)로 컴파일될 수 있는 어떤 언어로든 작성될 수 있는 반면, Ethereum smart contracts는 일반적으로 [Solidity](https://www.alchemy.com/overviews/solidity)나 Vyper \(Solidity를 Python 기반으로 구현한 언어\)로 작성된다.

### **Solana 데이터 계정과 프로그램 계정은 Ethereum smart contracts와 어떤 점에서 유사한가?**

**Solana 데이터 계정과 프로그램 계정은 스마트 컨트랙트 기능, 탈중앙화, 불변성, 투명성, 프로그래밍 가능성 측면에서 Ethereum smart contracts와 유사하다.**

#### **1. 스마트 컨트랙트 기능**

Solana 계정과 Ethereum smart contracts 모두 자산 전송이나 공급망 관리 자동화와 같이 트랜잭션을 처리하고 프로세스를 자동화하는 데 사용될 수 있다.

#### **2. 탈중앙화**

Solana 계정과 Ethereum smart contracts는 모두 탈중앙화된 공개 블록체인 네트워크에 배포되어 실행된다.

#### **3. 불변성**

Solana 데이터 계정 및 프로그램 계정이나 Ethereum smart contracts가 일단 블록체인에 배포되면 수정하거나 삭제할 수 없다.

#### **4. 투명성**

Solana 데이터 계정 및 프로그램 계정과 Ethereum smart contracts에 저장된 코드와 데이터는 공개적으로 접근 가능하여 투명성과 감사 가능성을 제공한다.

#### 5. 프로그래밍 가능성

Solana 데이터 계정 및 프로그램 계정과 Ethereum smart contracts는 프로그래밍이 가능하며, 이는 특정 조건에 따라 로직을 포함하고 함수를 실행할 수 있음을 의미한다. Solana에서는 프로그램 계정이 다른 프로그램 계정을 생성할 수 있는 반면, Ethereum에서는 스마트 컨트랙트가 다른 스마트 컨트랙트를 호출할 수 있다.

### **Neon Labs의 Solana EVM은 프로그램, 계정, 스마트 컨트랙트를 어떻게 처리하는가?**

Neon Labs의 Solana EVM은 개발자가 Solidity/Vyper 프로그래밍 언어를 사용해 [Ethereum smart contracts를 Solana 블록체인에 배포](https://www.alchemy.com/overviews/solana-evm)할 수 있게 해주는 도구로, 기존 Ethereum [앱](https://www.alchemy.com/dapps/top/defi-dapps)을 Solana로 손쉽게 이식할 수 있게 해준다. [Solana devnet](https://www.alchemy.com/overviews/solana-devnet)과 메인넷에 [Neon EVM](https://www.alchemy.com/dapps/neon-evm)이 출시되기 전에는 Ethereum 앱이 [Solana ecosystem](https://www.alchemy.com/dapps/ecosystem/solana)과 호환되지 않았다.

Neon EVM은 스마트 컨트랙트가 Ethereum 블록체인에서와 마찬가지로 실행될 수 있는 플랫폼을 제공하는 동시에, 낮은 가스비와 높은 처리량 등 Solana 블록체인에서 계정이 일반적으로 누리는 특징들을 활용할 수 있게 해준다.

Solana EVM은 Solana 블록체인에서 Ethereum Virtual Machine을 에뮬레이션하는 방식으로 작동하며, 이를 통해 Ethereum smart contracts가 Ethereum 블록체인에서 실행되는 것과 유사하게 Solana에서도 실행될 수 있게 한다. 즉, 개발자는 Solidity 프로그래밍 언어와 [Ethereum ecosystem](https://www.alchemy.com/dapps/ecosystem/ethereum)에 대한 기존 지식을 활용해 Solana에서 앱을 배포할 수 있다.

## **Alchemy로 Solana 계정 구축하기**

Solana상에 구축된 탈중앙화 애플리케이션은 일반적으로 네이티브 계정, 데이터 계정, 프로그램 계정으로 구성된다. 네이티브 계정은 Solana상의 프로그램을 나타내고, 데이터 계정은 정보를 저장하며, 프로그램 계정은 Solana에서 코드를 실행한다. 구축을 시작하고 싶다면 Alchemy에서 [무료 Solana 개발자 계정을 등록](https://dashboard.alchemy.com/signup/?a=cbb287cfba)하라!
