본문으로 건너뛰기
블록체인Mar 28, 2026

Deep EVM #5: Yul 소개 — Solidity의 비밀 어셈블리 언어

OS
Open Soft Team

Engineering Team

Yul이란 무엇이고 왜 존재하는가

Yul은 Solidity 팀이 설계한 중간 언어로 EVM 바이트코드로 컴파일됩니다. Solidity와 원시 옵코드 사이에 위치합니다: 변수, 함수, if/switch/for 구문을 가진 읽기 쉬운 구조화된 구문으로 모든 EVM 옵코드에 직접 접근할 수 있습니다.

Yul이 존재하는 이유는 Solidity 컴파일러가 보수적인 바이트코드를 생성하기 때문입니다. 오버플로우 검사, ABI 인코딩, 메모리 관리 — 애플리케이션 컨트랙트에는 유용하지만 MEV 봇, DEX 라우터, 온체인 수학 라이브러리와 같은 가스 중요 코드에는 용납할 수 없는 오버헤드입니다.

Yul 구문 기본

변수

let x := 42
let y := add(x, 1)    // y = 43

함수

function safeAdd(a, b) -> result {
    result := add(a, b)
    if lt(result, a) { revert(0, 0) }
}

제어 흐름

switch selector
case 0xa9059cbb { /* transfer 처리 */ }
case 0x70a08231 { /* balanceOf 처리 */ }
default { revert(0, 0) }

Yul 사용 시기 (그리고 사용하지 않을 시기)

Yul을 사용할 때:

  1. 가스가 중요할 때 — MEV 봇, DEX 라우터
  2. 비트 연산이 필요할 때 — 데이터 패킹/언패킹
  3. 메모리 레이아웃이 중요할 때 — 외부 호출용 콜데이터 구축
  4. 일시적 스토리지가 필요할 때 — Solidity가 네이티브 지원 추가하기 전

Yul을 사용하지 않을 때:

  1. 가독성이 가스보다 중요할 때
  2. EVM 지식에 자신이 없을 때
  3. 가스 절감이 미미할 때

Yul vs Huff

기능YulHuff
스택 관리자동 (컴파일러)수동
변수 이름아니오
코드 크기 제어제한적완전
가스 오버헤드작음제로
학습 곡선보통가파름

결론

Yul은 Solidity의 안전과 EVM의 원시 힘 사이의 다리입니다. 읽기 쉬운 구문으로 옵코드 수준 제어를 제공합니다. MEV 개발자에게 Yul 숙달은 수익성 있는 봇과 가스 효율에서 경쟁자에게 지는 봇의 차이입니다.