트랜잭션은 모든 필수 서명자의 유효한
서명이 포함된 경우에만 실행됩니다. 로컬 개발 중에는 보통 Keypair로 키를 직접 보유하고 서명합니다. 프로덕션 환경에서는 다른 중요한 질문이 생깁니다: 개인 키는 어디에 저장되며, 누가 해당 키로 서명을 승인할 수 있는가?
클라이언트 측 코드에 개인 키를 삽입하거나, 프론트엔드 번들에 포함하거나, 소스 제어에 커밋하지 마십시오. 키를 획득한 누구든 해당 계정 자금에 대한 완전한 제어권을 갖게 됩니다.
서명 방식
| 방식 | 키 저장 위치 | 서명 주체 | 적합한 용도 |
|---|---|---|---|
| 로컬 keypair | 머신의 파일 또는 환경 변수 | 코드에서 직접 서명 | 로컬 개발, 테스트, CI |
| 브라우저 지갑 | 사용자의 지갑 (예: Phantom, Solflare) | 사용자가 트랜잭션별로 직접 서명 | 사용자가 직접 트랜잭션에 서명하는 프론트엔드 dApp |
| 클라우드 KMS / HSM | 하드웨어 기반 키 서비스 (AWS KMS, GCP KMS, Vault) | 백엔드가 서비스에 서명을 요청 | 백엔드 서비스, 트레저리 운영, 규제 환경 |
| 관리형 / MPC 지갑 | 공급자 인프라에 분산 보관 또는 수탁 관리 | 공급자가 정책에 따라 공동 서명 | 임베디드 지갑, 승인 워크플로, 기관 수탁 |
로컬 keypair는 원시 키 자료를 애플리케이션 내부에 두는 유일한 방식입니다. 모든 프로덕션 방식은 키를 전용 인프라에 보관하고, 해당 인프라에 서명을 위임합니다.
백엔드 서명
서버가 서명해야 하는 경우(수수료 지불, 프로그램 트랜잭션 전송 또는
트레저리 운영 등), 원시
keypair 대신 전용 키 관리 백엔드를 사용하세요. Solana Foundation은 Keychain을 관리하고 있습니다. Keychain은
위 표의 모든 백엔드(Memory,
HashiCorp Vault, AWS KMS, GCP KMS, Fireblocks, Privy, Turnkey, CDP, Crossmint,
Dfns, Para, Openfort, Utila, Fordefi)에서 하나의 SolanaSigner 인터페이스를 제공하는
통합 서명 라이브러리(Rust, TypeScript, Python, Go)입니다.
인터페이스가 모든 백엔드에서 공통으로 사용되므로, 로컬에서는
인메모리 키로 개발하고 구성만 변경하여 프로덕션 백엔드로 전환할 수 있으며
애플리케이션 코드를 다시 작성할 필요가 없습니다(Crossmint처럼 브로드캐스트를 대신 처리하는 백엔드는
서명 후 전송 경로를 통해 호출됩니다). Keychain은
@solana/kit,
Rust SDK, solders(Python), solana-go v2
(Go)와 호환됩니다.
키 관리, RPC 보안, 모니터링 등 전체 프로덕션 체크리스트는 프로덕션 준비를 참고하세요.
Is this page helpful?