Solana 2주차: 터미널 로그에서 실시간 브라우저 대시보드까지
Source: Dev.to
공개 데이터베이스
시작하기 전에 블록체인 데이터가 난해하고 접근하기 어렵다고 생각했습니다. 실제로 Solana는 전 세계에 분산된 공개 데이터베이스와 같습니다. 전통적인 앱에서는 데이터가 백엔드 서버가 관리하는 개인 SQL 또는 NoSQL 데이터베이스에 숨겨져 있습니다. Solana에서는 모든 것이 계정이며 계정은 기본적으로 공개됩니다; RPC 연결만 있으면 언제든지 계정 상태를 읽을 수 있습니다.
터미널 vs. 브라우저
제 한 주는 두 파트로 나뉘었습니다: 터미널에서 작업하고 브라우저에서 빌드하기.
터미널
solana balance와 같은 간단한 명령으로 주소 잔액을 확인했습니다.- 원시 트랜잭션 데이터를 로그에 남겨 SOL 흐름을 실시간으로 확인했습니다.
브라우저
@solana/web3.js라이브러리를 사용해 JavaScript 프론트엔드에서 잔액 조회를 구현했습니다.- 클러스터에
Connection을 설정하고getBalance를 사용해 프로그래밍 방식으로 데이터를 가져왔습니다.
import { Connection, clusterApiUrl, LAMPORTS_PER_SOL } from '@solana/web3.js';
const connection = new Connection(clusterApiUrl('devnet'));
const publicKey = /* your public key */;
async function getSolBalance() {
const lamports = await connection.getBalance(publicKey);
const sol = lamports / LAMPORTS_PER_SOL;
console.log(`Balance: ${sol} SOL`);
}
잔액 조회
Solana는 잔액을 “1 SOL” 형태로 저장하지 않습니다. 가장 작은 단위인 Lamports(1 SOL = 10⁹ Lamports)를 사용합니다. 사용자의 실제 잔액을 표시하려면 LAMPORTS_PER_SOL 상수로 나누어야 합니다:
SOL = Lamports / 10^9
계정 히스토리
트랜잭션을 읽는 과정은 두 단계입니다:
getSignaturesForAddress로 시그니처(트랜잭션 ID)를 가져옵니다.getParsedTransaction으로 트랜잭션 상세 정보를 가져옵니다.
요청당 최대 1,000개의 시그니처만 반환되므로 전체 히스토리를 보려면 before 파라미터를 사용해 페이지네이션이 필요합니다.
// Step 1: Get signatures
const signatures = await connection.getSignaturesForAddress(publicKey, { limit: 1000 });
// Step 2: Get transaction details
const transactions = await Promise.all(
signatures.map(sig => connection.getParsedTransaction(sig.signature))
);
Devnet와 Mainnet‑beta 비교
| 기능 | Devnet | Mainnet‑beta |
|---|---|---|
| SOL 가치 | $0 (무료 에어드롭) | 실제 시장 가치 |
| 속도 제한 | 테스트에 관대함 | 공용 노드에서 매우 제한적 |
| 목적 | 테스트 및 데모 | 프로덕션 앱 |
핵심 요점: 공개 엔드포인트는 강하게 제한되어 있어 종종 429 Too Many Requests 오류가 반환됩니다.
배운 교훈
- 커밋 수준 – “processed”(처리됨) 트랜잭션의 속도와 “finalized”(확정) 트랜잭션의 확실성을 균형 맞추는 것이 아직 학습 곡선에 있습니다.
- 속도 제한 – 특히 공유 RPC 노드에서는 Mainnet‑beta에서 더 엄격한 제한이 적용됩니다.
다음 단계
다음 주에는 프로그램에 대해 파고들어 체인에 데이터를 다시 쓰는 방법을 탐구할 예정입니다.
같은 여정을 걷고 계시다면 언제든지 연결해 주세요!