API와 스마트 컨트랙트를 연결하는 방법

블록체인의 모든 스마트 컨트랙트는 체인링크 오라클과의 인티그레이션을 통해 어떤 API와도 연결할 수 있게 됩니다. 이미 이더리움 오라클 생태계에 체인링크가 참여하면서 API 및 오프체인 데이터 사용이 많이 증가했습니다. 체인링크는 이미 가격 레퍼런스 데이터를 제공하는 선도적 역할을 하고 있으며 이미 DeFi에서 $10억 이상의 가치를 확보하고 있습니다. 이 기능 덕분에 DeFi 플랫폼에서 다양한 일을 수행할 수 있게 되었지만, 이 기능 하나만으로는 스마트 컨트랙트의 잠재력을 모두 실현할 수는 없습니다.

체인링크는 실제 세계에 영향을 미칠 수 있는 잠재력을 실현할 수 있도록 스마트 컨트랙트를 위한 표준 데이터 미들웨어 레이어가 되는 것이라는 더 큰 목표를 바탕으로 개발이 되었습니다. 이 목표를 달성하기 위해 체인링크는 Solidity를 포함한 다른 블록체인 개발자들에게 프레임워크를 제공해 어느 외부 API와 상호교류 할 수 있도록 하여 이더리움 메인넷에서 오늘날 여러분이 이미 경험하고 있습니다.

먼저 소개할 첫 번째 개념은 어댑터입니다. 어댑터는 모든 체인링크 노드가 기본적으로 지원하는 데이터 조작 처리 기능입니다. 어댑터를 통해 모든 개발자는 데이터 리퀘스트를 위한 표준 인터페이스를 가지고 노드 오퍼레이터는 해당 데이터를 제공하기 위한 표준을 가질 수 있게 됩니다. 이러한 어댑터에는 HTTP GET, HTTP POST, Compare, Copy 등과 같은 것이 포함되며 실제 외부 세계 데이터를 디앱에 연결할 수 있도록 해줍니다.

HttpGet 어댑터터를 위한 파라미터는 다음과 같습니다.

  • get: GET 요청을 할 URL이 포함된 문자열을 받음
  • headers: 키가 포함된 객체를 문자열로, 값을 문자열 배열로 사용
  • queryParams: URL의 쿼리 파라미터에 대한 문자열 또는 문자열 배열 받음
  • extPath: 작업의 URL에 추가할 slash-delimited 문자열 또는 문자열 배열을 사용

이제 스마트 컨트랙트가 이런 어댑터와 호환이 되기 위해서 또 중요한 요소인 리퀘스트에 대해서 알려드리겠습니다. ChainlinkClient에서의 모든 컨트랙트는 Chainlink.Request를 생성할 수 있고 이를 통해 개발자들은 체인링크 노드에 리퀘스트할 수 있습니다. 리퀘스트를 제출하기 위해서는 오라클에 사용하려는 노드의 주소, 작업 ID, 약속된 수수료와 같은 기본 정보가 필요합니다. 이런 기본 설정 외에도 리퀘스트 구조를 위한 원하는 어댑터의 파라미터를 추가해야 합니다.

이런 경우 리퀘스트는 어댑터의 어떤 기능 중 하나라도 포함할 수 있기 때문에 어느 API에나 맞춰 유연하게 어느 상황에서나 대처할 수 있도록 바뀔 수 있습니다. 리퀘스트에 대한 더 많은 정보 또는 리퀘스트 제출을 위해 필요한 기능, ChainlinkClient 내에서 응답을 받는 것에 대해 궁금하시다면 체인링크 HTTP GET 리퀘스트 예시 페이지를 참고해주세요.

조금 더 일반적 리퀘스트에 대해서는 노드 오퍼레이터가 이미 이런 경우에 대한 오라클 작업 컨피규레이션을 완료한 경우 리퀘스트는 더 간단해집니다. 필요한 어댑터로 새로운 리퀘스트 데이터 구조를 만드는 것이 아니라 기본적으로 필요한 리퀘스트 데이터 구조만 갖추면 됩니다. 추가적인 어댑터 파라미터도 필요 없고 리퀘스트 데이터 구조를 생성할 때 제공된 작업 ID로 오라클이 어떻게 응답할지 이미 알 것입니다.

하단은 CoinGecko API 소비자 예시에서 발췌한 부분입니다.

Connecting to an API
Connecting a blockchain to an API.

Chainlink Market에서 기존 노드와 노드가 제공할 수 있는 작업을 검색해 필요한 작업 ID를 찾을 수 있습니다.

하지만 만약 스마트 컨트랙트를 위해 원래 기본 어댑터 기능에서 벗어나는 복잡한 유스 케이스를 만들고 싶다면 어떻게 하면 될까요? 만약 더 발전된 API 데이터 조작 처리를 수행해야 한다면 어떻게 해야 할까요? 그런 경우엔 로우 API 데이터가 아니라 다양한 데이터 포인트로부터 수집해 통계학적으로 분석한 메타 데이터가 필요할 수 있습니다. 그럴 경우 가스 비용은 줄이면서 온체인에서 기본 어댑터를 통해 데이터를 조정하고 싶을 수 있습니다. 아니면 온체인 API 리퀘스트를 수행하고 싶지만, 크리덴셜 소스를 사용하고 싶지 않거나 크리덴셜을 온체인 또는 오라클 작업 스펙에 명시하고 싶지 않은 분들도 있을 것입니다. 이러한 경우 외부 어댑터가 필요합니다.

 

A diagram showing how Chainlink interacts with external data and blockchains.

 

외부 어댑터 덕분에 체인링크가 “필요한 어떤 데이터이든 우리가 처리할 수 있어”라고 할 수 있습니다. 체인링크 노드와 함께 오프체인에 존재하는 코드의 일부이기 때문에 원하는 언어로 작성할 수 있고 어댑터의 JSON 스펙과 맞는 데이터 입력값과 출력값이 있다면 원하는 어떤 기능이든 수행할 수 있습니다. 외부 어댑터는 체인링크 노드와 외부 데이터 사이의 인터페이스 역할을 하며 노드 오퍼레이터가 어떻게 리퀘스트 및 JSON 응답을 수신하는지 알 수 있도록 하고 온체인에서 데이터를 소비합니다.

외부 어댑터를 통해 인터페이스 스펙을 오프체인에서 정의한다면 수많은 기회가 열립니다. 가스 사용 없이 API 크리덴셜을 오프체인에서 원하는 곳에 저장할 수 있고 원하는 코드 언어를 사용해 원하는 방식으로 데이터를 다룰 수 있습니다. 외부 어댑터는 레이어 2 오라클과 비슷하며 블록체인 외부에 있는 데이터를 빠르게 저비용으로 포장해 깔끔한 JSON 형식으로 되어 체인링크 노드가 온체인에서 검증할 수 있게 됩니다.

체인링크가 오라클 미들웨어로 다양한 역할을 할 수 있도록 하는 것이 외부 어댑터입니다. 컨트랙트 개발자들은 체인링크 마켓에 있는 어댑터 중 원하는 어댑터를 골라서 사용할 수 있습니다. 만약 외부 어댑터를 만들려는 스마트 컨트랙트 개발자라면 체인링크는 데이터 리퀘스트와 리턴 데이터(return data) 간 JSON 인터페이스만 명시하면 됩니다. 두 인터페이스 사이는 개발자들이 특정 활용 사례에 맞춰 데이터를 생성 및 조작할 수 있습니다. 노드 오퍼레이터로서 외부 어댑터를 지원하고 추가 리퀘스트를 수행하려면 노드 UI와 연결할 수 있는 다리(bridge)를 생성해야 하며 필요한 작업에 대한 어댑터의 다리 이름도 추가해야 합니다.

A diagram showing Chainlink node operator UI.

체인링크는 블록체인과 스마트 컨트랙트 개발자들에게 가장 필요한 기능인 그들의 스마트 컨트랙트를 실제 세계 데이터와 연결할 수 있는 도구를 제공합니다. 체인링크의 디자인은 기본 어댑터를 통해 어느 API나 직접 호출할 수 있게 해주며 광범위한 외부 어댑터를 갖춰 개발자들이 그들이 원하는 방식으로 어떤 데이터를 사용해 유연하게 개발할 수 있는 기회를 제공합니다. 만약 당신이 스마트 컨트랙트 개발자이고 외부 데이터를 통해 개발한 스마트 컨트랙트의 사용성을 더 높이고 싶거나 체인링크에 대해 더 알고 싶은 분들은 밑에 있는 리스트를 참고해주세요.

지금 체인링크와 함께 만들어보세요.

한 번 시도해보고 싶나요? 체인링크 웹사이트에 있는 예시 페이지를 참고해 오프체인 데이터와 연결된 당신의 첫 번째 스마트 컨트랙트를 만들어보세요.

만약 체인링크 오라클을 활용해 더 이점을 누릴 수 있는 프로덕트를 개발하고 있는 개발자이고 체인링크 네트워크의 오픈 소스 개발에 도움을 주고 싶은 분들은 체인링크 개발자 문서 페이지를 방문하시거나 Discord 에서 기술적 대화를 나눠보세요.

Website | Twitter I Reddit | YouTube | Telegram | Events | GitHub | Price Feeds | DeFi

Kakaotalk: https://open.kakao.com/o/gWXAAf0b
Telegram: https://t.me/chainlink_korea
Facebook Group: https://web.facebook.com/groups/459042728150845
문의사항: [email protected]

GitHub: https://github.com/smartcontractkit/chainlink
Twitter: https://twitter.com/chainlinkofficial
Telegram: https://t.me/chainlinkofficial

Need Integration Support?
Talk to an expert
Faucets
Get testnet tokens
Read the Docs
Technical documentation