| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 | 31 |
- Road to Web3
- 네트워크
- MySQL
- 자료구조
- 운영체제
- design pattern
- 디자인 패턴
- Spring
- MSA
- Java
- JavaScript
- Ethereum
- Galera Cluster
- Heap
- Algorithm
- 백준
- OS
- redis
- mongoDB
- IT
- Blockchain
- 파이썬
- C
- JPA
- 자바
- 컴퓨터구조
- Data Structure
- 알고리즘
- react
- spring webflux
- Today
- Total
시냅스
Road to Web3 (8) 가스비의 실체: 가스 사용량 곱하기 가스 가격 본문
이 글은 Ethereum 및 EVM 계열을 기준으로 설명합니다.

이번 편의 목표는 두 가지입니다.
- 가스비가 무엇을 계산하는 비용인지
- 왜 실패하는 트랜잭션도 비용이 드는지
제가 처음 가스비를 접할 때 했던 오해는 이렇습니다.
- 가스비는 수수료라는 이름의 별도 요금이다
- 실패하면 아무 일도 안 했으니 비용도 안 든다
- 가스비는 누가 마음대로 정한다
하지만 EVM에서 가스비는 훨씬 단순합니다.
- 가스는 연산과 저장 같은 실행 자원의 단위
- 가스비는 그 자원을 네트워크에서 빌려 쓰는 비용
- 실패해도 연산을 했다면 그 연산 비용은 이미 발생
한 줄로 잡으면 이렇습니다.
가스비 = 가스 사용량 곱하기 가스 가격
요약
| 항목 | 의미 | 실무 감각 |
|---|---|---|
| gasLimit | 최대 허용 연산량 상한 | 카드 결제의 한도처럼 상한선 |
| gasUsed | 실제로 쓴 연산량 | 실제 청구량 |
| gasPrice | 단위 가스 가격 | 네트워크 혼잡에 따라 변함 |
| EIP-1559 | baseFee + tip 모델 | 사용자가 지불 상한을 제시 |
| 실패 비용 | 연산은 했으니 지불 | out of gas 는 최악 패턴 |
1) 가스는 무엇인가
가스는 EVM이 실행하는 작업의 비용을 계량화한 단위입니다.
- 연산 opcode 실행
- 스토리지 쓰기 SSTORE
- 로그 이벤트 emit
- 메모리 확장
- 컨트랙트 생성
이 모든 것은 노드가 CPU와 메모리와 디스크 I/O를 쓰는 행위입니다.
그래서 네트워크는 실행 자원 소비를 가스로 환산하고, 그만큼 비용을 청구합니다.

2) 가스비는 어떻게 계산되나
기본식은 변하지 않습니다.
- 비용 = gasUsed 곱하기 unitPrice
다만 EIP-1559 이후에는 unitPrice 가 하나의 값이 아니라 두 조각으로 나뉩니다.
- baseFeePerGas: 네트워크가 요구하는 최소 단가
- priorityFeePerGas: 내가 더 빨리 포함되길 원할 때 주는 팁
- maxFeePerGas: 내가 지불할 수 있는 단가 상한
EIP-1559 감각으로 정리
블록에 실제로 적용되는 단가는 보통 이렇게 생각하면 됩니다.
- effectiveGasPrice = min(maxFeePerGas, baseFeePerGas + priorityFeePerGas)
그리고 실제 비용은
- txFee = gasUsed 곱하기 effectiveGasPrice
여기서 baseFee 부분은 소각되고, priorityFee 부분은 블록 제안자 측으로 흘러갑니다.
실무적으로 중요한 건 소각 여부보다, 사용자가 상한을 제시한다는 점입니다.

3) 왜 실패가 돈이 드나
실패는 두 가지로 나뉩니다.
A. revert 기반 실패
컨트랙트 코드가 조건을 확인하고 되돌리는 경우입니다.
- require 조건 실패
- revert 호출
- assert 실패
이 경우 상태 변경은 롤백됩니다.
하지만 롤백은 공짜가 아닙니다. 조건을 확인하기 위해 이미 연산을 했고, 그 연산은 네트워크 자원을 소비했습니다.
그래서 소비된 가스만큼은 지불합니다.
다만 일부는 환급이 있고, 어떤 저장 작업이 실제로 반영되지 않으면 그 비용이 줄어드는 효과도 있습니다.
하지만 서비스 운영 감각에서는 이걸 세밀하게 기대하면 안 되고, 실패도 비용이라는 전제를 두는 편이 안전합니다.
B. out of gas 기반 실패
gasLimit 을 너무 낮게 줘서 실행 중에 가스가 바닥나는 경우입니다.
- 상태 변경은 롤백
- 남은 가스가 없으므로 복구 로직도 못 돈다
- 이미 쓴 가스는 지불
이 패턴이 최악인 이유는 실패했는데도 거의 전액에 가까운 비용이 나갈 수 있기 때문입니다.

4) 누가 수수료를 정하나
이 질문을 web2로 번역하면 이런 느낌입니다.
- 결제 수수료를 누가 정하나
- 네트워크 혼잡에 따라 빠른 처리를 위해 추가 요금을 낼 수 있나
EVM에서는
- baseFee 는 프로토콜 규칙으로 블록 단위로 조정됩니다
- priorityFee 와 maxFee 는 사용자가 제시합니다
- 블록 제안자와 빌더는 수익이 더 좋은 트랜잭션을 우선 포함할 유인이 있습니다
즉, 수수료는 한 주체가 고정 가격표를 내는 것이 아니라
- 프로토콜의 최저 단가
- 사용자 제시 가격
- 블록 공간 경매에 가까운 선택
이 합성 결과입니다.
5) gasLimit 은 한도이자 보호 장치다
gasLimit 은 사용자가 지불할 의사가 있는 최대 연산량 상한입니다.
- 너무 높게 잡으면 악성 컨트랙트에 의해 비싼 실행을 허용할 위험이 늘고
- 너무 낮게 잡으면 out of gas 로 실패할 위험이 늘고
실무에서는 보통
- estimateGas 로 예측하고
- 여유 버퍼를 조금 붙이고
- 실패하면 재시도하거나 사용자에게 재승인을 받는
패턴으로 갑니다.
6) web2 결제 비유
가스비를 결제 시스템으로 비유하면
- gasUsed: 실제로 수행된 작업량
- gasPrice: 혼잡 시간대의 처리 단가
- priorityFee: 빠른 처리 요청 수수료
- gasLimit: 이 이상은 결제하지 않겠다는 상한
그리고 실패 비용은 이런 상황과 닮았습니다.
- 카드 승인 과정에서 승인 실패가 나도, 가맹점 또는 PG 측 비용이 0이 아닌 경우
- 외부 API 호출이 실패해도 인프라 비용과 시도 비용이 드는 경우
블록체인은 이 비용을 프로토콜 차원에서 사용자가 지불하도록 노출합니다.
그래서 왜 실패가 돈이 되나라는 질문은, 왜 실패한 실행에도 인프라 비용이 드나로 번역됩니다.
7) 체크리스트
1) 포함 정책과 확정 정책을 먼저 정의한다 included confirmed finalized
2) 실패 비용을 정상 비용으로 취급하고 제품 UX 를 설계한다
3) out of gas 실패를 최우선으로 줄인다 estimateGas 와 버퍼
4) maxFeePerGas 와 priorityFeePerGas 를 분리해서 설정한다
5) 혼잡 시에는 수수료 자동 조정 또는 재시도 정책을 둔다
6) 토큰 전송이라도 네이티브 코인으로 수수료를 낸다는 점을 사용자에게 노출한다
7) 시뮬레이션 eth_call 로 실패 이유를 사전 탐지할 수 있는 곳은 탐지한다
8) 컨트랙트 호출은 상태에 따라 가스가 달라진다는 점을 전제로 한다
9) 이벤트와 영수증으로 실제 gasUsed 와 effectiveGasPrice 를 기록한다
10) 결제 시스템처럼 상태 머신으로 처리하고 idempotency key 로 중복 처리를 막는다
결론
- 가스비는 실행 자원의 비용이고, 가스 사용량 곱하기 가스 가격으로 계산된다
- 실패해도 연산을 했다면 비용이 든다
- out of gas 는 실패 비용이 커질 수 있어 운영상 위험하다
- 수수료는 프로토콜 규칙과 사용자 제시 가격이 합성되는 시장형 구조다
'Road To Web3 > Blockchain' 카테고리의 다른 글
| Road to Web3 (10) 스마트컨트랙트는 DB 트랜잭션 함수다 (0) | 2025.12.29 |
|---|---|
| Road to Web3 (9) 토큰 vs 네이티브 코인: USDC는 있는데 왜 전송이 안 되죠 (0) | 2025.12.29 |
| Road to Web3 (7) 서명 2종류: 메시지 서명 vs 트랜잭션 서명 (0) | 2025.12.28 |
| Road to Web3 (6) 지갑은 키 관리 + 서명기: 주소/개인키/공개키 (0) | 2025.12.28 |
| Road to Web3 (5) 온체인 vs 오프체인: 임의 처리가 아니라 합의 경계 (0) | 2025.12.28 |
