신규: Helius가 Light Protocol을 인수했습니다
Web3 사용자 경험
블로그/개발

마찰 없이 안전한 UX: 수백만 사용자를 Solana로 온보딩하는 기술 스택

지갑 인프라X의 PrivyLinkedIn의 Privy
Privy Solana 수석 엔지니어X의 Danny B.LinkedIn의 Danny B.
읽는 데 6분

Privy와 Helius를 활용해 임베디드 지갑, 가스비 없는 트랜잭션, 마찰 없는 온보딩을 구현하는 개발자 가이드입니다.

오늘날 대부분의 소비자용 암호화폐 앱은 외부 지갑에 의존합니다. 이 때문에 사용자는 시드 구문을 관리하고, 여러 리디렉션을 거치며, 모든 트랜잭션을 직접 승인해야 합니다. 

블록체인에 익숙하지 않은 일반 사용자에게 이는 지나친 요구입니다. 시드 구문, 가스비, 지갑 팝업은 단순히 불편을 유발하는 데 그치지 않습니다. 사용자의 이탈로 이어집니다. 훌륭한 제품을 갖춘 앱도 사용자가 시작하기 전에 놓치게 됩니다.

하지만 꼭 이럴 필요는 없습니다.

이 가이드에서는 Privy와 Helius를 사용해 Solana에서 매끄러운 온체인 경험을 구축하는 방법을 알아봅니다. 가스비 없는 트랜잭션, 임베디드 지갑, < 20 ms 지연 시간의 즉시 거래를 구현할 수 있습니다.

다음 내용을 다룹니다.

  • Privy SDK 하나로 간편한 로그인(이메일, 소셜, SMS)을 지원하는 셀프 커스터디 임베디드 지갑을 프로비저닝하고 Phantom, Solflare, Backpack 같은 외부 지갑도 함께 지원합니다
  • 보안 지갑을 통해 수수료를 대신 지불하여 가스비 없는 트랜잭션을 지원합니다
  • MoonPay 또는 Coinbase Pay 같은 법정화폐 온램프를 UI에 통합합니다
  • Solana로 유동성을 네이티브 브리징합니다
  • Web2처럼 매끄러운 온체인 UX로 모바일 환경에 구축합니다

이제 Solana 앱을 통해 다음 수백만 명의 사용자를 온보딩하는 데 필요한 요소를 살펴보겠습니다.

실전 암호화폐 온보딩: DeFi 및 소비자 앱 사례

매끄러운 온보딩은 있으면 좋은 기능에 그치지 않습니다. 성장을 가속하는 핵심 요소입니다. 임베디드 지갑을 활용하는 앱은 특히 암호화폐를 처음 접하는 사용자를 대상으로 할 때 월간 사용자 유지율 40% 이상을 달성할 수 있습니다. 

대부분의 일반 사용자에게 가스비, 슬리피지, 우선순위 수수료, 팁 같은 암호화폐 고유 개념은 낯설고 어렵습니다. 

사용자를 유지하려면 쉽게 시작할 수 있는 온보딩을 제공해야 합니다. 사용자가 USDC 같은 스테이블코인을 이용하거나 후원 트랜잭션을 통해 가스비를 해결할 수 있어야 합니다.

목표는 간단합니다. 사용자가 암호화폐의 작동 방식을 배우지 않아도 서명하고, 스왑하고, 스테이킹할 수 있게 하세요.

Pump.fun — 토큰 런치패드

Pump.fun은 Solana에서 가장 빠르게 성장하는 거래 플랫폼 중 하나입니다. 임베디드 지갑과 가스비 없는 트랜잭션을 결합해 팝업, 승인, 지갑 전환 없이 한 번의 탭으로 즉시 거래할 수 있습니다.

처음에는 고빈도 트레이더를 위해 구축했지만, 고급 거래 경험의 효과가 입증되면서 모든 사용자에게 확대 적용되었습니다.

이제 누구나 모바일에서 몇 초 만에 토큰을 출시하고 거래를 시작할 수 있습니다. 일부 사용자는 모바일 앱을 벗어나지 않고 Privy 기반 지갑을 통해 수백만 달러를 거래하기도 했습니다.

Jupiter — DEX 애그리게이터

Jupiter의 Quick Account 경험은 매끄러운 거래가 얼마나 강력한지 보여줍니다. Phantom, Solflare, Backpack은 물론 이메일이나 X로 로그인하는 사용자까지 모두 내부적으로 Privy의 임베디드 지갑 인프라를 통해 상호작용합니다.

이 구성은 트랜잭션 서명 없이 즉시 거래할 수 있게 하며, 매번 마찰 없이 최적 가격으로 체결되는 경로를 제공합니다.

사용자는 준비가 되면 키를 외부 지갑으로 내보낼 수 있습니다. 완전한 제어권을 유지하면서 공급업체 종속도 피할 수 있습니다.

Moonwalk — 걸어서 보상받는 모바일 앱

Moonwalk는 다른 Web2 소비자 앱처럼 이메일, 소셜, SMS로 가입할 수 있게 해 마찰 없는 모바일 온보딩 경험을 제공합니다.

내부적으로는 가입할 때마다 Privy를 사용해 모든 기능을 갖춘 임베디드 지갑이 자동으로 프로비저닝됩니다. 사용자는 시드 구문, 지갑 확장 프로그램, 암호화폐 전용 설정을 신경 쓸 필요가 없습니다.

사용자는 자신이 온체인에 있다는 사실조차 의식하지 않고 걷기 시작해 보상을 얻습니다.

매끄러운 온체인 UX 구축: 네이티브 계정 자금 조달

내부적으로 임베디드 지갑을 생성하는 것은 시작에 불과합니다. 진정으로 매끄러운 앱 경험을 제공하려면 개발자는 사용자 이탈을 가장 자주 유발하는 두 가지 요소인 계정 자금 조달과 크로스체인 유동성도 해결해야 합니다. 

임베디드 온램프

최고의 소비자 앱은 사용자가 지갑에 자금을 충전해야 하는 순간을 포함해 모든 단계에서 마찰을 없앱니다.

앱 경험에 법정화폐 온램프를 직접 임베드하면 사용자는 인터페이스를 벗어나지 않고 SOL 또는 USDC를 구매할 수 있습니다.

Privy의 SDK를 사용하면 MoonPay와 Coinbase Pay 같은 온램프 제공업체를 쉽게 통합할 수 있습니다. 몇 번의 클릭만으로 Solana 자산을 네이티브로 구매할 수 있습니다.

네이티브 브리징

또 다른 핵심 요소는 네이티브 유동성 브리징입니다. 사용자의 Solana 지갑에 자금이 부족하면 개발자는 Privy 지갑을 구성해 Ethereum, Base, Polygon 같은 EVM 체인의 잔액을 브리징할 수 있습니다. 

이를 통해 앱은 유동성을 끌어들이는 허브가 됩니다. 사용자가 이미 자산을 보유한 곳에서 이를 가져와 Solana 경험으로 직접 연결합니다. 앱을 전환할 필요도, 지갑 주소를 복사할 필요도 없습니다. 매끄러운 크로스체인 가치 이전만 남습니다.

Privy와 Helius로 가스비 없는 트랜잭션을 설정하는 방법

계정 자금 조달과 크로스체인 브리징 외에도 Privy의 지갑은 안전한 키 관리를 제공합니다. 기존 키페어보다 수수료 지불자 구성에 최적화되어 있습니다.

1. 관리형 지갑 생성

사용자를 위해 가스비 없는 트랜잭션을 설정하려면 “수수료 지불자” 역할을 하는 관리형 지갑을 프로비저닝해야 합니다.

이 지갑은 사용자를 대신해 가스비를 처리하여 매끄럽고 비용 부담 없는 경험을 제공합니다. 

Privy Dashboard에서 관리형 지갑을 활성화하면 Privy Node.js SDK를 사용해 서버 측에서 프로그래밍 방식으로 생성할 수 있습니다.

Privy NodeJS SDK 사용:

코드
import { PrivyClient } from '@privy-io/server-sdk';

// Initialize the Privy client
const privy = new PrivyClient({
  apiKey: process.env.PRIVY_API_KEY
});

// Create a new Solana managed wallet
async function createFeePayerWallet() {
  const { id, address, chainType } = await privy.walletApi.create({
    chainType: 'solana',
    policyIds: ['optional_policy_id'],
    idempotencyKey: 'unique_request_identifier'
  });

  console.log(`Created fee payer wallet with ID: ${id}`);
  console.log(`Wallet address: ${address}`);

  return { id, address };
}

// Make sure to fund this wallet with SOL to cover transaction fees

지갑 ID와 주소는 이후 단계에서 트랜잭션 수수료를 대신 지불하는 데 사용됩니다.

2. 후원 트랜잭션 구현

관리형 지갑을 설정하고 자금을 충전했다면 사용자에게 가스비 없는 트랜잭션을 제공할 준비가 된 것입니다. 

사용자가 인증하면 Privy는 로그인 자격 증명에 연결된 임베디드 지갑을 프로비저닝합니다. 사용자는 평소처럼 트랜잭션에 서명하지만 블록체인에 직접 제출하지는 않습니다. 트랜잭션은 백엔드로 전송되며, 관리형 지갑이 사용자를 대신해 서명하고 제출합니다.

이 구성을 사용하면 사용자에게 키의 완전한 제어권을 보장하면서 매끄러운 경험을 제공할 수 있습니다.

클라이언트 측 구현(Privy SDK를 사용하는 React)

코드
import { useSolanaWallets } from '@privy-io/react-auth/solana';
import {
  TransactionMessage,
  PublicKey,
  VersionedTransaction,
  Connection
} from '@solana/web3.js';

async function sendGaslessTransaction(instructions) {
  // Get user's embedded wallet
  const { wallets } = useSolanaWallets();
  const embeddedWallet = wallets.find(wallet =>
    wallet.walletClientType === 'privy'
  );

  if (!embeddedWallet) {
    throw new Error('No embedded wallet found');
  }

  // Connect to Solana via Helius for better performance
  const connection = new Connection('https://mainnet.helius-rpc.com/?api-key=YOUR_HELIUS_API_KEY');
  const { blockhash } = await connection.getLatestBlockhash();

  // Set your managed wallet as fee payer
  const feePayerAddress = 'YOUR_PRIVY_SERVER_WALLET_ADDRESS';

  // Build transaction with managed wallet as payer
  const message = new TransactionMessage({
    payerKey: new PublicKey(feePayerAddress),
    recentBlockhash: blockhash,
    instructions
  }).compileToV0Message();

  const transaction = new VersionedTransaction(message);

  // Have user sign the transaction
  const provider = await embeddedWallet.getProvider();
  const serializedMessage = Buffer.from(
    transaction.message.serialize()
  ).toString('base64');

  const { signature } = await provider.request({
    method: 'signMessage',
    params: { message: serializedMessage }
  });

  // Add user signature
  const userSignature = Buffer.from(signature, 'base64');
  transaction.addSignature(
    new PublicKey(embeddedWallet.address),
    userSignature
  );

  // Send to your backend for fee payer signature
  const serializedTx = Buffer.from(
    transaction.serialize()
  ).toString('base64');

  const response = await fetch('/api/sponsor-transaction', {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({ transaction: serializedTx })
  });

  const { transactionHash } = await response.json();
  return transactionHash;
}

마지막으로 부분 서명된 트랜잭션이 클라이언트에서 백엔드로 전송됩니다. 백엔드에서는 트랜잭션을 검증하고 관리형 지갑으로 서명한 뒤 Solana 네트워크에 브로드캐스트합니다.

백엔드 구현(Next.js API 라우트)

코드
// pages/api/sponsor-transaction.js
import { VersionedTransaction } from '@solana/web3.js';
import { PrivyClient } from '@privy-io/server-sdk';

// Initialize Privy SDK
const privy = new PrivyClient({
  apiKey: process.env.PRIVY_API_KEY
});
// For App Router (Next.js 13+)
export async function POST(request) {
  try {
    const { transaction: serializedTx } = await request.json();

    // Deserialize the transaction to verify it (optional)
    const txBuffer = Buffer.from(serializedTx, 'base64');
    const transaction = VersionedTransaction.deserialize(txBuffer);

    // Verify the transaction (check fee payer, validate against policies)
    // ...verification logic here...

    // Sign AND send with your Privy managed wallet in one step
    const serverWalletId = process.env.PRIVY_SERVER_WALLET_ID;
    const { hash } = await privy.walletApi.solana.signAndSendTransaction({
      walletId: serverWalletId,
      caip2: 'solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1', // Mainnet
      transaction: serializedTx,
      rpcUrl: 'https://mainnet.helius-rpc.com/?api-key=YOUR_HELIUS_API_KEY',
      options: {
        maxRetries: 5,
        skipPreflight: true
      }
    });

    return Response.json({
      transactionHash: hash,
      message: 'Transaction sent successfully'
    }, { status: 200 });
  } catch (error) {
    console.error('Error processing transaction:', error);
    return Response.json({
      error: 'Failed to process transaction',
      details: error.message
    }, { status: 500 });
  }
}

Privy의 보안 지갑과 Helius의 최적화된 트랜잭션 인프라를 결합하면 안정성이나 유연성을 포기하지 않고도 사용자에게 매끄럽고 가스비 없는 경험을 제공할 수 있습니다.

매끄러운 앱 경험을 구축하는 가장 유연한 스택

Privy의 모듈형 SDK와 Helius의 고성능 RPC 노드는 개발자가 세계적 수준의 Solana 앱을 구축할 수 있는 강력하고 유연한 기반을 제공합니다. 

저수준 지갑 API와 자체 인증 스택으로 시작하든, Privy를 인증과 다중 인증(MFA), 임베디드 온램프, 네이티브 브리징 같은 고급 기능에 사용하든 Privy의 스택은 제품 요구사항에 맞춰 확장됩니다.

추가 자료

Helius 구독하기

최신 Solana 개발 소식을 확인하고 새 게시물 알림을 받아보세요