스마트 컨트랙트의 ABI란?
작성자 Alchemy
스마트 컨트랙트의 ABI(Application Binary Interface)는 컨트랙트가 외부 애플리케이션 및 다른 스마트 컨트랙트와 통신하고 상호작용할 수 있는 능력을 제공한다. 외부 소스로부터 데이터를 받는 것은 애플리케이션과 사용자의 목표를 달성하는 데 중요할 수 있다.
전통적인 웹 개발에서는 애플리케이션과 서버 간의 데이터 관련 대화가 API(Application Program Interface)를 통해 이루어진다. 서버는 요청에 따라 애플리케이션에 데이터를 제공하는 중앙화된 정보 소스 역할을 한다.
블록체인에는 이러한 데이터 중앙화가 존재하지 않는다. 노드는 본질적으로 서버 역할을 하고, 스마트 컨트랙트는 온체인에서 "호스팅되는" 함수다. 블록체인 외부의 애플리케이션(및 다른 스마트 컨트랙트)은 온체인에 있는 스마트 컨트랙트와 통신할 방법이 필요하다. 이때 ABI가 등장한다.
왜 ABI인가?
ABI가 무엇인지 자세히 알아보기 전에, 왜 이것이 필요한지 이해하는 것이 좋다.
스마트 컨트랙트는 EVM(Ethereum Virtual Machine)의 핵심 애플리케이션이다. 스마트 컨트랙트의 목적은 컨트랙트에 정의된 특정 조건이 충족되었을 때 트랜잭션을 실행하는 것이다. 이러한 조건은 온체인 또는 오프체인 이벤트일 수 있다. 스마트 컨트랙트는 Solidity와 같은 고수준 언어로 작성되지만, EVM에는 실행 가능한 바이트코드, 즉 바이너리 형식으로 저장된다.

이 바이트코드는 사람이 읽을 수 없기 때문에 이해하려면 해석이 필요하다. ABI는 스마트 컨트랙트를 작성하는 사람이라면 누구나 Javascript 같은 고수준 언어로 작성된 웹 애플리케이션과 EVM이 이해하는 바이트코드 사이에서 통신할 수 있게 해준다.
ABI란 무엇인가?
Web2의 사촌격인 API처럼, ABI는 함수 선택자 역할을 하며, 스마트 컨트랙트에서 실행을 위해 호출할 수 있는 특정 메서드를 정의한다. 이러한 특정 메서드와 그에 연결된 데이터 타입은 생성된 JSON RPC 파일에 나열된다.

API와 달리, JSON 형식의 요청을 스마트 컨트랙트에 직접 보내고 응답을 기대할 수는 없다. 컨트랙트는 오직 바이트코드로만 통신하기 때문이다. 이를 EVM이 이해하는 형태로 변환하기 위해, 이 정보는 ABI 인코딩을 통해 인코딩된다. 이러한 인코딩에는 함수 시그니처와 변수 선언이 포함되어 있어, EVM이 스마트 컨트랙트 내에서 정확히 어떤 함수를 실행해야 하는지 알 수 있다.

응답 역시 바이트코드로 반환되므로, 웹 애플리케이션이 처리하기 전에 해석이 필요하다. 응답에 바이트코드를 사용하는 것의 장점은 컨트랙트의 함수를 호출한 후 반환되는 데이터의 구조를 예측할 수 있다는 점이다.
ABI 사용 방법
생성
Hardhat/Truffle 같은 툴링이나 Remix 같은 IDE를 사용한다면, 컨트랙트 ABI는 자동으로 생성된다. Solidity Compiler NPM package를 사용하여 수동으로 ABI를 생성할 수도 있다. 패키지를 설치한 후, 터미널에서 'solcjs contractname.sol --abi' 명령을 실행하면 된다. 성공적으로 실행되면 .abi 파일이 생성된다.
이제 생성된 ABI가 있으니, 이 파일에 포함된 요소들을 몇 가지 살펴보자:

실행
ABI는 EVM 바이트코드와 웹사이트의 Javascript 사이의 통역사 역할을 하기 때문에, 스마트 컨트랙트의 함수를 실행하려면 ABI가 필요하다. ABI 외에도 블록체인상의 컨트랙트 주소가 필요하다. 이 과정을 보여주는 간단한 Javascript 코드 스니펫은 다음과 같다:

이미 배포된 컨트랙트의 ABI를 찾고 싶다면, 컨트랙트 주소로 Etherscan에서 검색하면 찾을 수 있다. 예를 들어 여기를 참고하라:

인코딩
모든 통신이 바이트코드로 이루어지기 때문에, 개발자가 직접 이 메시지들을 인코딩해야 한다면 상당히 번거로울 것이다. 다행히 Remix와 같은 대중적인 컴파일러가 인코딩을 대신 처리해준다. 이러한 인코딩은 일정한 패턴을 따르므로, ABI Specification을 살펴보면 어떻게 동작하는지 더 잘 이해할 수 있다.
처음 4바이트는 함수 시그니처로, 스마트 컨트랙트에서 어떤 유형의 함수가 실행되는지를 나타낸다. 대표적인 함수 식별자로 a9059cbb가 있는데, 이는 ERC20 transfer임을 나타낸다. 더 살펴보고 싶다면 함수 시그니처의 데이터베이스 디렉토리가 있다.

다섯 번째 바이트부터는 인자가 인코딩되는 부분이다. 응답도 이와 비슷한 구조를 따르지만 함수 시그니처는 포함되지 않는다.
결론
ABI는 스마트 컨트랙트 작업에서 종종 간과되는 부분이지만, 이 기술의 사용성에서 중요한 역할을 한다. 스마트 컨트랙트 튜토리얼을 통해 직접 구축해보는 것은 이 조용한 일꾼의 힘을 이해하고 지식을 적용해볼 수 있는 좋은 방법이다.
관련 개요
Ethereum2026년 7월 28일
Robinhood Chain에서 밈코인 출시하기
Foundry와 Alchemy RPC로 Robinhood Chain 메인넷에 고정 공급량 ERC20을 작성하고 배포하거나, Alchemy CLI를 사용해 코딩 에이전트에게 출시 전체를 맡기세요.
Ethereum2025년 11월 18일
Ethereum Fusaka 업그레이드란? 12개 EIP 개발자 가이드
Fusaka 업그레이드에 대한 실용적인 분석으로, 핵심 EIP 12개와 이들이 Ethereum 스택 전반의 데이터 가용성, 암호화, 가스 비용, 검증자 운영을 어떻게 변화시키는지 설명합니다.
Ethereum2025년 5월 19일
EIP-7702: Pectra 이후 Ethereum 개발자를 위한 빠른 통합 가이드
Ethereum이 EIP-7702라는 중요한 업그레이드를 앞두고 있습니다. 모든 개발자를 위한 통합 시 고려사항을 빠르게 정리한 가이드입니다.

블록체인 매직을 만드세요
Alchemy는 가장 강력한 Web3 개발자 제품 및 도구를 리소스, 커뮤니티, 그리고 전설적인 지원과 결합합니다.