ethereum solidity abi rlp evm smart-contract

이더리움 개발자 가이드: ABI, RLP 및 EVM 완벽 이해

이더리움 핵심 프로토콜에 대한 기술적 심층 분석입니다. ABI 인코딩, RLP 직렬화, 함수 선택기 및 이더리움 가상 머신(EVM) 바이트코드를 배워보세요. 이더 단위에 대해 알아봅시다.

2026-04-12

월드 컴퓨터의 내부 구조

이더리움은 흔히 "월드 컴퓨터"라고 불립니다. 하지만 기존 서버와 달리, 이더리움의 모든 상호작용은 네트워크의 모든 노드가 동일한 상태에 도달하도록 보장하는 엄격한 저수준 프로토콜 세트에 의해 정의됩니다.

개발자와 파워 유저에게 ABI, RLPEVM 바이트코드와 같은 프로토콜을 이해하는 것은 트랜잭션 디버깅, 스마트 계약 상호작용 및 가스 사용량 최적화에 필수적입니다. 이 가이드에서는 이더리움 생태계의 기술적 기초를 분석합니다.


1. 애플리케이션 바이너리 인터페이스 (ABI)

ABI는 이더리움 생태계에서 스마트 계약과 상호작용하는 표준 방식입니다. 스마트 계약은 바이트코드로 컴파일되므로, 어떤 함수를 호출하고 어떤 인수를 전달할지 EVM에 알려줄 방법이 필요합니다.

함수 선택자 (Function Selectors)

Solidity 계약의 모든 함수는 함수 선택자에 의해 식별됩니다.

  1. 서명(Signature): 함수 이름과 매개변수 유형을 가져옵니다(예: transfer(address,uint256)).
  2. 해시: 해당 문자열의 Keccak-256 해시를 계산합니다.
  3. 선택기: 해시의 처음 4바이트입니다.

계약에 트랜잭션을 보낼 때 "Data" 필드의 처음 4바이트가 함수 선택자입니다. 함수 선택자 디코더를 사용하면 트랜잭션이 어떤 작업을 수행하는지 식별하는 데 도움이 됩니다.

인수 인코딩

ABI는 다양한 데이터 유형(uint, address, string, bytes)을 32바이트(256비트) 슬롯으로 패킹하는 방법을 정의합니다. 고정 크기 유형은 순차적으로 패킹되는 반면, 문자열이나 배열과 같은 동적 유형은 페이로드 끝에 있는 실제 데이터를 가리키기 위해 오프셋을 사용합니다. 이러한 데이터를 생성하거나 트랜잭션에서 구문 분석하려면 ABI 인코더 디코더가 필요합니다.


2. RLP (Recursive Length Prefix) 직렬화

ABI가 계약 상호작용에 사용되는 반면, RLP는 트랜잭션 및 블록과 같은 객체를 직렬화하기 위해 이더리움의 실행 레이어에서 사용하는 주요 인코딩 방법입니다.

왜 JSON이나 Protobuf가 아닌가요?

RLP는 절대적인 단순성과 공간 효율성을 위해 설계되었습니다. JSON과 달리 메타데이터(키, 따옴표 없음)가 없습니다. 구조와 원시 바이트만 인코딩합니다.

RLP 작동 방식

RLP는 데이터의 길이에 따라 인코딩합니다.

  • 짧은 문자열: (0-55바이트) 단일 바이트(0x80 + 길이)가 접두사로 붙습니다.
  • 긴 문자열: 멀티바이트 길이 표시자가 접두사로 붙습니다.
  • 리스트: (배열) 0xc0 + 직렬화된 항목의 총 길이가 접두사로 붙습니다.

전송하는 모든 트랜잭션은 서명되어 네트워크에 브로드캐스트되기 전에 RLP 인코딩됩니다. 원시 트랜잭션 16진수 데이터를 분석하려면 RLP 인코더 디코더가 필수적인 도구입니다.


3. 이더리움 단위: Wei에서 Ether까지

이더(ETH)는 소수점 18자리까지 나눌 수 있습니다. 스마트 계약에서 "소수점 오버플로" 오류를 피하려면 이러한 단위를 이해하는 것이 중요합니다.

단위 가치 (Wei 기준) 일반적인 명칭
Wei 1 가장 작은 단위.
Gwei 1,000,000,000 ($10^9$) 가스 가격에 사용됩니다.
Szabo $10^{12}$ 마이크로이더(Microether).
Finney $10^{15}$ 밀리이더(Milliether).
Ether $10^{18}$ 기본 통화 단위.

이더리움 단위 변환기(또는 Wei/Gwei/ETH 변환기)를 사용하면 정확한 금액을 보내고 적절한 가스 가격을 설정할 수 있습니다.


4. EVM 및 바이트코드

Solidity 계약을 컴파일하면 EVM 바이트코드가 됩니다. 이 바이트코드는 **작업 코드(Opcodes)**의 시퀀스입니다.

작업 코드와 가스

각 작업 코드(예: ADD, MUL, SSTORE, SLOAD)에는 고정된 "가스(Gas)" 비용이 있습니다.

  • SSTORE (데이터 저장): 매우 비쌉니다.
  • ADD (수학 연산): 매우 저렴합니다.

역어셈블 (Disassembly)

EVM 바이트코드 역어셈블러는 원시 16진수 코드를 가져와 사람이 읽을 수 있는 작업 코드로 다시 변환합니다. 이는 보안 연구원이 Etherscan에서 소스 코드를 확인할 수 없는 "검증되지 않은" 계약을 감사하는 데 사용됩니다.


FAQ: 이더리움 내부 구조

Q: "함수 서명(Function Signature)"이란 무엇인가요?

A: 함수의 사람이 읽을 수 있는 문자열 표현입니다(예: deposit()). 이 해시값이 함수 선택자를 결정합니다.

Q: 모든 이더리움 트랜잭션을 디코딩할 수 있나요?

A: 계약의 **ABI(JSON)**가 있으면 입력 데이터를 디코딩할 수 있습니다. ABI가 없어도 원시 바이트와 함수 선택자는 볼 수 있으며, 4byte.directory와 같은 서비스를 통해 선택자를 알려진 서명과 일치시킬 수 있는 경우가 많습니다.

Q: 왜 가스비로 Gwei를 사용해야 하나요?

A: ETH는 가치의 단위가 너무 커서 가스의 기본 단위로 사용하기에 부적합하기 때문입니다. Gwei(Giga-Wei)를 사용하면 앞부분의 수많은 0을 다루지 않고도 네트워크 리소스의 가격을 세밀하게 책정할 수 있습니다.

Q: 트랜잭션의 "Input Data" 필드는 무엇인가요?

A: 계약 호출의 경우, ABI 인코딩된 함수 선택자와 인수가 포함됩니다. 계약 배포의 경우, EVM 배포 바이트코드가 포함됩니다.


결론

이더리움 스택은 효율성과 결정론적 실행의 걸작입니다. RLP의 간결한 직렬화부터 ABI의 구조화된 인터페이스에 이르기까지 모든 레이어는 탈중앙화 환경에 최적화되어 있습니다. 이러한 개념을 마스터함으로써 여러분은 일반 사용자에서 가장 근본적인 수준에서 "월드 컴퓨터"를 탐색할 수 있는 파워 유저로 거듭날 수 있습니다.