본문으로 건너뛰기

Quicknode를 사용하여 비수탁 거래를 하는 방법

업데이트 날짜:
2025년 11월 26일

읽는 데 7분

개요

개인 키는 암호학 및 블록체인 분야에서 가장 민감한 데이터 중 하나입니다. 그러나 수탁형 지갑(지갑 제공업체가 사용자의 개인 키를 보관하는 방식)과 비수탁형 지갑(지갑 사용자가 개인 키를 직접 보관하는 방식) 중 어느 것을 선택할지에 대해서는 항상 논란과 혼란이 있어 왔습니다. 이 가이드에서는 수탁형 지갑과 비수탁형 지갑의 차이점을 심층적으로 살펴보고, Quicknode를 사용하여 비수탁형 거래를 수행하는 방법을 자세히 알아보겠습니다.

필수 조건

  • 시스템에 Node.js가 설치되어 있어야 합니다.
  • 텍스트 편집기.
  • 터미널, 일명 명령줄.

비수탁형 지갑이란 무엇인가요?

비수탁형 지갑이란 지갑 소유자가 개인 키를 완전히 통제하고 보관하는 블록체인 지갑을 말합니다. 비수탁형 지갑은 두 가지 방법으로 생성하고 접근할 수 있습니다. 개인 키(영문자와 숫자로 구성된 문자열)를 사용하거나, 지갑 소유자가 직접 보관하는 12~24개의 단어로 구성된 니모닉 시드 문구를 사용하는 방법입니다(일반적으로 이 문구를 적어내어 인터넷이나 컴퓨터와 연결되지 않은 안전한 장소에 보관합니다).

비수탁형 지갑의 장점은 다음과 같습니다:

  • 자율성 - 사용자는 자신의 자금을 완전히 통제합니다. 사용자는 자신의 자금을 완전히 통제할 수 있는 유일한 주체이기 때문입니다. 사용자는 지갑을 관리하거나 보안을 유지하기 위해 제3자에게 의존할 필요가 없습니다.
  • 보안 - 사용자가 개인 키를 인터넷이나 컴퓨터 외부에 보관하기 때문에 보안 침해의 가능성은 거의 무시할 수 있을 정도입니다.
  • 즉시 출금 - 비수탁형 지갑을 사용하면 사용자는 출금 요청을 확인하기 위해 제3자에 의존할 필요가 없습니다. 이를 통해 전체 절차가 간소화되어 즉시 출금이 가능합니다.

비수탁형 지갑 대 수탁형 지갑

더 많은 영상을 보시려면 저희 유튜브 채널을 구독해 주세요!
  • 개인 키의 보관 주체 - 암호화폐 지갑을 비교할 때 가장 먼저 고려해야 할 요소는 개인 키의 소유권입니다. 비수탁형 지갑의 경우, 사용자가 개인 키를 직접 보관합니다. 반면 수탁형 지갑의 경우, 제3자(대개 지갑 제공업체나 거래소)가 개인 키를 관리합니다.
  • 거래 유형 - 비수탁형 지갑에서 이루어진 거래는 온체인에서 즉시 확인할 수 있습니다. 반면, 수탁형 지갑에서 이루어진 거래는 제3자에 의한 다양한 검증을 거쳐야 하므로 지연이 발생하기 쉽습니다.
  • 보안 - 비수탁형 지갑의 경우, 사용자가 개인 키를 로컬에 직접 저장합니다. 사용자가 개인 키를 공유하거나 기기를 도난당하지 않는 한, 이 지갑은 매우 안전합니다. 반면 수탁형 지갑에서는 개인 키와 같은 모든 민감한 사용자 데이터가 핫 데이터 저장소(실시간으로 업데이트됨)와 콜드 데이터 저장소(수시로 업데이트됨)에 저장되는데, 이 저장소들은 대개 해킹에 취약합니다.
  • 오프라인 접근성 - 비수탁형 지갑은 인터넷 연결이 지속적으로 필요하지 않습니다. 반면, 수탁형 지갑은 데이터가 대개 중앙 집중식 서버에 저장되므로 인터넷 연결이 필요합니다.
  • 백업 및 복구 - 비수탁형 지갑의 유일한 단점은 개인 키나 니모닉 시드를 한 번 잃어버리면 지갑을 복구할 방법이 없다는 점입니다. 반면, 수탁형 지갑 사용자는 제3자에게 복구를 요청할 수 있습니다.

비수탁형 노드 사용

Quicknode에서는 전 세계적으로 수많은 노드를 운영하고 있습니다. 이 모든 노드는 인터넷에 지속적으로 연결되어 있으며 동적으로 운영됩니다. Quicknode API는 강력한 노드들로 구성된 글로벌 네트워크에 연결되어 있습니다. 이러한 노드들은 항상 단일 인프라 구성 요소에 연결되어 있는 것은 아닙니다. API는 더 나은 안정성과 가동 시간을 보장하기 위해 개별 인프라 구성 요소 간에 동적으로 전환되도록 설계되었습니다. 따라서 노드가 끊임없이 변화하고 있기 때문에, 노드에 민감한 데이터를 저장하는 것은 바람직하지 않습니다. 또한 이 노드들이 인터넷에 노출되어 있다는 점에서 보안상의 문제도 있습니다. 당사는 사용자 데이터의 보안을 위해 노드에 개인 키를 저장하는 것을 허용하지 않습니다.  노드들은 동적이기 때문에 더 나은 성능을 제공하기 위해 상태를 자주 변경합니다. 이는 키가 분실될 수 있으며, 결과적으로 사용자 데이터가 손실될 수 있음을 의미합니다. 이것이 바로 비수탁형 노드를 운영하고 사용자가 자신의 지갑을 단독으로 관리하도록 한 이유입니다. 다음 섹션에서는 라이브러리를 사용하여 지갑을 생성하고, 비수탁형 거래를 수행하며, Quicknode를 통해 전송하는 방법을 살펴보겠습니다.

Quicknode 이더리움 엔드포인트 설정하기

오늘의 목적상 Geth나 OpenEthereum(구 Parity)과 같은 거의 모든 이더리움 클라이언트를 사용할 수 있습니다. 하지만 트랜잭션을 전송하기에는 이 방법이 다소 복잡하므로, 여기에서 무료 Quicknode 계정을 생성하고 간편하게 이더리움 엔드포인트를 생성해 보겠습니다. 전송 작업에는 Kovan 테스트 체인을 사용할 것입니다. 무료 이더리움 엔드포인트를 생성한 후, HTTP 프로바이더 URL을 복사하세요:

HTTP 링크와 WSS가 포함된 Quicknode 이더리움 엔드포인트 ‘시작하기’ 페이지의 스크린샷

 

나중에 필요할 테니, 복사해서 저장해 두세요.

지갑 생성하고 테스트용 ETH 받기

지갑을 만들 때는 시중에 나와 있는 다양한 웹3 라이브러리 중 아무 것이나 사용할 수 있습니다. 오늘은 자바스크립트 라이브러리인 ethers.js를 사용하여 트랜잭션에 서명하고 전송할 수 있는 지갑을 만들어 보겠습니다. Go, Python, Ruby, PHP로 이더리움 지갑을 만드는 방법에 대한 가이드도 참고하실 수 있습니다.

node.js에 포함된 npm(Node Package Manager)을 사용하여 이더를 설치하겠습니다. cmd/터미널을 열고 다음 명령어를 입력하여 node.js가 설치되어 있는지 확인하세요:

node -v 

그러면 설치된 Node.js 버전이 표시될 것입니다. 설치되어 있지 않다면, 공식 웹사이트에서 Node.js의 LTS 버전을 다운로드하세요.

프로젝트를 위한 새 디렉터리를 만들고, cmd/터미널에서 해당 디렉터리를 현재 작업 디렉터리로 설정해 봅시다:

mkdir noncusTransaction
cd noncusTransaction

이제 다음 명령어를 입력하여 ethers를 설치하세요:

npm i ethers@5.7

Ethers.js 버전 5.7을 설치하고 있는지 확인하세요.

이 단계에서 가장 흔히 발생하는 문제는 `node-gyp`의 내부 오류입니다. 여기에서 node-gyp 설치 안내를 확인하실 수 있습니다.

참고: node-gyp 관련 문제가 발생할 경우, 사용 중인 파이썬 버전이 위 지침에 나열된 호환 가능한 버전 중 하나와 일치해야 합니다. 

또 다른 흔한 문제는 캐시가 오래되어 갱신되지 않은 경우입니다. cmd/터미널에 아래 명령어를 입력하기만 하면 npm 캐시를 지울 수 있습니다:

npm cache clean

모든 것이 순조롭게 진행된다면, ethers.js가 시스템에 설치될 것입니다.

이제 텍스트 편집기를 열고 transaction.js라는 이름의 새 자바스크립트 파일을 만드세요. 다음 내용을 복사하여 해당 파일에 붙여넣으세요.

var 이더 = require('ethers');  
var privateKey = "0x0111111111111111111122222222222222222223333333333333333333344445";
var wallet = new ethers.지갑(개인키);
console.log("주소: " + 지갑.address);

위 코드에 대한 설명:

1행: ethers 라이브러리 가져오기.

2행: 개인 키를 privateKey 변수에 저장합니다. 반드시 본인의 개인 키를 사용해야 합니다. JavaScript를 사용하여 개인 키를 생성하는 방법에 대해서는가이드를 참고하세요.

참고: 코드를 인터넷(예: 공개 GitHub 저장소 등)에 올릴 경우, 개인 키를 .env 파일에 저장하고 환경 변수를 통해 메인 코드에서 불러오는 것이 항상 좋은 관행입니다. 

3행: 개인 키를 사용하여 새로운 지갑 주소를 생성하고, 이를 wallet 변수에 저장합니다.

4행: 지갑 주소와 문자열을 함께 출력합니다.

이제 파일을 저장하고 스크립트를 실행하세요.

노드 트랜잭션

이렇게 보여야 합니다.

이제 트랜잭션을 진행하고 가스 수수료를 지불할 테스트용 ETH를 받아봅시다. 출력란에서 주소를 복사한 후, Kovan 페이크트로 이동하여 GitHub 또는 GitLab으로 로그인하고, 페이크트의 텍스트 입력란에 지갑 주소를 붙여넣은 다음, “Send me KETH!”를 클릭하세요.

Kovan Etherscan에 주소를 붙여넣으면 테스트용 ETH를 수령했는지 확인할 수 있으며, ETH 잔액을 확인할 수 있습니다.

비수탁형 거래 전송하기

앞서 생성한 지갑을 사용하여 토큰 전송 트랜잭션을 생성하고, Quicknode를 통해 해당 트랜잭션을 체인으로 전송해 봅시다.

transaction.js 파일을 다음과 같이 수정하세요:

var ethers = require('ethers');  
var url = ''ADD_YOUR_ETHEREUM_NODE_URL'';
var customHttpProvider = new ethers.providers.JsonRpcProvider(url);
var privateKey = "0x0111111111111111111122222222222222222223333333333333333333344445";
var wallet = new ethers.Wallet(privateKey);
console.log("Address: " + wallet.address);
tx = {
to: "0x6E0d01A76C3Cf4288372a29124A26D4353EE51BE",
value: ethers.utils.parseEther("0.05"),
chainId: 42,
nonce: 11
}
customHttpProvider.estimateGas(tx).then(function(estimate) {
tx.gasLimit = estimate;
tx.gasPrice = ethers.utils.parseUnits("3.14085197", "gwei");
wallet.signTransaction(tx).then((signedTX)=>{
customHttpProvider.sendTransaction(signedTX).then(console.log);
});
});

그러니 `ADD_YOUR_ETHEREUM_NODE_URL`을 위 섹션에 나와 있는 HTTP 제공자로 대체해 주세요.

위의 코드에 대한 설명.

1행: ethers 라이브러리 가져오기.

2행: Quicknode URL을 url 변수에 저장합니다.

3행: 새로운 ethers 제공자를 생성하여 customHttpProvider 변수에 저장합니다.

4행: 개인 키를 privateKey 변수에 저장합니다(사용자 본인이 개인 키를 생성해야 합니다).

5행: 개인 키를 사용하여 새 지갑 생성.

6행: 지갑 주소와 문자열을 함께 출력합니다.

7~12행: 트랜잭션 객체를 초기화하고, 수신자 주소(트랜잭션이 전송될 주소)가 포함된 ‘to’와 같은 매개변수를 전달합니다. 둘째, 전송할 ETH의 금액이 담긴 ‘value’가 있습니다. 셋째, ‘chainId’는 체인의 네트워크 ID입니다(여기서는 Kovan 테스트넷을 사용하고 있으므로 42입니다). 마지막으로, ‘nonce’는 발신자가 보낸 트랜잭션의 횟수를 나타냅니다. 이 값은 항상 이전 트랜잭션 수 +1이어야 합니다.

 또한 ethers.js의 getTransactionCount() 메서드를 사용하여 주어진 주소에 대한 논스를 구할 수도 있습니다.

13~14행: 프로바이더를 사용하여 가스량을 산정한 후, 이를 트랜잭션 객체의 gasLimit 변수에 저장합니다.

15행: 가스 가격을 설정하고 트랜잭션의 gasPrice 변수에 저장합니다.

16행: 지갑을 사용하여 트랜잭션에 서명합니다.

17행: 프로바이더를 사용하여 서명된 트랜잭션을 전송하고, 트랜잭션 세부 정보를 콘솔에 출력합니다.

파일을 저장한 다음 다음 명령을 사용하여 실행하십시오:

노드 트랜잭션

다음과 비슷한 결과가 출력됩니다:

트랜잭션 해시를 복사한 다음 Kovan Etherscan의 검색창에 붙여넣어 확인되었는지 여부를 확인하세요.

결론

비수탁 거래를 성사시키시고 자금에 대한 유일한 관리자가 되신 것을 축하드립니다. 개인 키는 절대 누구에게도 알려주지 마시고, 지갑과 자금의 보안을 위해 항상 안전한 곳에 보관하시기 바랍니다.

이더리움에 관한 더 많은 기사와 가이드를 받아보시려면 뉴스레터를 구독해 주세요. 또한 트위터와 디스코드 커뮤니티 서버를 통해 언제든지 저희에게 연락하실 수 있으며, 이곳에서는 여러분이 만나볼 수 있는 가장 멋진 개발자들을 만나보실 수 있습니다 :)

여러분의 피드백을 ❤️ 환영합니다!

의견이나 다루었으면 하는 새로운 주제가 있다면 알려주세요. 여러분의 의견을 기다리고 있습니다.

이 가이드를 공유하세요