Solana 계정 모델이란?
작성자 Petar Todorov
Solana의 모든 것은 계정(account)으로 간주될 수 있으며, 계정은 프로토콜이 블록체인 상의 데이터를 “정리”하는 방식입니다. 이 글에서는 Solana Account Model의 전반적인 개요, 즉 타입과 카테고리, 계정 구성 요소, 그리고 ‘rent’ 개념을 다룹니다.
Solana 계정이란 무엇이며 어떻게 작동하는가?
Solana 계정은 모든 데이터 타입을 담을 수 있는 저장 공간(storage bucket)이라고 생각할 수 있습니다: SOL 같은 토큰부터 프로그램의 상태 변수(예: 정수, 문자열, 공개 키), 심지어 프로그램 자체까지도 포함됩니다. 모든 계정에는 지정된 owner가 있으며, 하나의 owner가 여러 계정을 소유할 수 있습니다.
Account Model은 종종 컴퓨터 파일 시스템에 비유됩니다:
Solana 계정 타입에는 어떤 것이 있는가?
Solana 계정 타입은 크게 두 가지, 즉 executable과 non-executable로 나뉩니다. 이는 Solana 프로그램이 Ethereum 스마트 컨트랙트처럼 상태를 저장하지 않기 때문에, 두 가지 종류의 동작을 분리할 필요가 있기 때문입니다.
executable 프로그램이란?
executable 프로그램은 다른 계정을 소유하고 생성하여 상태를 저장하게 하는 불변(immutable) 코드로 구성됩니다. 이 코드는 Rust 같은 언어로 작성된 후 eBPF라는 바이트코드 형태로 컴파일됩니다.
executable 프로그램의 가장 대표적인 예는 Solana의 핵심 System Program으로, 사람들이 자신의 토큰과 NFT에 접근하는 데 사용하는 계정(지갑)을 생성하는 역할을 합니다.
non-executable 프로그램이란?
non-executable 프로그램은 프로그램 변수, 토큰 잔액, NFT, 대체 가능 화폐 등 다른 모든 종류의 데이터를 담는 “저장소” 계정입니다. non-executable 계정을 통해 프로토콜은 각 트랜잭션 이후 발생한 상태 변화를 반영합니다.
Ethereum 스마트 컨트랙트 vs. Solana 프로그램
스마트 컨트랙트에는 상태 변수가 저장되는 “storage”라는 특수한 공간이 미리 내장되어 있습니다. 그 후 스마트 컨트랙트는 executable 코드를 사용해 해당 상태 변수를 수정합니다. Ethereum 컨트랙트는 executable 코드와 non-executable 코드가 하나의 공간에 함께 존재하는 형태라고 볼 수 있습니다.
USDC 토큰을 예로 들어보겠습니다. 이 컨트랙트에는 사용자의 주소를 해당 사용자의 USDC 보유량에 매핑하는 “balances”라는 매핑이 있습니다. USDC 토큰을 보내거나 받을 때, 컨트랙트는 자신의 executable 코드를 통해 스스로 변경 사항을 반영합니다.
Solana는 이를 다른 방식으로 처리합니다. 개별 토큰 보유자마다 새로운 계정을 생성하는 USDC 토큰 프로그램이 존재합니다. 이 계정들은 보유자가 가진 USDC 잔액을 저장합니다. 사용자가 트랜잭션을 전파하면, USDC Token 계정은 거래를 원하는 사용자들의 연관된 토큰 계정을 찾아 그 안에 변경 사항을 반영합니다.

Solana 계정 카테고리에는 어떤 것이 있는가?
executable 계정과 non-executable 계정은 native programs, program accounts, data accounts 등 여러 추가 카테고리로 나눌 수 있습니다.
executable native programs란?
executable native programs는 Solana 생태계에 “네이티브”로 존재하며 validator 노드를 유지하고 실행하는 등의 작업을 담당합니다. 이 유형의 가장 잘 알려진 예는 System Program으로, 새로운 시스템 계정(흔히 “지갑”이라고 부르는 것)의 생성, SOL 전송 등을 담당합니다. Native Program의 다른 예로는 스테이킹 메커니즘을 담당하는 Stake Program과 Ethereum의 EVM과 유사한 BPF Loader가 있습니다.
executable program accounts란?
executable program accounts는 다른 프로그램을 생성하고 저장하는, 미리 만들어진 Solana 프로그램입니다. 좋은 예로 Solana Program Library(SPL)를 들 수 있는데, 이는 토큰 생성, 스왑, 대출, 스테이크 풀 생성, 온체인 네임 서비스 유지 등 다양한 온체인 활동을 지원하는 프로그램 모음입니다. SPL의 대표적인 예로는 토큰을 생성하고 관리하는 Token Program이 있습니다.
Solana의 USDC 토큰은 Token Program에 의해 관리되는 하나의 Token account에 불과합니다. 하지만 Token account는 사용자의 토큰 잔액을 저장하지 않습니다. 이는 세 번째 계정 타입인 data account가 담당합니다.
non-executable data account란?
Native Program과 Program account는 executable로 간주되는 반면, data account는 그 반대입니다: 이는 특정 프로그램 및 Solana 프로토콜 전체의 상태 변화를 반영하는 레지스트리입니다.
data account는 다음과 같이 나눌 수 있습니다:
- Token account - Token Program에 의해 생성된 계정
- Associated Token Account(ATA) - 개별 사용자의 토큰 잔액을 저장하는 계정
- System Owned Account - 데이터를 저장하고 트랜잭션 서명을 가능하게 함
Token account는 개별 대체 가능 화폐(USDC, USDT 등)를 나타내며, 공급량, 소수점 자릿수, 이름 등 해당 토큰에 대한 기본 정보를 담고 있습니다. 각 고유한 Token account마다 별도의 associated token account(ATA)가 생성됩니다. 예를 들어 USDC와 USDT를 모두 보유하고 있다면, 각각 USDC와 USDT Token account에 의해 생성된 두 개의 ATA에 접근할 수 있습니다.

Solana 계정 요소에는 어떤 것이 있는가?
각 계정 요소는 메타데이터 집합으로, 프로토콜이 계정의 타입과 추가 정보를 쉽게 파악할 수 있게 해줍니다. 메타데이터는 다음으로 구성됩니다:
- lamports - 계정의 SOL 잔액으로, lamport 단위로 표시됩니다. 1 lamport는 1 SOL 토큰의 10억분의 1에 해당합니다
- owner - 해당 계정을 소유한 프로그램의 주소입니다
- executable - 계정에 executable 코드가 포함되어 있는지를 나타내는 불리언 변수입니다
- data - 계정에 저장된 원시 데이터 바이트 배열로, 저장 변수일 수도 있고 executable 코드일 수도 있습니다
- rent_epoch - 계정이 다음으로 rent를 지불해야 하는 epoch를 나타냅니다
owner와 holder의 차이는, owner는 계정을 제어하는 프로그램이고 holder는 계정의 private key를 보유한 사용자라는 점입니다. 예를 들어, System Owned Account는 Solana의 Native System Program이 소유합니다.
Solana 계정 rent란 무엇인가?
모든 계정은 블록체인의 메모리를 사용하기 위해 rent 수수료를 지불하며, 이는 공격자가 네트워크의 모든 메모리를 사용해 네트워크를 막히게 하는 것을 방지하기 위한 예방 조치입니다.
블록체인이 모든 사용자를 만족시키려면 어떤 형태로든 경제적 인센티브가 필요합니다. 이는 특히 자신의 하드웨어와 연산 능력을 제공해 모든 트랜잭션을 검증하는 validator에게 해당됩니다. Validator는 모든 상태 변화의 작업본(working copy)을 유지해야 하며, 그 보상으로 rent를 받습니다.
2년치 rent 수수료에 해당하는 최소 잔액을 유지하는 계정은 rent가 면제됩니다. 그렇지 않으면 트랜잭션에서 참조될 때 또는 매 epoch마다(현재 약 이틀에 해당) rent가 부과됩니다. 계정이 rent 면제를 받을 수 있는 최소 SOL 금액을 보유하지 않으면, 해당 데이터는 체인에서 삭제됩니다.
Solana 계정을 생성하는 방법
Solana에서 System Account를 생성하는 것은 사용자가 새로운 “지갑”을 만들 때마다 Solana 지갑이 백그라운드에서 수행하는 작업입니다. 지갑은 ED25519 타원 곡선 위에 존재하는 64바이트 키페어를 생성함으로써 새로운 계정을 만듭니다. 앞의 32바이트는 private key로, 사용자가 트랜잭션을 생성하여 다른 계정이나 프로그램과 상호작용하고자 할 때 사용됩니다. 나머지 32바이트는 지갑의 public key입니다.
Solana에서 빌드를 시작하기
Account Model은 Solana 프로토콜이 데이터를 정리하는 데 사용하는 시스템입니다. 계정은 원시 데이터, 코드, 상태 변수부터 토큰 잔액, NFT 등에 이르기까지 모든 것을 담을 수 있는 저장 공간이라고 생각할 수 있습니다. 계정은 크게 executable과 non-executable 두 가지 타입으로 나뉩니다.
Alchemy로 빌드를 시작하려면, 오늘 무료 Solana 개발자 계정을 여세요!
관련 개요
Solana2026년 7월 27일
Solana 노드: 밸리데이터, RPC 노드, 셀프 호스팅
Solana 노드란 무엇인지, 밸리데이터와 RPC 노드, 보조 데이터 시스템은 어떻게 다른지, 그리고 언제 셀프 호스팅을 하고 언제 프로바이더를 써야 하는지 설명합니다.
Solana2026년 7월 22일
Solana 아카이브 데이터: 전체 블록 및 트랜잭션 기록을 조회하는 방법
Solana 아카이브 데이터 설명: 노드가 기록을 정리(prune)하는 이유, 아카이브 액세스가 필요한 RPC 메서드, 그리고 전체 블록 및 트랜잭션 기록을 대규모로 조회하는 방법.
Solana2026년 5월 28일
Solana Agent Kit vs GOAT vs ElizaOS: 어떤 프레임워크를 사용해야 할까?
Solana Agent Kit, GOAT, ElizaOS 비교: Solana 네이티브 심층 지원, 멀티체인 확장성, 완전한 에이전트 런타임 중 선택. 코드 예제와 결정 프레임워크 제공.

블록체인 매직을 만드세요
Alchemy는 가장 강력한 Web3 개발자 제품 및 도구를 리소스, 커뮤니티, 그리고 전설적인 지원과 결합합니다.