---
title: "Solana 지갑 만드는 법: 기술 가이드"
description: "Solana 지갑의 기본 개념과 기본 지갑 및 스마트 지갑을 직접 구성하는 방법을 다루는 안내서입니다."
---

# Solana 지갑 만드는 법: 기술 가이드

지난 몇 년간 Solana는 가장 활발한 블록체인 네트워크 중 하나로 급부상해, [일일 활성 사용자 120만 명 이상](https://coincentral.com/solana-outperforms-ethereums-early-stage-with-2-85b-revenue/)과 [일일 6천만 건 이상의 \(비-투표\) 트랜잭션](https://blockworks.com/analytics/solana/solana-onchain-activity?ref=blog.quicknode.com)을 평균적으로 기록하고 있습니다. 이러한 활동은 DeFi, DePIN, 기관, 기업 등 다양한 분야에서 발생하며, 모두 매우 빠른 속도와 트랜잭션당 1페니의 극히 일부 수준의 비용으로 이루어지고 있습니다.

Solana 위에서 빌드하고 뜨겁게 성장 중인 생태계에 뛰어들고 싶다면, 지갑부터 시작하는 것이 좋은 진입점입니다. 지갑은 모든 체인과 상호작용하는 관문으로, 트랜잭션 서명, 자산 보유, 앱 구동을 담당합니다.

이 가이드에서는 Alchemy의 [안정적인 RPC 엔드포인트](https://www.alchemy.com/solana)를 사용해 원활한 네트워크 연결로 일반 Solana 지갑을 만드는 과정을 안내한 뒤, 일반 지갑과 스마트 지갑을 비교합니다. 실제 SOL을 소비하지 않고 테스트할 수 있도록 devnet에서 시작해 설정해 보겠습니다.

## Solana의 지갑: 기본 개념

Solana에서 지갑은 Ethereum에서 익숙하던 방식과는 조금 다릅니다. 사용자가 제어하는 [외부 소유 계정\(EOA\)과 스마트 컨트랙트](https://www.alchemy.com/docs/ethereum-accounts)를 엄격히 구분하는 대신, Solana는 모든 것을 [계정\(accounts\)](https://solana.com/docs/core/accounts)으로 취급하며, 이는 블록체인상의 데이터 저장 단위입니다. 여기서 "지갑"이란 대개 하나 이상의 계정을 제어할 수 있게 해주는 키페어\(공개키와 개인키\)일 뿐입니다. 계정은 SOL 토큰, 다른 자산, 혹은 [프로그램\(programs\)](https://solana.com/docs/core/programs)\(Solana 버전의 스마트 컨트랙트\)을 위한 실행 코드까지도 담을 수 있습니다.

이러한 통합된 방식 덕분에 프로그램 파생 주소\(PDA\)와 같은 흥미로운 기능이 가능해집니다. 프로그램은 개인키 없이도 사용자를 대신해 주소를 생성하고 트랜잭션에 서명할 수 있습니다.

이는 EOA가 순수하게 서명만을 담당하고 컨트랙트가 로직을 별도로 처리하는 Ethereum의 모델보다 더 유연한 구조입니다. Solana의 계정 모델에 대한 자세한 내용은 [Solana 공식 문서의 계정과 지갑 설명](https://solana.com/docs/core/accounts#accounts-and-wallets)을 참고하세요.

Solana 지갑은 일반적으로 두 가지 범주로 나뉩니다:

- **일반 지갑\(키페어 기반\)**: 트랜잭션 서명과 계정 관리를 위한 단순한 암호화 키페어입니다. 스크립트나 테스트에 적합하지만, 키와 수수료를 직접 관리해야 합니다.
- **스마트 지갑\(계정 추상화 적용\)**: 키 관리 같은 세부 사항을 숨겨 경험을 한 단계 끌어올립니다. 스마트 지갑은 소셜 인증\(예: 시드 문구 대신 이메일이나 패스키로 로그인\), 가스/렌트 후원\(다른 누군가가 트랜잭션 수수료를 대신 지불\), 배치 트랜잭션\(여러 작업을 한 번에 처리\), 그리고 프로그래밍 가능한 로직으로 구동되는 자동화 동작까지 지원합니다. Solana의 설계는 UX 개선에 초점을 맞춘 Ethereum의 [ERC-4337](https://www.alchemy.com/overviews/how-do-smart-contract-wallets-work)을 넘어서, 이러한 기능을 앱에서 특히 강력하게 만듭니다. Solana의 계정 추상화에 대해 더 알아보려면 [지갑 관리에 관한 Solana Cookbook](https://solana.com/developers/cookbook/wallets/create-keypair)과 [Solana에서의 ERC-4337 심층 분석](https://solana.com/developers/evm-to-svm/erc4337)을 참고하세요.

이 튜토리얼에서는 Alchemy의 RPC 엔드포인트를 사용해 일반 지갑을 만들어 볼 것입니다. 이 엔드포인트는 직접 노드를 구동하지 않고도 Solana 네트워크에 안정적으로 접근할 수 있게 해줍니다. 소셜 로그인 같은 스마트 지갑 기능이 필요하다면, 지갑 제공업체를 Alchemy의 인프라와 함께 사용하세요.

## 사전 준비: Devnet 환경 설정하기

코드로 들어가기 전에 준비가 되었는지 확인해 봅시다. 이 튜토리얼은 기본적인 JavaScript에 익숙하다고 가정하지만, 모두가 따라올 수 있도록 개념을 함께 설명하겠습니다. 필요한 것은 다음과 같습니다:

- **Node.js\(v16 이상\)와 npm/yarn**: 브라우저 밖에서 JS 코드를 실행하기 위한 런타임입니다. 아직 없다면 [nodejs.org](https://nodejs.org/)에서 다운로드할 수 있습니다.
- **[VS Code](https://www.alchemy.com/dapps/vs-code)나 Cursor 같은 코드 에디터**: 코드를 작성하고 디버깅할 곳입니다. VS Code는 무료이며 블록체인 개발용 확장 프로그램도 훌륭합니다. [여기](https://code.visualstudio.com/)에서 설정할 수 있습니다. Cursor는 AI가 탑재된 더 세련된 버전의 VS Code라고 볼 수 있습니다. [여기](https://cursor.com/agents)에서 확인해 보세요.
- **기본적인 JavaScript 지식**: 예제는 Node.js와 Solana web3.js를 사용합니다.
- **Alchemy 계정**: [dashboard.alchemy.com](https://dashboard.alchemy.com/)에서 무료로 가입하세요. 새 앱을 만들고 Solana를 선택한 후\(테스트용은 devnet, 프로덕션용은 mainnet\), API 키를 받으세요. 하이브리드 지원이 필요하다면 Sepolia 같은 EVM 체인도 함께 활성화해두면 크로스체인 앱에 유용합니다.
- **일반 지갑용**: 키 생성, 연결, 트랜잭션을 처리하는 [Solana web3.js 라이브러리](https://www.npmjs.com/package/@solana/web3.js)를 설치하세요. 이 라이브러리는 Solana 프로그램과 상호작용하는 데 가장 널리 쓰입니다.

  `npm install @solana/web3.js`

팁: 모든 것을 먼저 devnet에서 빌드하세요. devnet은 mainnet 배포를 완벽하게 모방하는 주요 테스트 환경으로, 컨트랙트를 테스트하고 플로우를 실행하며 모든 것이 제대로 작동하는지 확인할 수 있습니다. 확신이 서고 testnet에 배포해 충분히 테스트를 마쳤다면, mainnet 배포는 RPC URL만 교체하면 될 만큼 간단합니다. 코드 변경 없이 스위치만 전환하면 됩니다.

## Solana의 지갑 구조 이해하기

지갑을 생성하기 전에, 잠시 되돌아가 Solana 지갑의 작동 방식에 대한 배경을 간단히 짚어보겠습니다. 이는 특히 Ethereum에서 넘어온 경우, 앞으로 진행할 단계들이 왜 이렇게 구성되는지 이해하는 데 도움이 될 것입니다.

- **계정 vs. 지갑**: Solana에서 지갑은 본질적으로 계정을 _소유하는_ 키페어입니다. 계정은 데이터를 담는 버킷과 같아서, SOL 잔액, 토큰, 또는 프로그램 코드를 저장할 수 있습니다. EOA\(사용자 주소\)와 컨트랙트 주소가 구분되는 Ethereum과 달리, Solana는 이러한 경계를 허물어 모든 것을 계정으로 취급합니다. 즉, 계정을 즉석에서 생성하고 별도로 자금을 지원할 수 있으며, [PDA](https://solana.com/docs/core/pda)를 통해 프로그램이 계정을 제어하게 할 수도 있습니다. 키 생성 시 계정이 자동으로 만들어지지는 않으며, 자금을 넣어야 초기화됩니다. 더 자세한 내용은 [Solana의 핵심 개념](https://solana.com/docs/core)을 참고하세요.
- **동적 가스 수수료 대신 렌트**: Solana는 모든 연산 단위마다 Ethereum 방식의 가스를 사용하지 않습니다. 트랜잭션은 고정 수수료\(2025년 기준 평균 $0.00025 수준으로 매우 저렴\)를 가지지만, 계정은 잔액이 특정 임계값\(KB당 약 0.00089 SOL\) 아래로 떨어지면 데이터를 체인에 계속 저장하기 위한 "렌트"를 지불해야 합니다. 이는 저장 보증금과 비슷합니다: 미리 지불하거나 면제될 만큼 충분한 SOL을 유지하면 됩니다. 이 방식은 비활성 계정을 정리해 네트워크를 가볍게 유지합니다. 트랜잭션은 여전히 수수료가 들지만, 렌트는 데이터 영속성을 위한 Solana만의 독특한 요소입니다. 연산마다 부과되고 혼잡 시 급등할 수 있는 Ethereum의 가스와 비교해 볼 수 있습니다. Solana의 모델은 대신 속도를 우선시합니다. 자세한 내용은 [Solana의 렌트 문서](https://solana.com/docs/core/fees#rent)를 참고하세요.
- **PDA와 프로그래밍 가능성**: 프로그램은 일반 주소처럼 보이지만 키가 아닌 코드로 제어되는 ["프로그램 파생 주소"](https://solana.com/docs/core/pda)를 생성할 수 있으며, 이를 통해 자동 서명 같은 스마트 지갑 기능이 가능해집니다. 이는 Ethereum의 컨트랙트 지갑보다 Solana 아키텍처 핵심에 더 깊이 내장되어 있습니다.

이러한 개념들을 이해하면 Solana 지갑이 왜 기본적으로 더 "프로그래밍 가능"하게 느껴지는지 알 수 있습니다. 이 모든 것은 유연한 계정이라는 개념으로 귀결됩니다.

## 일반 Solana 지갑 만드는 방법: 단계별 가이드

일반 지갑은 입문용 설정으로, 트랜잭션 서명을 위한 단순한 키페어입니다. 백엔드 스크립트, 테스트, 또는 추상화 없이 완전한 제어를 원할 때 적합합니다. 이 튜토리얼에서는 `@solana/web3.js`을 사용해 키페어를 생성합니다.

그런 다음 Alchemy의 RPC를 사용해 네트워크에 연결합니다. RPC 연결 없이는 지갑이 잔액을 조회하거나 트랜잭션을 전송할 수 없습니다.

### 1단계: 키페어 생성하기

Solana에서 지갑을 생성한다는 것은 새로운 암호화 키페어, 즉 서로 수학적으로 연결되어 함께 작동하는 한 쌍의 키를 만드는 것을 의미합니다. 공개키는 Solana상의 지갑 주소가 되며, 자금을 보내거나 계정과 상호작용해야 하는 누구와도 자유롭게 공유할 수 있습니다. 개인키\(시크릿 키라고도 함\)는 해당 주소의 소유권을 증명하고 트랜잭션에 서명할 수 있게 해줍니다.

여기서 Ethereum과의 중요한 차이점이 있습니다: Ethereum에서는 외부 소유 계정\(EOA\)을 생성하면 즉시 "준비 완료" 상태가 되어 블록체인상에 존재합니다. Solana에서는 키페어를 생성하는 것이 단지 암호화 키를 만드는 것일 뿐이며, 실제 계정은 누군가가 해당 주소에 자금을 넣기 전까지는 블록체인상에 존재하지 않습니다. 이는 계정이 체인상에 유지되려면 렌트 면제 잔액이 필요한 Solana의 계정 모델의 일부입니다.

새 JS 파일\(예: regular-wallet.js\)을 만들고 다음 코드를 실행하세요:

<CodeSnippet language="javascript" code={`import { Keypair } from '@solana/web3.js';

const wallet = Keypair.generate();
console.log('Public Key (Wallet Address):', wallet.publicKey.toString());
console.log('Secret Key:', wallet.secretKey); // Secure this immediately! Never log in production.`} />
이 스크립트를 node.js로 실행하면 짜잔: 지갑이 생겼습니다.

다음과 같은 결과를 받았을 것입니다:

- **공개키\(지갑 주소\)**: `7xj9WkvP6Az8vG5nXJh4Fq3qY8kPqT9wXVZN2xMqGnD4`와 같은 base58 인코딩 문자열입니다. 이는 자금을 받고 싶을 때 다른 사람과 공유하는 것이며, [앱](https://www.alchemy.com/dapps/top/defi-dapps)에 연결하거나 잔액을 확인할 때 사용하는 값입니다. 은행 계좌 번호처럼, 공개적으로 공유해도 안전합니다.
- **시크릿 키**: `Uint8Array`\(64바이트 배열\) 형태로 반환됩니다. 이는 개인키이며 해당 지갑을 제어한다는 암호학적 증거입니다. 이 시크릿 키에 접근할 수 있는 사람은 누구나 트랜잭션에 서명하고 지갑에서 자금을 이동시킬 수 있습니다. 절대로 이를 공유하거나 버전 관리 시스템에 커밋하지 마세요.

시크릿 키를 위한 핵심 보안 수칙:

- **프로덕션에서 절대 로그에 남기지 마세요**: 예제의 `console.log`는 로컬 테스트용으로는 괜찮지만, 실제 애플리케이션을 배포하기 전에는 제거해야 합니다.
- **환경 변수를 사용하세요**: `.env`에 저장하고 `.gitignore`에 추가하세요. 코드에서는 `process.env.PRIVATE\_KEY`로 접근합니다.
- **하드웨어 지갑을 고려하세요**: 상당한 가치를 다루는 프로덕션 애플리케이션에서는 개인키를 안전한 하드웨어에 격리해 보관하는 [Ledger](https://www.alchemy.com/dapps/ledger)나 [Trezor](https://www.alchemy.com/dapps/trezor) 같은 하드웨어 지갑을 통합하세요.
- **저장 시 암호화하세요**: 시크릿 키를 데이터베이스나 파일에 저장해야 한다면, 강력한 암호화 라이브러리를 사용해 먼저 암호화하세요.

보안 모범 사례에 대해서는 [Solana의 보안 가이드](https://solana.com/learn/staying-safe-on-solana)를 확인하세요.

### 2단계: Alchemy RPC로 네트워크에 연결하기

이제 RPC 엔드포인트를 사용해 지갑을 Solana devnet에 연결합니다. 이 "연결" 객체는 코드가 블록체인과 통신하고, 잔액을 가져오고, 트랜잭션을 제출하는 등의 작업을 할 수 있게 해줍니다. Alchemy의 RPC는 Solana 노드로 향하는 강력한 프록시와 같아서, 로드 밸런싱을 처리해 앱의 응답성을 유지해 줍니다.

스크립트에 다음을 추가하세요\(\<YOUR_API_KEY\>를 [Alchemy 대시보드](https://dashboard.alchemy.com/)에서 받은 키로 교체하세요\):

<CodeSnippet language="javascript" code={`import { Connection } from '@solana/web3.js';

const connection = new Connection(
'https://solana-devnet.g.alchemy.com/v2/<YOUR_API_KEY>', // Devnet for testing
'confirmed' // Commitment level: 'confirmed' for speed with some finality
);

async function checkBalance(publicKey) {
const balance = await connection.getBalance(publicKey);
console.log('Balance:', balance / 1e9, 'SOL'); // Convert lamports (1 SOL = 1e9 lamports)
}

await checkBalance(wallet.publicKey);`} />
이 연결을 통해 지갑에 자금이 있는지 확인하고 앱과 상호작용할 수 있습니다. 스크립트를 실행하세요; 자금이 없다면 응답은 0 SOL을 보여줄 것입니다. 전체 RPC 메서드에 대해서는 [Solana의 RPC 문서](https://solana.com/docs/rpc)나 [Alchemy Solana RPC 가이드](https://www.alchemy.com/docs/reference/solana-api-quickstart)를 참고하세요.

### 3단계: 지갑에 자금을 넣고 상호작용하기

연결이 살아있으니, 이제 온체인에서 상호작용해 봅시다. 여기서부터가 재미있는 부분입니다: 에어드롭을 통한 자금 지원\(devnet 전용\), 트랜잭션 서명 등. 이러한 기본 작업들을 통해 SOL을 전송하고, 프로그램을 호출하고, 간단한 도구를 만들 수 있습니다.

#### 에어드롭 요청하기\(devnet에서 자금 지원\)

Devnet은 테스트용 무료 SOL을 제공하여 계정이 비어 있을 때 자금을 채울 수 있게 해주지만, IP 주소당 하루 약 24 SOL로 제한된다는 점을 유의하세요.

수수료의 렌트 면제를 위해 계정에 자금을 채워야 합니다. 이 방법은 devnet에서만 작동합니다. 실제 SOL\(테스트 SOL이 아닌\)로 수수료가 지불되는 프로덕션 환경에서는 Coinbase 같은 거래소를 통해 계정에 자금을 구매/지원해야 합니다. [Solana의 Devnet Sol 가이드](https://solana.com/developers/guides/getstarted/solana-token-airdrop-and-faucets)를 참고하세요.

<CodeSnippet
  language="javascript"
  code={`const airdropSignature = await connection.requestAirdrop(
wallet.publicKey,
1e9 // 1 SOL in lamports
);
await connection.confirmTransaction(airdropSignature);
console.log('Airdrop complete! Check balance again.');`}
/>
여기서 일어나는 일은 다음과 같습니다:

- **에어드롭 요청**: `connection.requestAirdrop\(\)`은 devnet에 테스트용 SOL을 요청합니다. 지갑의 공개키와 lamport 단위의 금액\(`1e9` = 1 SOL\)을 받아, 이 트랜잭션의 고유 식별자인 트랜잭션 서명을 반환합니다.
- **트랜잭션 확인**: `await connection.confirmTransaction\(\)`은 네트워크가 에어드롭을 처리할 때까지 기다립니다. 이는 매우 중요한데, 확인을 기다리지 않으면 에어드롭이 요청되었더라도 잔액이 여전히 0 SOL로 표시될 수 있습니다. Solana는 트랜잭션을 비동기적으로 처리하므로 기다려야 합니다.
- **성공**: 확인이 완료되면 `checkBalance\(\)`을 다시 실행하면 지갑에 1 SOL이 표시되는 것을 볼 수 있습니다.

#### 트랜잭션 서명 및 전송하기

다른 주소로 0.1 SOL을 전송해 봅시다. 이 예제는 트랜잭션 서명을 보여줍니다. 개인키가 트랜잭션을 암호학적으로 승인해 송신 지갑의 소유권을 증명합니다. 트랜잭션을 빌드하고, 키페어로 서명한 뒤, RPC를 통해 네트워크에 브로드캐스트합니다. 트랜잭션 수수료\(약 0.000005 SOL\)는 잔액에서 자동으로 차감됩니다. 다중 명령 트랜잭션이나 프로그램 호출 같은 더 복잡한 작업은 [Solana의 트랜잭션 기본](https://solana.com/docs/core/transactions) 문서를 참고하세요.

SOL을 전송하려면 다음 코드를 실행하세요:

<CodeSnippet language="javascript" code={`import { Transaction, SystemProgram, PublicKey, sendAndConfirmTransaction } from '@solana/web3.js';

const recipient = new PublicKey('recipient_address_here'); // Replace with a real address\`

const tx = new Transaction().add(
SystemProgram.transfer({
fromPubkey: wallet.publicKey,
toPubkey: recipient,
lamports: 1e8 // 0.1 SOL
})
);

// Simplest approach - handles blockhash and confirmation automatically
const signature = await sendAndConfirmTransaction(
connection,
tx,
[wallet] // Signers
);

console.log('Transfer signature:', signature);`} />
여기서 일어나는 일은 다음과 같습니다:

- **수신자 생성**: `new PublicKey\(\)`는 base58로 인코딩된 주소 문자열을 Solana가 다룰 수 있는 PublicKey 객체로 변환합니다. `'recipient\_address\_here'`을 실제 Solana 주소로 교체하세요\(테스트를 위해 자신의 지갑 공개키를 사용해 스스로에게 보낼 수도 있습니다\).
- **트랜잭션 빌드**: `new Transaction\(\).add\(\)`는 트랜잭션을 생성하고 전송 명령을 추가합니다. `SystemProgram.transfer\(\)` 호출은 송신자\(`fromPubkey`\), 수신자\(`toPubkey`\), 그리고 lamport 단위의 금액\(1e8 = 0.1 SOL\)을 지정합니다.
- **전송 및 확인**: `sendAndConfirmTransaction\(\)`은 세 단계를 한 번에 처리하는 헬퍼 함수입니다: 최신 블록해시를 가져오고\(모든 Solana 트랜잭션에 필요\), 지갑 키페어로 트랜잭션에 서명하고, 네트워크에 전송한 뒤, 확인을 기다립니다. `\[wallet\]` 배열에는 모든 서명자가 포함되며, 이 경우에는 지갑만 해당됩니다.
- **트랜잭션 서명**: 반환된 서명은 실행에 대한 증거로, 블록체인상의 이 특정 트랜잭션에 대한 고유 식별자입니다.
- **보안 팁**: 시크릿 키를 절대 하드코딩하지 마세요. 대신 `process.env.PRIVATE\_KEY`을 사용하세요. 프로덕션 환경에서는 다른 공격 지점을 줄이기 위해 하드웨어 지갑을 통합하세요. 안전한 키 관리에 대해 더 알아보려면 [키 관리 및 보안 모범 사례](https://www.alchemy.com/docs/best-practices-for-key-security-and-management)를 확인하세요.

모든 것이 순조롭게 진행되었다면 성공적인 트랜잭션 서명을 받았을 것입니다! 그 서명은 트랜잭션이 Solana 블록체인상에서 처리되었다는 증거입니다. [Solana Explorer](https://explorer.solana.com/?cluster=devnet)에서 조회해 송신자, 수신자, 지불된 수수료, 블록 확인 등 전체 세부 정보를 확인할 수 있습니다.

이것이 devnet에서 간단한 [Solana 지갑](https://www.alchemy.com/overviews/solana-wallets)과 상호작용하는 핵심입니다: 키페어를 생성하고, RPC를 통해 연결하고, 자금을 채우고, 트랜잭션에 서명합니다. 키페어 생성, 네트워크 연결, 잔액 확인, 트랜잭션 서명이라는 이 구성 요소들은 모든 Solana 개발 작업의 기초가 됩니다.

방금 상호작용한 이러한 일반 키페어 기반 지갑들은 프로그래밍 방식의 제어가 필요한 백엔드 스크립트, 테스트 및 개발, 자신의 키를 직접 관리하고 싶은 사람들, 그리고 기본 전송이나 프로그램 상호작용 같은 간단한 사용 사례에 적합합니다. 다만 그 나름의 트레이드오프도 있습니다: 사용자가 자신의 키를 직접 관리하고, 자신의 수수료를 지불하며, 블록체인 상호작용의 기술적 복잡성을 다뤄야 합니다. UX가 중요한 소비자 대상 앱에서는 이러한 마찰이 결정적인 걸림돌이 될 수 있습니다.

이때 스마트 지갑이 등장합니다. 소셜 로그인, 가스리스 트랜잭션, 세션 키 같은 강력한 기능을 제공하면서도 복잡성을 추상화합니다.

## 일반 지갑 vs. 스마트 지갑: 간단 비교

사용 사례에 무엇이 필요한지 결정하는 데 도움을 드리기 위해, Solana의 지갑 유형별 핵심 차이를 정리한 표를 준비했습니다. 이는 프로젝트에서 각각을 언제 사용해야 하는지 보여줍니다.

<EmbeddedTable
  table={{
    columns: [
      { key: "1", width: 200, title: "", dataType: "object" },
      { key: "2", width: 200, title: "Regular Wallet", dataType: "object" },
      { key: "3", width: 200, title: "Smart Wallet", dataType: "object" },
    ],
    data: [
      {
        "1": { title: "<p><strong>Structure</strong></p>", tooltip: "", icon: "" },
        "2": { title: "<p>Simple keypair (EOA-like)</p>", tooltip: "", icon: "" },
        "3": { title: "<p>Abstracted via AA; uses PDAs for programmable control</p>", tooltip: "", icon: "" },
        id: 0,
      },
      {
        "1": { title: "<p><strong>Features</strong></p>", tooltip: "", icon: "" },
        "2": { title: "<p>Basic signing, manual fee handling</p>", tooltip: "", icon: "" },
        "3": { title: "<p>Social login, batching, sponsorship, automation</p>", tooltip: "", icon: "" },
        id: 1,
      },
      {
        "1": { title: "<p><strong>Complexity</strong></p>", tooltip: "", icon: "" },
        "2": { title: "<p>Low, direct key management</p>", tooltip: "", icon: "" },
        "3": { title: "<p>Medium, Complex setup abstracted by SDK</p>", tooltip: "", icon: "" },
        id: 2,
      },
      {
        "1": { title: "<p><strong>Use Cases</strong></p>", tooltip: "", icon: "" },
        "2": { title: "<p>Scripts, bots, testing setups</p>", tooltip: "", icon: "" },
        "3": { title: "<p>User-facing apps, seamless onboarding</p>", tooltip: "", icon: "" },
        id: 3,
      },
      {
        "1": { title: "<p><strong>vs. Ethereum</strong></p>", tooltip: "", icon: "" },
        "2": { title: "<p>Uniform accounts; PDAs add flexibility</p>", tooltip: "", icon: "" },
        "3": { title: "<p>Solana-specific rent handling + EVM compatibility via SDK</p>", tooltip: "", icon: "" },
        id: 4,
      },
      {
        "1": { title: "<p><strong>Alchemy Role</strong></p>", tooltip: "", icon: "" },
        "2": { title: "<p>RPC for reliable connections</p>", tooltip: "", icon: "" },
        "3": { title: "<p>SDK + RPC for full AA features</p>", tooltip: "", icon: "" },
        id: 5,
      },
    ],
  }}
/>

## 모범 사례: 빌드하는 동안 유념할 팁

Solana 지갑을 만들 때, 안전하고 확장 가능하며 사용자 친화적인 지갑을 만들기 위한 몇 가지 모범 사례와 팁을 소개합니다.

- **보안이 최우선**: 일반 지갑의 경우, mainnet에서는 키를 오프라인으로 유지하기 위해 항상 하드웨어 지갑\(Ledger나 Trezor 같은\)을 사용하세요. 스마트 지갑의 경우, 시드 문구를 피함으로써 피싱 위험을 줄이기 위해 지갑 제공업체의 패스키나 다단계 인증을 사용하세요. 코드에 시크릿을 절대 노출하지 말고 암호화된 저장소를 사용하세요. [Solana의 보안 가이드](https://solana.com/learn/staying-safe-on-solana) 같은 도구로 설정을 점검하세요.
- **철저히 테스트하세요**: 비용 없이 반복 작업을 할 수 있도록 항상 devnet이나 testnet에서 시작하세요. Alchemy의 대시보드를 사용해 RPC 사용량, 트랜잭션 실패, 성능 지표를 모니터링하세요. 이는 블록체인 호출을 위한 내장 디버거와 같습니다. 재시도가 제대로 작동하는지 확인하기 위해 네트워크 혼잡 같은 엣지 케이스를 시뮬레이션하세요.
- **오류 처리와 신뢰성**: RPC 호출을 try-catch 블록으로 감싸고 지수 백오프 재시도\(예: p-retry 같은 라이브러리 사용\)를 추가하세요. Solana의 속도는 경쟁 조건을 유발할 수 있으므로, 최대한의 안전을 위해 'finalized' 커밋먼트로 트랜잭션을 확인하세요. 이는 특히 고사용량 앱에서 앱을 견고하게 유지해 줍니다.
- **확장성 고려사항**: Alchemy의 인프라는 높은 부하에 맞춰 자동 확장되므로 RPC에서 병목이 발생하지 않습니다. 스마트 지갑의 경우, 트랜잭션을 최소화하기 위해 가능한 한 배치 처리하세요. 예상치 못한 비용을 피하기 위해 렌트 면제 여부를 모니터링하세요. [Solscan 탐색기](https://solscan.io/) 같은 도구가 이를 추적하는 데 도움이 됩니다.
- **더 깊이 알아보기 위한 자료**: SDK 변경 사항을 확인하려면 [Alchemy의 Solana 문서](https://www.alchemy.com/docs/reference/solana-api-quickstart)를 꾸준히 확인하고, UI 통합을 위해 [Solana의 공식 react 지갑 어댑터](https://solana.com/developers/cookbook/wallets/connect-wallet-react)를 살펴보세요.

## 마무리: Solana에서 빌드를 시작할 시간

이제 Alchemy의 도움으로 일반 Solana 지갑을 만드는 방법과 스마트 지갑이 이와 어떻게 비교되는지 알게 되었습니다. 간단한 전송을 스크립팅하든, 가스리스 로그인을 갖춘 멋진 dApp을 빌드하든, Solana의 생태계는 혁신을 위한 준비가 되어 있습니다. 지금이 바로 뛰어들어 실험을 시작할 때입니다. 더 자세한 내용은 [전체 Solana 개발자 자료](https://www.alchemy.com/docs/reference/solana-api-quickstart)와 [Solana 문서](https://solana.com/developers)를 확인하세요. 즐거운 빌딩 되세요 – 질문이 있다면 [Alchemy 지원 센터](https://www.alchemy.com/support)를 방문하세요. 온체인 마법을 만들어 봅시다!

## 자주 묻는 질문

### Solana 지갑이란 무엇인가요?

Solana 지갑은 Solana 블록체인상의 계정을 제어할 수 있게 해주는 키페어\(공개키와 개인키\)로, SOL 토큰, 다른 자산, 또는 실행 가능한 코드를 보유할 수 있습니다. Ethereum의 EOA 모델과 달리, Solana는 모든 것을 더 유연하고 프로그래밍 가능한 구조를 가진 계정으로 취급합니다.

### Solana 지갑을 만들려면 비용을 지불해야 하나요?

아니요, 키페어 생성은 무료입니다. 하지만 Solana상의 계정이 온체인에서 유지되려면 렌트\(KB당 약 0.00089 SOL\)가 필요하며, 트랜잭션 수수료는 평균 $0.00025입니다. devnet에서는 에어드롭을 통해 무료 테스트 SOL을 받을 수 있지만, mainnet에서는 SOL을 구매해야 합니다.

### 일반 Solana 지갑과 스마트 Solana 지갑의 차이는 무엇인가요?

일반 지갑은 키를 직접 관리하고 수수료를 지불하는 기본적인 키페어로, 스크립트와 테스트에 이상적입니다. 스마트 지갑은 계정 추상화를 사용해 소셜 로그인, 가스 후원, 배치 트랜잭션, 프로그래밍 가능한 로직을 제공하며, 사용자 대상 앱에 적합합니다.

### 시드 문구 대신 소셜 로그인을 사용할 수 있나요?

네, 많은 스마트 지갑 제공업체가 사용자가 시드 문구를 관리하는 대신 이메일, Google, 또는 패스키를 통해 인증할 수 있게 해줍니다. 이는 사용자에게 전통적인 키 관리의 번거로움을 없애줍니다.

### devnet에서 Solana 지갑에 자금을 채우려면 어떻게 하나요?

`connection.requestAirdrop()`을 사용해 devnet에서 무료 테스트 SOL을 받으세요\(IP당 하루 약 24 SOL로 제한\). mainnet에서는 [Coinbase](https://www.alchemy.com/dapps/coinbase) 같은 거래소를 통해 SOL을 구매해야 합니다.

### Solana의 렌트란 무엇인가요?

렌트는 계정이 온체인에서 활성 상태를 유지하기 위해 최소 SOL 잔액\(KB당 약 0.00089 SOL\)을 유지해야 하는 저장 보증금 시스템입니다. Ethereum의 가스 수수료와는 다르며, 비활성 계정을 정리해 네트워크를 효율적으로 유지하는 데 도움을 줍니다.

### 스마트 지갑이 사용자를 위한 트랜잭션 수수료를 후원할 수 있나요?

네, 일부 스마트 지갑 제공업체는 가스와 렌트 후원을 지원합니다. 이를 통해 앱이 사용자 수수료를 대신 지불해 가스리스 경험을 제공함으로써 전환율을 높이고 온보딩을 단순화할 수 있습니다.

### 직접 Solana 노드를 운영해야 하나요?

아니요, 저희 RPC 엔드포인트는 직접 노드를 운영하지 않고도 Solana 네트워크에 안정적으로 접근할 수 있게 해줍니다. 이 서비스는 로드 밸런싱, 확장성을 처리하며, 실시간 업데이트를 위한 HTTP와 WebSocket 연결을 모두 제공합니다.
