본문으로 건너뛰기
0%

Solana에서 밈코인을 만드는 방법: 단계별 가이드

작성자: Uttam Singh

마지막 업데이트: 2025년 12월 19일7분 읽기
Solana 밈코인 가이드를 위한 고양이 테마 밈코인 일러스트

Solana를 처음 접한다면, 밈코인은 가볍게 손을 담가볼 수 있는 방법입니다. 이 영역은 시끄럽고 혼란스럽지만, 그 활동은 토큰 민트, 메타데이터, 지갑, RPC 같은 실제 구성 요소를 다루도록 만듭니다. 그리고 그 과정에서 결과를 바로 확인할 수 있습니다. 밈코인을 만드는 것은 Solana 앱이 실제로 어떻게 작동하는지 이해하는 간단한 경로입니다.

이 튜토리얼에서는 Solana에서 밈코인을 만드는 두 가지 실용적인 방법을 보여드립니다:

  1. 노코드 launchpad (가장 빠르게 출시하는 방법)
  2. Solana의 SPL 툴링을 사용한 직접 민팅 (완전한 제어를 원하는 개발자에게 적합)

Solana에서 밈코인이란?

Solana에서 밈코인은 대개 이름, 심볼, 이미지, 출시 계획을 가진 표준 SPL fungible 토큰일 뿐입니다. 기술적으로 특별한 부분은 없으며, 동일한 SPL 토큰 메커니즘이 지갑, DeFi 앱, 그리고 진지한 소비자 프로젝트에서도 사용됩니다.

밈코인을 눈에 띄게 만드는 것은 그것이 어떻게 사용되는가입니다. Solana의 낮은 수수료와 빠른 트랜잭션 덕분에 토큰을 민팅하고, 자주 거래하고, 출시를 실험하기가 쉬운데, 이것이 활동이 활발한 시기에 밈코인이 네트워크의 토큰 생성 및 거래 활동에서 큰 비중을 차지하는 이유입니다.

개발자 입장에서는 그 활동 자체가 핵심입니다. 밈코인은 전체 애플리케이션을 먼저 만들 필요 없이 Solana의 핵심 프리미티브(SPL 토큰, 메타데이터, 지갑, 출시 흐름)를 배울 수 있는 간단하고 부담 없는 방법입니다.

Solana에서 실제로 만들게 되는 것

Solana 토큰에는 mint 계정(토큰의 식별자)이 있고, 사용자는 토큰 계정(흔히 "Associated Token Account" 또는 ATA)에 잔액을 보유합니다.

다음 중에서 선택하게 됩니다:

  • SPL Token program
  • 내장 기능(예: 메타데이터 확장, 전송 수수료, 기타 제어)을 원한다면 Token-2022 / Token Extensions.

대부분의 밈코인의 경우, 레거시 SPL 토큰이 지갑/거래소 호환성을 최대화하는 데 여전히 가장 안전한 기본값입니다.

옵션 a: 밈코인 launchpad로 출시하기 (노코드)

목표가 "토큰을 최대한 빨리 출시하고 거래 가능하게 만드는 것"이라면, 서드파티 launchpad가 민팅과 초기 거래 UX를 대신 처리해 줍니다. 이 옵션에서는 여러 launchpad 중에서 선택할 수 있습니다.

Pump.fun

Pump의 토큰 생성 포털 스크린샷

Pump.fun의 핵심 제안은 기본적으로 "유동성을 조달하지 않고도 즉시 거래 가능한 토큰을 출시한다"는 것입니다. Pump.fun에서의 일반적인 흐름은 다음과 같습니다:

  • 토큰의 이름, 티커, 이미지 선택
  • 생성 수수료 지불
  • 플랫폼의 메커니즘에 따라 토큰 거래 시작

Raydium LaunchLab

Raydium의 토큰 포털 스크린샷

Raydium LaunchLab도 비슷한 토큰 생성 흐름을 제공합니다(이름, 티커, 이미지, 소셜 링크만 추가하면 됩니다). 새 토큰을 생성하고 출시하는 두 가지 방식을 제공하는데, 단순화된 JustSendIt 모드와 완전히 커스터마이즈 가능한 Advanced Mode입니다. Advanced Mode는 토큰의 파라미터를 완전히 제어할 수 있어 특정 토크노믹스나 더 복잡한 구성이 필요한 프로젝트에 적합합니다.

Bonk.fun

BONK 웹사이트 스크린샷

BONK.fun은 2025년 많은 주목을 받은 또 다른 Solana 밈코인 launchpad입니다. 이 플랫폼은 커뮤니티 주도 인센티브와 투명성을 제공하며 상당한 시장 점유율을 확보했습니다.

옵션 b: SPL 툴링으로 직접 토큰 만들기

이러한 launchpad를 거치지 않고 밈코인을 완전히 직접 만들 수도 있습니다. 그러려면 다음 단계를 거치게 됩니다.

Solana SPL 토큰 만들기

SPL 토큰을 민팅한 후 지갑에서 "Unknown token"으로 표시되거나 아이콘이 없는 이유가 궁금했다면, 바로 이것 때문입니다: SPL mint만으로는 풍부한 메타데이터가 포함되지 않습니다.

Solana에서 fungible 토큰은 SPL Token program으로 생성되며, (이름, 심볼, 이미지, JSON URI 같은) "예쁜" 필드는 보통 Metaplex Token Metadata program을 통해 연결됩니다.

이 튜토리얼에서는 다음을 사용해 fungible SPL 토큰을 민팅합니다:

  • 트랜잭션을 빌드/서명/전송하기 위한 (Metaplex의 최신 클라이언트 프레임워크) Umi
  • 하나의 흐름으로 mint와 메타데이터를 생성하는 mpl-token-metadata 헬퍼
  • 네트워크 연결로 사용할 Alchemy Solana RPC
  • 기존 Phantom 지갑의 private key (새로운 키페어 생성 없음)

온체인에서 실제로 하는 일

민팅 스크립트를 실행할 때, 단순히 "토큰을 생성"하는 것이 아니라, 지갑과 익스플로러가 이를 해석하는 방법을 알 수 있도록 함께 작동하는 소규모의 온체인 계정 집합을 생성하는 것입니다.

  1. Mint 계정 (SPL Token mint): 이는 토큰을 정의하는 핵심 온체인 계정입니다. Solana에서 사람들이 "토큰 주소"를 언급할 때 보통 이 mint 계정을 가리킵니다. Solana Explorer에 붙여넣게 될 주소이기도 합니다. 이 계정은 다음과 같은 정보를 저장합니다:

  2. Decimals: 토큰이 얼마나 세분화되는지 (예를 들어 8 decimals는 1.0 토큰 = 100,000,000 base unit을 의미).

  3. Mint authority: 추가 공급을 민팅할 수 있는 권한을 가진 키.

  4. Freeze authority (선택 사항): 토큰 계정을 동결할 수 있는 키.

  5. 메타데이터 계정 (Metaplex Token Metadata PDA): SPL Token program 자체는 이름, 심볼, 이미지를 저장하지 않습니다. 그 정보는 Metaplex Token Metadata program이 생성하는 별도의 메타데이터 계정에 존재합니다. 이 계정은 Program Derived Address(PDA)로, mint 주소로부터 결정론적으로 파생됩니다. 즉 지갑은 레지스트리나 데이터베이스가 필요 없이 mint로부터 메타데이터 주소를 유도하고, 존재하는지 확인한 뒤, 존재하면 읽어올 수 있습니다. 이것이 Phantom 같은 지갑이 토큰 메타데이터를 자동으로 발견하고 표시하는 방식입니다.

  6. 오프체인 메타데이터 (URI → JSON): 메타데이터 계정은 모든 세부 정보를 직접 저장하지 않습니다. 대신 오프체인에 (보통 IPFS에) 호스팅된 JSON 파일을 가리키는 URI를 저장합니다. 해당 JSON은 이름, 심볼, 설명, 이미지 같은 표준 스키마를 따르며, 익스플로러와 지갑이 이를 가져와 렌더링하는 방법을 알고 있습니다. 이를 통해 온체인 데이터는 작게 유지하면서도 풍부한 토큰 정보를 제공할 수 있습니다.

이 맥락을 이해했으니, 아래 코드가 더 이해하기 쉬울 것입니다: mint를 생성하고, 여기에 메타데이터 계정을 연결하고, 그 메타데이터가 지갑이 읽을 수 있는 JSON 파일을 가리키도록 설정하는 작업입니다.

이제 밈코인을 만들어 봅시다.

1단계: 프로젝트 설정 (TypeScript + 의존성)

먼저 새 프로젝트 디렉터리를 만들고 Node.js 프로젝트를 초기화합니다. 이렇게 하면 깔끔한 작업 공간과 의존성을 관리할 package.json 파일이 생깁니다.

bash
Copied
mkdir CATY cd CATY npm init -y npm i -D typescript ts-node @types/node npx tsc --init
  • npm init -y은 기본 설정을 사용해 기본적인 Node 프로젝트를 생성합니다.
  • typescript는 타입이 있는 JavaScript를 작성할 수 있게 해주며, Solana 및 Metaplex SDK 작업 시 유용합니다.
  • ts-node을 사용하면 별도의 빌드 단계 없이 TypeScript 파일을 직접 실행할 수 있습니다.
  • npx tsc --init는 TypeScript 컴파일 방식을 제어하는 tsconfig.json을 생성합니다.

다음으로, 이후에 사용할 몇 가지 옵션을 활성화하기 위해 tsconfig.json을 업데이트합니다:

json
Copied
{ "compilerOptions": { "esModuleInterop": true, "resolveJsonModule": true } }
  • esModuleInterop는 일반적인 Node 패키지와 함께 최신 import 문법을 사용할 수 있게 해줍니다. - resolveJsonModule는 .json 파일을 직접 import할 수 있게 해주며, 설정 및 메타데이터 작업 시 유용합니다.

이제 Solana 및 Metaplex와 상호작용하는 데 필요한 라이브러리를 설치합니다:

bash
Copied
npm i @solana/web3.js@1 \\ @metaplex-foundation/umi \\ @metaplex-foundation/umi-bundle-defaults \\ @metaplex-foundation/mpl-token-metadata \\ bs58 dotenv

각 패키지의 용도는 다음과 같습니다:

  • @solana/web3.js은 Solana 네트워크와 상호작용하기 위한 핵심 JavaScript SDK입니다.
  • umi은 트랜잭션을 빌드, 서명, 전송하기 위한 Metaplex의 클라이언트 프레임워크입니다.
  • umi-bundle-defaults은 (RPC 처리 같은) 공통 기본값을 제공해 모든 것을 수동으로 연결할 필요가 없게 해줍니다.
  • mpl-token-metadata는 토큰 메타데이터를 생성하고 연결하는 헬퍼를 포함합니다.
  • bs58은 Phantom의 base58 인코딩된 private key를 디코딩하는 데 사용됩니다.
  • dotenv은 RPC URL, private key 같은 비밀 값을 .env 파일에서 안전하게 불러올 수 있게 해줍니다.

마지막으로, 튜토리얼 전반에서 사용할 파일을 생성합니다:

bash
Copied
touch mint.ts token.json .env .gitignore
  • mint.ts에는 토큰을 생성하고 민팅하는 스크립트가 들어갑니다. - token.json에는 오프체인 메타데이터(이름, 심볼, 이미지)가 들어갑니다. - .env에는 RPC URL, private key 같은 민감한 값이 저장됩니다. - .gitignore는 비밀 값이 버전 관리 시스템에 커밋되지 않도록 보장합니다.

.gitignore에 다음을 추가합시다:

javascript
Copied
node_modules .env

이렇게 하면 의존성과 private key가 실수로 Git에 커밋되는 것을 방지합니다.

2단계: .env에 Alchemy RPC + Phantom private key 추가하기

Alchemy RPC

Alchemy 대시보드 스크린샷

Alchemy는 devnet과 mainnet 모두에 빠르고 안정적인 Solana RPC 엔드포인트를 제공합니다. 테스트하는 동안에는 devnet을 사용하세요. Alchemy의 엔드포인트에 접근하려면 (무료!) API key가 필요합니다. 대시보드로 이동해서 대시보드에서 새 Solana 앱을 생성하기만 하면 됩니다. Node API와 Webhooks 서비스를 모두 켜고, devnet을 활성화하세요. 그 다음 API key나 엔드포인트 URL을 .env 파일에 복사/붙여넣기 하면 됩니다.

Phantom private key export

Phantom의 공식 도움말 문서에서 private key를 확인/복사하는 정확한 흐름을 보여줍니다: 간단히 말해 Settings로 이동한 다음, "Manage Accounts", "Show Private Key", "Choose network"를 차례로 선택하고 Continue를 클릭하면 됩니다.

완료했다면, .env를 다음과 같이 설정합니다:

json
Copied
SOLANA_RPC_URL=https://solana-devnet.g.alchemy.com/v2/YOUR_ALCHEMY_KEY PHANTOM_PRIVATE_KEY_BASE58=PASTE_FROM_PHANTOM TOKEN_METADATA_URI=

보안 참고 사항: 이것은 "스크립트 안의 hot wallet" 패턴입니다. devnet 실험에는 괜찮지만, mainnet에서는 전용 지갑을 사용하고 임의의 프로젝트에 키를 붙여넣지 않는 것이 좋습니다.

3단계: 이미지 + 메타데이터를 IPFS(Pinata)에 업로드하기

컴퓨터에 token.json 파일이 있는 것만으로는 충분하지 않습니다. Solana 프로그램은 로컬 파일 시스템의 파일을 읽을 수 없고, 큰 메타데이터를 온체인에 직접 저장하는 것은 비용이 많이 듭니다. 대신 Token Metadata program은 (보통 IPFS에) 공개적으로 접근 가능한 JSON 파일을 가리키는 URI를 저장합니다. 지갑과 익스플로러는 이 URI를 사용해 해당 JSON을 가져와 토큰의 이름, 심볼, 이미지를 표시합니다.

여기에는 어떤 IPFS든 사용할 수 있습니다. 이 튜토리얼에서는 Pinata를 사용했습니다. 작동 방식을 설명하면, 업로드한 파일은 CID(content identifier)를 받고, gateway URL을 통해 이를 가져올 수 있습니다. Pinata 문서에서 gateway와 가져오기에 대해 다룹니다.

실제 작업 순서는 다음과 같습니다. 먼저 token.json을 생성합니다:

json
Copied
{ "name": "Cat with Hat", "symbol": "CATY", "description": "My Cat with Hat", "image": "https://YOUR_GATEWAY/ipfs/YOUR_IMAGE_CID" }

작업 순서는 다음과 같습니다:

  • 이미지를 업로드 → gateway URL을 복사.
  • 그 URL을 token.json.image에 붙여넣기
  • 업데이트한 token.json을 업로드 → JSON의 gateway URL을 복사.
  • 그 JSON URL을 .env에 넣기:
json
Copied
TOKEN_METADATA_URI=https://gateway.pinata.cloud/ipfs/<YOUR_TOKEN_JSON_CID>

직접 준비한 이미지나 메타데이터를 사용하거나, 아래 예시 이미지를 사용할 수 있습니다.

모자를 쓴 고양이, 밈코인 토큰 메타데이터 예시 이미지

4단계: 지갑에 Devnet SOL 충전하기

민팅과 계정 생성에는 (devnet에서도) SOL이 필요합니다. 다행히 devnet SOL은 무료입니다. Solana의 공식 devnet faucet을 사용해 테스트용 SOL을 받을 수 있습니다.

Solana 파우셋 스크린샷

5단계: Alchemy RPC를 통해 (umi + token metadata로) 토큰 민팅하기

다음은 몇 가지 중요한 세부 사항이 반영된 전체 mint.ts 스크립트입니다:

  • Phantom의 base58 private key를 Solana Keypair로 변환합니다 (Phantom export는 64바이트일 수 있고, 일부 형식은 32바이트입니다).
  • Umi가 Alchemy RPC URL을 사용하도록 지정합니다. Umi 문서에 따르면 createUmi(...)에 전달하는 엔드포인트가 RPC 호출에 사용되는 엔드포인트입니다.
  • 트랜잭션 서명을 올바르게(base58로) 출력하므로 익스플로러 링크가 정상적으로 작동합니다.

이것을 mint.ts에 복사/붙여넣기 하세요:

typescript
Copied
import "dotenv/config"; import bs58 from "bs58"; import { Keypair } from "@solana/web3.js"; import { mplTokenMetadata, createAndMint, TokenStandard, } from "@metaplex-foundation/mpl-token-metadata"; import { createSignerFromKeypair, generateSigner, percentAmount, signerIdentity, } from "@metaplex-foundation/umi"; import { createUmi } from "@metaplex-foundation/umi-bundle-defaults"; const rpcUrl = process.env.SOLANA_RPC_URL!; const pk58 = process.env.PHANTOM_PRIVATE_KEY_BASE58!; if (!rpcUrl) throw new Error("Missing SOLANA_RPC_URL"); if (!pk58) throw new Error("Missing PHANTOM_PRIVATE_KEY_BASE58"); // Umi uses this RPC endpoint for all subsequent RPC calls. [oai_citation:13‡developers.metaplex.com] const umi = createUmi(rpcUrl); // 1) Phantom base58 private key -> Solana Keypair. // Phantom commonly exports a 64-byte secretKey; some tools export 32 bytes. const raw = bs58.decode(pk58); const solanaKeypair = raw.length === 64 ? Keypair.fromSecretKey(raw) : raw.length === 32 ? Keypair.fromSeed(raw) : (() => { throw new Error(`Unexpected key length: ${raw.length}`); })(); // 2) Solana Keypair -> Umi signer + identity. const umiKeypair = umi.eddsa.createKeypairFromSecretKey(solanaKeypair.secretKey); const signer = createSignerFromKeypair(umi, umiKeypair); umi.use(signerIdentity(signer)); // 3) Add Token Metadata program helpers. // Token Metadata attaches data to fungible and non-fungible mints. [oai_citation:14‡GitHub] umi.use(mplTokenMetadata()); // --- token config --- const NAME = "Cat with Hat"; const SYMBOL = "CATY"; const METADATA_URI = process.env.TOKEN_METADATA_URI!; const decimals = 8; const supplyTokens = 1_000_000n; const amountBaseUnits = supplyTokens * 10n ** BigInt(decimals); if (!METADATA_URI) throw new Error("Missing TOKEN_METADATA_URI"); (async () => { // generateSigner creates a new keypair for the mint account. // Your Phantom wallet pays fees and becomes the authority by default. const mint = generateSigner(umi); const res = await createAndMint(umi, { mint, authority: umi.identity, name: NAME, symbol: SYMBOL, uri: METADATA_URI, sellerFeeBasisPoints: percentAmount(0), decimals, amount: amountBaseUnits, tokenOwner: umi.identity.publicKey, tokenStandard: TokenStandard.Fungible, }).sendAndConfirm(umi); // Umi returns signatures as bytes; Explorer expects base58. const sigBase58 = typeof res.signature === "string" ? res.signature : bs58.encode(res.signature); console.log("Mint address:", mint.publicKey.toString()); console.log("Tx:", `https://explorer.solana.com/tx/${sigBase58}?cluster=devnet`); })();

스크립트를 실행해 봅시다 - 스크립트가 성공적으로 완료되면 밈코인 토큰이 민팅됩니다. 출력에는 mint 주소와 온체인에서 확인할 수 있는 트랜잭션 링크가 포함됩니다.

bash
Copied
npx ts-node mint.ts

모든 것이 제대로 작동했다면, 축하합니다 — 방금 Solana에서 밈코인 토큰을 민팅했습니다.

민팅 성공 응답 스크린샷

6단계: Solana 익스플로러에서 mint 확인하기

스크립트가 출력한 Mint 주소를 복사해서 Solana Explorer에 붙여넣으세요. devnet에 있는지 확인하세요.

🎉 축하합니다 - 고정된 초기 공급량 1,000,000과 연결된 메타데이터를 가진 나만의 토큰(여러분의 "CATY")을 민팅했습니다.

밈코인을 보여주는 Solana Explorer 스크린샷

마치며

이제 Solana에서 밈코인을 출시하는 두 가지 방법을 모두 살펴봤습니다. 가장 빠른 경로를 원한다면 pump.fun, Raydium LaunchLab, BONK.fun 같은 launchpad가 대부분의 설정을 대신 처리해 줍니다. 완전한 제어를 원한다면 직접 SPL 토큰을 민팅하는 것이 Solana 토큰이 실제로 어떻게 작동하는지 더 깊이 이해하는 데 도움이 됩니다.

어느 쪽이든, 이제 원하는 만큼 밈코인을 만들 준비가 되었습니다. 계속 진행하고 싶다면 Alchemy의 Solana 문서와 개발자 가이드에서 Solana RPC, 지갑, 프로덕션 준비가 된 툴링에 대해 더 깊이 살펴보고, Solana 앱 빌드, SPL 토큰 다루기, 실제 온체인 트래픽 처리에 대한 튜토리얼을 확인해 보세요.

자주 묻는 질문

Solana에서 밈코인이란?

Solana에서 밈코인은 이름, 심볼, 이미지, 출시 계획을 가진 표준 SPL fungible 토큰입니다. 기술적으로 특별한 부분은 없으며, 동일한 SPL 토큰 메커니즘이 지갑, DeFi 앱, 그리고 진지한 소비자 프로젝트에서도 사용됩니다.

Solana에서 밈코인을 만드는 두 가지 주요 방법은 무엇인가요?

가장 빠른 출시를 원한다면 Pump.fun, Raydium LaunchLab, BONK.fun 같은 노코드 launchpad를 사용할 수 있고, 과정에 대한 완전한 제어를 원한다면 Solana의 SPL 툴링으로 직접 토큰을 민팅할 수 있습니다.

밈코인을 만들려면 어떤 지갑이 필요한가요?

트랜잭션 수수료를 충당할 소량의 SOL이 충전된 Phantom, Backpack, Solflare 같은 Solana 호환 지갑이 필요합니다.

Solana에서 밈코인을 만드는 데 비용이 얼마나 드나요?

Solana에서 토큰을 생성하는 비용은 매우 낮으며, devnet이나 mainnet에서 기본적인 토큰 민팅과 계정 생성에 드는 수수료는 보통 SOL로 1달러 미만입니다.

SPL Token과 Token-2022의 차이점은 무엇인가요?

SPL Token은 레거시 토큰 프로그램으로, 지갑 및 거래소 호환성을 최대화하는 데 가장 안전한 기본값입니다. Token-2022(Token Extensions)는 메타데이터 확장이나 전송 수수료 같은 내장 기능을 제공하지만, 보편적인 지원은 다소 부족할 수 있습니다.

밈코인에 메타데이터를 추가해야 하나요?

네, 메타데이터(이름, 심볼, 이미지, 설명)는 Metaplex Token Metadata program을 통해 저장되며, 일반적으로 IPFS에 오프체인으로 호스팅됩니다. 이를 통해 지갑과 익스플로러가 토큰을 "Unknown token"으로 표시하는 대신 정보를 보여줄 수 있습니다.

Umi가 무엇이고 왜 토큰 민팅에 사용되나요?

Umi는 Solana에서 트랜잭션을 빌드, 서명, 전송하는 데 사용되는 Metaplex의 최신 클라이언트 프레임워크입니다. 토큰 생성과 메타데이터 연결을 하나의 흐름으로 단순화해 줍니다.

밈코인을 민팅할 때 어떤 계정이 생성되나요?

decimals와 authority를 저장하는 토큰의 핵심 식별자인 mint 계정, 이름·심볼·URI를 저장하는 PDA인 메타데이터 계정, 그리고 자세한 토큰 정보를 담은 IPFS 상의 JSON 파일인 오프체인 메타데이터가 생성됩니다.

mainnet에 출시하기 전에 토큰 생성을 테스트해 볼 수 있나요?

네, 테스트에는 Solana devnet을 사용할 수 있습니다. Solana의 공식 devnet faucet에서 무료 devnet SOL을 받아 실험하는 동안 트랜잭션 비용을 충당할 수 있습니다.

Alchemy 뉴스레터

출시 소식을 가장 먼저 받아보세요

뉴스레터 구독하기

Alchemy의 최신 제품 업데이트와 리소스 받기

A
O
D
+
구독자 80,000명 이상

이메일 주소를 입력하면 마케팅 커뮤니케이션 및 제품 업데이트 수신에 동의하게 됩니다. Alchemy는 저희 개인정보 처리방침에 따라 수집한 정보를 처리합니다. 언제든지 구독을 취소할 수 있습니다.