'Just Data'에서 'A Global Database'로: 솔라나 학습 두 번째 주
Source: Dev.to
번역을 진행하려면 번역하고자 하는 전체 텍스트를 제공해 주시겠어요?
텍스트를 그대로 복사해서 보내 주시면, 원본 형식과 마크다운을 유지하면서 한국어로 번역해 드리겠습니다.
기대 vs. 현실
코드를 건드리기 전에 나는 블록체인 데이터를 이렇게 상상했다:
- 트랜잭션은 어딘가 데이터베이스에 저장돼 있다.
- 읽으려면 특별한 권한이 필요할 것이다.
- 데이터는 기본적으로 사일로화되어, 개인적으로 보호될 것이다.
- 아마도 직접 풀 노드를 실행해야 할지도 모른다.
실제로 발견한 것:
인터넷에 있는 임의의 프로그램 주소를 쿼리하면 즉시 그 주소의 잔액, 소유자, 실행 가능 플래그, 그리고 트랜잭션 히스토리를 확인할 수 있었다. API 키도, 권한도, 인증도 필요 없었다. 그냥:
const account = await connection.getAccountInfo(publicKey);
console.log(account.lamports); // 2,500,000,000
npm run inspect를 실행하고 내 계정 상세 정보가 즉시 나타났을 때의 그 순간? 바로 그게 깨달음이었다.
순간 깨달음: “기본적으로 공개”
Day 11에 전통적인 데이터베이스와 Solana 계정을 비교하는 표를 만들었습니다. 가장 강렬하게 다가온 행은 다음과 같습니다:
| Feature | Database | Solana |
|---|---|---|
| Visibility | 기본적으로 비공개; 노출할 항목을 선택 | 기본적으로 공개; 누구나 모든 계정의 데이터를 읽을 수 있음 |
Web 2에서는 데이터베이스가 요새와 같아서 벽을 쌓고 누가 들어올지 결정합니다. Solana에서는 계정이 존재하는 순간부터 열린 책과 같습니다. 보안 모델이 완전히 뒤바뀐 것이죠. 이것은 버그가 아니라 특징입니다.
Day 12에 devnet과 mainnet에서 동일한 주소를 조회했을 때 다음과 같은 차이를 보았습니다:
- Devnet – 0.001159846 SOL, 최신 트랜잭션, 새 계정
- Mainnet – 0.069875097 SOL, 다른 트랜잭션 기록, 독립적인 상태
같은 주소. 같은 블록체인. 다른 네트워크. 다른 데이터.
이제 이해가 되었습니다: 이것은 하나의 데이터베이스가 아니라 여러 분산 원장이며, 모두 같은 방식으로 조회할 수 있고 설계상 기본적으로 공개됩니다.
가장 놀라운 점: JOIN이 없음
Solana 프로그램이 서로를 조회할 수 없고—JOIN도 없고, 서버‑사이드 필터링도 없고, SQL도 없다는 것을 알았을 때, 처음엔 이것이 제한이라고 생각했습니다. 그렇지 않습니다. 완전히 다른 사고 모델입니다.
전통적인 API에서는 /users/123/posts와 같은 엔드포인트를 호출하면 서버가 users 테이블과 posts 테이블을 JOIN합니다. Solana는 그렇게 동작하지 않습니다. 프로그램은 계정을 입력으로 받습니다. 관련 데이터를 “조회”하고 싶다면, 클라이언트에서 직접 가져와서 스스로 조합해야 합니다.
처음엔 이 방식이 어색하게 느껴졌습니다. 하지만 곧 깨달았습니다: 이것이 Solana가 이렇게 빠른 이유입니다. 쿼리를 최적화할 서버가 없기 때문에, 우리는 원시 데이터를 받아 필요에 따라 자유롭게 구성할 수 있습니다.
RPC 호출 vs. 전통적인 API
수년간 REST API를 사용해 왔습니다. 그 패턴은 익숙합니다:
- 요청을 보낸다
- 서버가 생각할 때까지 기다린다
- JSON을 받아온다
- 필요한 것이 들어 있기를 바란다
RPC 호출은 다르게 느껴집니다 – 더 빠르고, 더 간단합니다.
const signatures = await connection.getSignaturesForAddress(publicKey, {
limit: 5,
});
이 코드는 트랜잭션 서명을 반환합니다. 깔끔한 대시보드도, 요약도 아니라 – 바로 데이터만 제공합니다. API 표면이 얇고 결과가 원시적입니다. 이는 API가 제공하기로 정한 것이 아니라 내가 실제로 필요로 하는 것에 대해 생각하게 만듭니다.
임대 모델: 실제 비용이 드는 스토리지
솔라나에서는 스토리지 비용이 명시적이며 계정에 연결됩니다.
11일 차에 나는 임대 계산기를 만들었습니다:
| 계정 크기 | 대략적인 임대료 (lamports) |
|---|---|
| 0 바이트 | ~890,880 |
| 1,000 바이트 | ~1,874,880 |
웹 2에서는 스토리지가 추상화되어 있어 – 스프레드시트 어딘가에 월간 AWS 청구서를 지불합니다. 솔라나에서는 바이트당 비용을 지불합니다. 모든 바이트는 여러분이 직접 관리해야 합니다.
이것은 급진적이고, 두렵고, 똑똑합니다. 데이터 효율성을 고민하게 만들고, 비대해짐에 대한 대가를 부과하며, 스토리지를 외부 요인이 아닌 기능으로 전환합니다.
아직도 헷갈리는 점
- ✗ Program‑Derived Addresses (PDAs) – 나는 그것들이 계속 언급되는 것을 보지만 아직 하나도 만들어 본 적이 없다.
- ✗ Cross‑Program Invocations (CPIs) – 프로그램이 다른 프로그램을 안전하게 호출하려면 어떻게 해야 할까?
- ✗ The difference between accounts and wallets – 기술적인 차이는 이해하지만, 개념적으로는 아직 흐릿하다.
- ✗ Rent refunds – 계정을 닫으면 램프톤이 되돌아오는데… 어디로 가는 걸까?
이번 주 클릭 요약
- ✅ 계정은 객체 – 테이블의 레코드도, 데이터베이스의 문서도 아니다. 데이터, 소유자, 권한을 가진 객체.
- ✅ 공개 데이터가 기본 – 활성화해야 하는 것이 아니라, 숨기려면 의도적으로 해야 하는 것.
- ✅ 같은 주소 ≠ 네트워크 간 동일 계정 – devnet, testnet, mainnet은 완전히 별개의 블록체인. 주소는 동일해 보이지만 상태는 다르다.
- ✅ “온‑체인 데이터 읽기”는 단순 조회 – 조인도, 트랜잭션도 없으며, 최종성 외에 일관성 보장은 없다. 그냥: “이 계정의 데이터를 주세요.”
다음 주를 위해
두 주 동안 독서에 매진했습니다. 다음 주에는 작성하고 싶습니다.
거래가 아닙니다. 메시지도 아닙니다. 내 프로그램을 사용해 블록체인에 데이터를 쓰고 싶습니다. 계정을 생성하고, 그 안에 무언가를 저장한 뒤, 다시 수정할 때 무슨 일이 일어나는지 이해하고 싶습니다.
런타임이 강제하는 **“당신의 프로그램만이 당신의 데이터를 수정할 수 있다.”**는 의미를 손끝으로 직접 느껴보고 싶습니다.
The Big Picture
두 주 전만 해도 블록체인은 장부라고 생각했어요. 이제는 데이터베이스라고 생각합니다 – 웹 2 기준으로는 이상한 데이터베이스지만, 그래도 데이터베이스입니다.
규칙이 다릅니다:
- 스키마 없음
- 서버 없음
- 기본적으로 개인 데이터 없음
- 조인 연산 없음
- 저장 비용이 명시적
이상하게 느껴집니다. 아직 이름 붙일 수 없는 방식으로 부서진 느낌도 들지만, 동시에 진실하고 투명하며 분산된 느낌도 들어요 – 그것이 바로 구축할 가치가 있는 점입니다.
솔라나를 배우기 시작했을 때 가장 놀랐던 점은 무엇인가요? 댓글로 알려 주세요—궁금합니다.
공개적으로 만들기. 공개적으로 배우기. 100일 중 1‑13일.