[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"article-deep-evm-7-yul-gaseu-hyoyuljeog-lupeu-jogeongmun":3},{"article":4,"author":58},{"id":5,"category_id":6,"title":7,"slug":8,"excerpt":9,"content_md":10,"content_html":11,"locale":12,"author_id":13,"published":14,"published_at":15,"meta_title":7,"meta_description":16,"focus_keyword":17,"og_image":18,"canonical_url":18,"robots_meta":19,"created_at":15,"updated_at":15,"tags":20,"category_name":38,"related_articles":39},"d5000000-0000-0000-0000-000000000107","a0000000-0000-0000-0000-000000000052","Deep EVM #7: Yul의 가스 효율적 루프와 조건문","deep-evm-7-yul-gaseu-hyoyuljeog-lupeu-jogeongmun","Yul에서 EVM 루프와 조건문 최적화: for 루프 가스 분석, switch vs if, unchecked 산술, 루프 언롤링, Solidity와 Yul 반복 패턴 벤치마크.","## 루프는 가스가 죽는 곳이다\n\n대부분의 스마트 컨트랙트에서 가장 큰 가스 소비자는 반복입니다. 100개 요소 배열을 순회하는 함수는 본문을 100번 실행합니다 — 본문 안의 모든 옵코드가 100배로 곱해집니다.\n\n## Yul For 루프의 해부학\n\n```yul\nfor { let i := 0 } lt(i, 10) { i := add(i, 1) } {\n    \u002F\u002F 본문\n}\n```\n\n반복당 루프 오버헤드:\n- 조건 검사: 23 가스\n- 후행 반복: 6 가스\n- 점프 복귀: 11 가스\n- **반복당 총 오버헤드: 40 가스**\n\n## 벤치마크 결과 (100개 요소)\n\n| 방법 | 반복당 가스 | 총합 (100요소) | Solidity 대비 절감 |\n|------|-----------|---------------|-------------------|\n| Solidity (checked) | ~73 | 7,300 | 기준 |\n| Solidity (unchecked) | ~53 | 5,300 | 27% |\n| Yul | ~43 | 4,300 | 41% |\n\n## 루프 언롤링\n\n루프 언롤링은 반복당 여러 요소를 처리하여 요소당 오버헤드를 줄입니다:\n\n```yul\nfunction sumUnrolled(offset, length) -> total {\n    let end := add(offset, mul(length, 0x20))\n    let endAligned := sub(end, mod(mul(length, 0x20), 0x80))\n    for { } lt(offset, endAligned) { offset := add(offset, 0x80) } {\n        total := add(total, calldataload(offset))\n        total := add(total, calldataload(add(offset, 0x20)))\n        total := add(total, calldataload(add(offset, 0x40)))\n        total := add(total, calldataload(add(offset, 0x60)))\n    }\n    for { } lt(offset, end) { offset := add(offset, 0x20) } {\n        total := add(total, calldataload(offset))\n    }\n}\n```\n\n## Yul에서 안전한 unchecked 산술\n\nYul의 모든 산술은 기본적으로 unchecked입니다. 오버플로우 검사가 필요할 때:\n\n```yul\nfunction safeAdd(a, b) -> c {\n    c := add(a, b)\n    if lt(c, a) { revert(0, 0) }\n}\n```\n\n## 결론\n\nYul의 루프 최적화는 영리한 트릭이 아닙니다 — 루프 본문의 모든 옵코드의 정확한 가스 비용을 이해하고 체계적으로 낭비를 제거하는 것입니다. 스토리지 읽기 캐시, 타이트 루프 언롤, 조기 종료, 반복 대신 비트 연산 선호.","\u003Ch2 id=\"\">루프는 가스가 죽는 곳이다\u003C\u002Fh2>\n\u003Cp>대부분의 스마트 컨트랙트에서 가장 큰 가스 소비자는 반복입니다. 100개 요소 배열을 순회하는 함수는 본문을 100번 실행합니다 — 본문 안의 모든 옵코드가 100배로 곱해집니다.\u003C\u002Fp>\n\u003Ch2 id=\"yul-for\">Yul For 루프의 해부학\u003C\u002Fh2>\n\u003Cpre>\u003Ccode class=\"language-yul\">for { let i := 0 } lt(i, 10) { i := add(i, 1) } {\n    \u002F\u002F 본문\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>반복당 루프 오버헤드:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>조건 검사: 23 가스\u003C\u002Fli>\n\u003Cli>후행 반복: 6 가스\u003C\u002Fli>\n\u003Cli>점프 복귀: 11 가스\u003C\u002Fli>\n\u003Cli>\u003Cstrong>반복당 총 오버헤드: 40 가스\u003C\u002Fstrong>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch2 id=\"100\">벤치마크 결과 (100개 요소)\u003C\u002Fh2>\n\u003Ctable>\u003Cthead>\u003Ctr>\u003Cth>방법\u003C\u002Fth>\u003Cth>반복당 가스\u003C\u002Fth>\u003Cth>총합 (100요소)\u003C\u002Fth>\u003Cth>Solidity 대비 절감\u003C\u002Fth>\u003C\u002Ftr>\u003C\u002Fthead>\u003Ctbody>\n\u003Ctr>\u003Ctd>Solidity (checked)\u003C\u002Ftd>\u003Ctd>~73\u003C\u002Ftd>\u003Ctd>7,300\u003C\u002Ftd>\u003Ctd>기준\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>Solidity (unchecked)\u003C\u002Ftd>\u003Ctd>~53\u003C\u002Ftd>\u003Ctd>5,300\u003C\u002Ftd>\u003Ctd>27%\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>Yul\u003C\u002Ftd>\u003Ctd>~43\u003C\u002Ftd>\u003Ctd>4,300\u003C\u002Ftd>\u003Ctd>41%\u003C\u002Ftd>\u003C\u002Ftr>\n\u003C\u002Ftbody>\u003C\u002Ftable>\n\u003Ch2 id=\"\">루프 언롤링\u003C\u002Fh2>\n\u003Cp>루프 언롤링은 반복당 여러 요소를 처리하여 요소당 오버헤드를 줄입니다:\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-yul\">function sumUnrolled(offset, length) -&gt; total {\n    let end := add(offset, mul(length, 0x20))\n    let endAligned := sub(end, mod(mul(length, 0x20), 0x80))\n    for { } lt(offset, endAligned) { offset := add(offset, 0x80) } {\n        total := add(total, calldataload(offset))\n        total := add(total, calldataload(add(offset, 0x20)))\n        total := add(total, calldataload(add(offset, 0x40)))\n        total := add(total, calldataload(add(offset, 0x60)))\n    }\n    for { } lt(offset, end) { offset := add(offset, 0x20) } {\n        total := add(total, calldataload(offset))\n    }\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch2 id=\"yul-unchecked\">Yul에서 안전한 unchecked 산술\u003C\u002Fh2>\n\u003Cp>Yul의 모든 산술은 기본적으로 unchecked입니다. 오버플로우 검사가 필요할 때:\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-yul\">function safeAdd(a, b) -&gt; c {\n    c := add(a, b)\n    if lt(c, a) { revert(0, 0) }\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch2 id=\"\">결론\u003C\u002Fh2>\n\u003Cp>Yul의 루프 최적화는 영리한 트릭이 아닙니다 — 루프 본문의 모든 옵코드의 정확한 가스 비용을 이해하고 체계적으로 낭비를 제거하는 것입니다. 스토리지 읽기 캐시, 타이트 루프 언롤, 조기 종료, 반복 대신 비트 연산 선호.\u003C\u002Fp>\n","ko","b0000000-0000-0000-0000-000000000001",true,"2026-03-28T10:44:27.837501Z","Yul에서 EVM 루프 최적화: for 루프 가스 분석, switch vs if, unchecked 산술, 루프 언롤링, Solidity와 Yul 반복 벤치마크.","Yul 가스 효율 루프",null,"index, follow",[21,26,30,34],{"id":22,"name":23,"slug":24,"created_at":25},"c0000000-0000-0000-0000-000000000016","EVM","evm","2026-03-28T10:44:21.513630Z",{"id":27,"name":28,"slug":29,"created_at":25},"c0000000-0000-0000-0000-000000000020","Gas Optimization","gas-optimization",{"id":31,"name":32,"slug":33,"created_at":25},"c0000000-0000-0000-0000-000000000014","Solidity","solidity",{"id":35,"name":36,"slug":37,"created_at":25},"c0000000-0000-0000-0000-000000000018","Yul","yul","블록체인",[40,46,52],{"id":41,"title":42,"slug":43,"excerpt":44,"locale":12,"category_name":38,"published_at":45},"d0000000-0000-0000-0000-000000000605","Ethereum 상호운용성 레이어: 55개 이상의 L2가 하나의 체인이 되는 방법","ethereum-sangho-unyongseong-layer-55-l2-hana-chain","Ethereum에는 55개 이상의 Layer 2 롤업이 있어 유동성과 사용자 경험이 파편화되어 있습니다. Ethereum 상호운용성 레이어 — 크로스 롤업 메시징, 공유 시퀀서, 베이스드 롤업을 결합하여 — 하나의 조합 가능한 네트워크로 통합하는 것을 목표로 합니다.","2026-03-28T10:44:44.895917Z",{"id":47,"title":48,"slug":49,"excerpt":50,"locale":12,"category_name":38,"published_at":51},"d0000000-0000-0000-0000-000000000604","롤업을 넘어선 ZK 증명: Ethereum에서의 검증 가능한 AI 추론","rolleob-eul-neomeo-zk-jeungmyeong-ethereum-geomjeung-ai-churon","영지식 증명은 더 이상 단순한 스케일링 도구가 아닙니다. 2026년, zkML은 온체인에서 검증 가능한 AI 추론을 가능하게 하고, ZK 코프로세서는 무거운 연산을 오프체인으로 이동시키며 온체인에서 검증하고, SP1과 Jolt 같은 새로운 증명 시스템이 이를 실용적으로 만들고 있습니다.","2026-03-28T10:44:44.890168Z",{"id":53,"title":54,"slug":55,"excerpt":56,"locale":12,"category_name":38,"published_at":57},"d0000000-0000-0000-0000-000000000581","EIP-7702 실전 가이드: Pectra 이후 스마트 계정 플로우 구축","eip-7702-siljeon-gaideu-pectra-ihu-seumateu-gyejeong-peulro-guchuk","EIP-7702는 모든 Ethereum EOA가 단일 트랜잭션 내에서 스마트 컨트랙트로 임시 동작할 수 있게 합니다. 새로운 계정 추상화 프리미티브를 사용한 배치 트랜잭션, 가스 후원, 소셜 리커버리 구현 방법을 소개합니다.","2026-03-28T10:44:43.377765Z",{"id":13,"name":59,"slug":60,"bio":61,"photo_url":18,"linkedin":18,"role":62,"created_at":63,"updated_at":63},"Open Soft Team","open-soft-team","The engineering team at Open Soft, building premium software solutions from Bali, Indonesia.","Engineering Team","2026-03-28T08:31:22.226811Z"]