본문 바로가기
리치한정보 리치한정보

계약을 사람이 확인하지 않아도 될까? 스마트 계약이 작동하는 원리

richissue 읽는 시간 약 17분

스마트 계약은 조건이 맞으면 정말 스스로 실행될까요? 이더리움에서 계약이 배포되고 트랜잭션으로 호출되는 과정부터 가스비, 오라클, 코드 검증까지 실제 구조를 쉽게 알아봅니다.

스마트 계약(Smart Contract)이라는 말을 처음 들으면 계약 조건을 블록체인에 입력해 두고, 조건이 맞으면 컴퓨터가 알아서 계약을 처리하는 모습을 떠올리기 쉽습니다.

큰 방향에서는 맞지만 실제 작동 방식은 조금 다릅니다. 스마트 계약이 현실 세계를 스스로 지켜보다가 조건이 충족되는 순간 혼자 실행되는 것은 아닙니다.

이더리움에서 스마트 계약은 특정 주소에 배포되어 있는 프로그램입니다. 사용자가 해당 계약을 호출하거나 다른 계약에서 필요한 요청이 들어오면 미리 작성된 코드가 실행되고, 블록체인의 상태를 바꾸는 작업이라면 그 결과가 네트워크에 기록됩니다.

그래서 스마트 계약의 핵심은 단순히 ‘자동으로 실행된다’는 데 있지 않습니다. 누가 요청하더라도 같은 조건에서는 미리 정해진 코드에 따라 결과가 처리된다는 점이 더 중요합니다.

이 차이를 알아두면 스마트 계약을 이용할 때 왜 가스비가 발생하는지, 외부 가격을 사용하려면 왜 오라클이 필요한지, 코드에 오류가 있을 때 왜 큰 문제가 될 수 있는지도 자연스럽게 이해할 수 있습니다.

스마트 계약은 법률 계약서를 블록체인에 올린 것일까?

이름에 ‘계약’이라는 단어가 들어가지만 모든 스마트 계약이 법률상 계약서를 의미하는 것은 아닙니다.

예를 들어 일정한 조건을 만족하면 토큰을 전송하는 프로그램, 두 종류의 토큰을 교환하는 프로그램, NFT의 소유자를 변경하는 프로그램도 스마트 계약으로 만들 수 있습니다.

중요한 것은 계약서의 문장이 아니라 어떤 입력이 들어왔을 때 무엇을 실행할지를 코드로 정해 놓는다는 점입니다.

따라서 스마트 계약은 법률 계약에 활용될 수도 있지만, 더 넓게 보면 블록체인 위에서 실행되는 프로그램이라고 이해하는 편이 정확합니다.

스마트 계약은 어디에 존재할까?

이더리움에서 스마트 계약을 사용하려면 먼저 프로그램을 네트워크에 배포해야 합니다.

개발자가 작성한 코드는 컴파일 과정을 거쳐 이더리움 가상머신인 EVM이 실행할 수 있는 형태로 변환되고, 배포 트랜잭션을 통해 블록체인에 올라갑니다.

배포가 완료되면 해당 계약에는 고유한 계약 주소(Contract Address)가 생깁니다.

우리가 웹사이트에서 버튼을 누를 때는 복잡한 주소가 보이지 않는 경우가 많지만, 실제 뒤에서는 이 계약 주소와 상호작용하는 과정이 일어납니다.

예를 들어 탈중앙화 서비스에서 토큰을 교환하거나 NFT를 발행할 때 화면에서는 버튼 하나만 누르는 것처럼 보여도, 지갑에서는 특정 계약을 호출하는 트랜잭션에 서명하는 과정이 이어질 수 있습니다.

즉 스마트 계약은 웹사이트 화면 자체가 아니라 그 뒤에서 블록체인에 배포되어 실행되는 코드입니다.

‘조건이 맞으면 자동으로 실행된다’는 말은 어디까지 맞을까?

스마트 계약을 설명할 때 이런 예를 자주 사용합니다.

상품 배송이 완료되면 판매자에게 대금이 지급되도록 미리 조건을 설정했다고 생각해 보겠습니다.

여기서 스마트 계약이 직접 택배 차량을 보고 배송이 끝났는지 확인하는 것은 아닙니다. 배송 완료라는 정보가 어떤 방식으로든 블록체인에 전달되어야 계약이 그 정보를 사용할 수 있습니다.

따라서 실제 구조는 조건이 현실에서 발생하는 것스마트 계약이 그 조건을 확인하는 것을 구분해서 봐야 합니다.

배송 상태처럼 블록체인 밖에 있는 정보가 필요하다면 외부 데이터를 온체인으로 전달하는 과정이 필요하고, 그 정보가 들어온 뒤 계약이 호출되면 코드가 정해진 규칙에 따라 결과를 처리합니다.

그래서 스마트 계약의 자동화는 세상의 모든 조건을 스스로 감지한다는 뜻이 아니라, 필요한 입력이 들어왔을 때 사람이 결과를 그때그때 판단하지 않아도 코드가 정해진 규칙대로 처리한다는 의미에 가깝습니다.

실제로 스마트 계약을 실행시키는 것은 무엇일까?

사용자가 스마트 계약의 상태를 바꾸려면 일반적으로 트랜잭션을 보내 계약의 함수를 호출합니다.

예를 들어 탈중앙화 거래소에서 토큰을 교환한다고 생각해 보겠습니다.

사용자가 교환 버튼을 누르면 지갑에서 거래 내용을 확인하고 서명을 요청합니다. 사용자가 승인한 트랜잭션이 네트워크에 전달되고 블록에 포함되면 스마트 계약의 코드가 실행되면서 조건에 맞는 상태 변경이 이루어집니다.

따라서 스마트 계약은 프로그램을 한번 올려 두면 혼자 계속 돌아가는 서버 프로그램과는 조금 다릅니다.

필요한 호출이 들어왔을 때 블록체인 네트워크에서 정해진 코드가 실행되는 구조라고 보면 이해하기 쉽습니다.

스마트 계약을 조회할 때도 가스비를 내야 할까?

스마트 계약을 이용한다고 모든 행동에 가스비가 발생하는 것은 아닙니다.

계약에 저장된 데이터를 단순히 읽는 작업은 블록체인의 상태를 바꾸지 않습니다. 예를 들어 토큰의 이름이나 특정 주소의 잔액처럼 이미 저장된 정보를 조회하는 작업은 일반적으로 사용자가 온체인 트랜잭션을 만들 필요가 없습니다.

반면 토큰을 전송하거나 교환하고, NFT를 발행하거나 계약에 새로운 값을 기록하는 것처럼 블록체인의 상태를 바꾸는 작업에는 트랜잭션이 필요합니다.

이런 작업을 실행하면 이더리움의 계산과 저장 자원을 사용하기 때문에 가스비가 발생합니다.

그래서 스마트 계약에서 가스비를 이해할 때는 단순히 ‘계약을 사용하면 돈이 든다’고 외우기보다 지금 하는 작업이 데이터를 읽는 것인지, 블록체인의 상태를 변경하는 것인지를 먼저 구분하는 것이 좋습니다.

가스비는 왜 필요한 걸까?

스마트 계약 안에는 여러 계산과 데이터 저장 작업이 들어갈 수 있습니다.

만약 누구나 아무 비용 없이 복잡한 프로그램을 끝없이 실행할 수 있다면 네트워크 자원을 과도하게 사용할 수 있습니다.

이더리움에서는 프로그램이 실행할 연산량과 저장 작업 등에 따라 Gas라는 단위를 사용하고, 상태를 변경하는 트랜잭션을 실행할 때 그에 따른 비용을 지불합니다.

단순한 ETH 전송과 여러 기능을 한꺼번에 실행하는 복잡한 스마트 계약의 가스 사용량이 달라질 수 있는 이유도 여기에 있습니다.

따라서 가스비는 단순한 ‘송금 수수료’만이 아니라 이더리움 네트워크의 계산과 저장 자원을 사용한 비용이라는 성격을 함께 가지고 있습니다.

실제 스마트 계약은 블록 탐색기에서 볼 수 있다

스마트 계약은 설명 속에서만 존재하는 개념이 아닙니다.

이더리움 블록 탐색기인 Etherscan에서는 실제로 배포된 스마트 계약 주소와 공개된 소스 코드를 확인할 수 있습니다.

우리가 직접 확인한 WETH 스마트 계약도 그중 하나입니다.

Etherscan의 계약 화면을 보면 WETH9.sol이라는 소스 코드가 공개되어 있고, 왼쪽에는 deposit, withdraw, approve, transfer 같은 함수 이름이 실제로 표시됩니다.

여기서 코드를 읽을 필요는 없습니다.

중요한 것은 스마트 계약이 단순한 설명이나 서비스 약관이 아니라 실제 블록체인에 배포된 코드이며, 어떤 기능이 들어 있는지 블록 탐색기를 통해 직접 확인할 수도 있다는 점입니다.

Etherscan에서 확인한 WETH 스마트 계약 소스 코드와 주요 함수 화면

Etherscan에서 확인한 WETH 스마트 계약의 실제 소스 코드 화면입니다. deposit, withdraw, approve, transfer 같은 함수가 코드에 정의되어 있는 것을 확인할 수 있습니다.

코드가 공개되어 있으면 안전한 스마트 계약일까?

Etherscan에서 스마트 계약을 보다 보면 소스 코드가 검증됐다는 표시를 볼 수 있습니다.

이 표시를 보고 ‘Etherscan이 안전성을 검사한 계약’이라고 생각하면 안 됩니다.

소스 코드 검증은 사람이 읽을 수 있도록 공개된 소스 코드를 다시 컴파일했을 때, 실제 계약 주소에서 실행되는 바이트코드와 일치하는지를 확인하는 과정입니다.

즉 공개된 코드와 실제 실행 코드가 같은지 확인하기 쉬워졌다는 의미이지 코드에 보안 취약점이 없거나 투자하기 안전하다는 인증은 아닙니다.

따라서 스마트 계약을 확인할 때는 Verified라는 표시를 안전 인증처럼 보는 것이 아니라 실제로 실행되는 코드가 무엇인지 공개적으로 검토할 수 있는 상태라고 이해하는 편이 좋습니다.

스마트 계약은 한번 배포하면 절대 바꿀 수 없을까?

스마트 계약은 한번 배포하면 절대 수정할 수 없다고 설명하는 경우도 많습니다.

기본적으로 이미 배포된 계약 코드를 일반 웹사이트 프로그램처럼 열어서 내용을 고치고 다시 저장하는 것은 어렵습니다.

하지만 실제 서비스에서는 처음부터 업그레이드 가능한 구조로 설계하는 경우도 있습니다.

대표적인 방식 가운데 하나는 사용자가 접근하는 계약과 실제 기능을 수행하는 로직을 분리해 두고, 필요할 때 새로운 로직을 연결하는 프록시 구조입니다.

따라서

“스마트 계약은 절대 변경되지 않는다”

고 단정하기보다

“배포된 코드 자체는 기본적으로 변경하기 어렵지만, 설계에 따라 기능을 업그레이드할 수 있는 구조도 있다”

고 이해하는 것이 정확합니다.

이 차이는 DeFi처럼 실제 자산이 스마트 계약에 연결되는 서비스를 확인할 때 특히 중요합니다.

스마트 계약은 외부 가격이나 날씨를 어떻게 알까?

스마트 계약은 블록체인에 기록된 데이터는 사용할 수 있지만 인터넷을 직접 검색해서 오늘의 달러 환율이나 날씨를 확인하는 방식으로 동작하지 않습니다.

블록체인 밖의 정보가 필요하다면 그 데이터를 스마트 계약이 사용할 수 있도록 전달하는 별도의 시스템이 필요합니다.

이 역할을 하는 것이 오라클(Oracle)입니다.

예를 들어 암호화폐 가격에 따라 담보 상태를 판단하는 대출 서비스라면 외부 가격 정보를 스마트 계약이 사용할 수 있는 형태로 제공해야 합니다.

여기에는 또 다른 위험이 생깁니다.

계약의 코드가 정확하더라도 잘못된 외부 데이터가 들어오면 그 잘못된 값을 기준으로 코드를 정확하게 실행할 수 있기 때문입니다.

따라서 스마트 계약을 볼 때는 코드뿐 아니라 필요한 데이터가 어디에서 들어오는지도 함께 살펴봐야 합니다.

코드대로 실행된다는 것이 항상 장점일까?

스마트 계약의 장점은 미리 정해진 규칙대로 결과를 처리할 수 있다는 점입니다.

하지만 코드에 오류가 있다면 같은 특성이 위험으로 바뀔 수 있습니다.

프로그램에는 사람이 의도하지 않은 논리 오류나 보안 취약점이 들어갈 수 있고, 실제 조건이 발생하면 계약은 작성된 코드에 따라 실행될 수 있습니다.

그래서 중요한 스마트 계약은 배포 전에 테스트와 코드 검토, 보안 감사를 거치기도 합니다.

하지만 감사받았다는 사실 역시 절대적인 안전 보증은 아닙니다.

결국 스마트 계약을 이해할 때 기억해야 할 문장은 간단합니다.

코드대로 실행된다는 것과 그 코드가 올바르게 작성됐다는 것은 서로 다른 문제입니다.

스마트 계약은 어디에 사용되고 있을까?

스마트 계약은 이더리움 생태계의 여러 서비스에서 사용됩니다.

토큰을 발행하거나 전송하는 규칙을 만들 수 있고, 탈중앙화 거래소에서는 토큰을 교환하는 과정에 사용되며, DeFi에서는 자산 예치와 대출 등의 조건을 처리하는 데 활용됩니다.

NFT의 소유권을 관리하거나 DAO에서 온체인 의사결정을 실행하는 데도 스마트 계약이 사용될 수 있습니다.

하지만 스마트 계약이라는 기술 하나만으로 서비스 전체가 자동으로 안전해지는 것은 아닙니다.

스마트 계약 위에 어떤 규칙이 작성되어 있는지, 누가 관리 권한을 가지고 있는지, 업그레이드 구조가 존재하는지, 외부 데이터에 의존하는지에 따라 실제 위험은 달라질 수 있습니다.

그래서 스마트 계약을 이해할 때 활용 분야를 많이 외우기보다 그 프로그램이 어떤 조건에서 무엇을 실행하도록 만들어졌는지를 보는 습관이 더 중요합니다.

처음 보는 스마트 계약은 무엇부터 확인하면 좋을까?

처음부터 Solidity 코드를 읽을 필요는 없습니다.

먼저 프로젝트 공식 자료에서 정확한 계약 주소를 확인하는 것이 좋습니다. 같은 이름을 사용하는 가짜 토큰이나 계약이 존재할 수도 있기 때문에 검색 결과만 보고 주소를 선택하는 것은 피하는 편이 안전합니다.

그다음 블록 탐색기에 계약 주소를 입력하면 실제로 계약이 존재하는지, 소스 코드가 공개되어 있는지, 어떤 함수들이 보이는지 등을 확인할 수 있습니다.

소스 코드가 검증됐다는 표시가 있다면 공개 코드와 실행 코드의 일치 여부를 확인하기 쉬워진 것이고, 그것만으로 안전성을 판단하지는 않습니다.

복잡한 계약이라면 관리자 권한이나 업그레이드 가능 여부, 외부 오라클 의존성 등도 함께 확인할 필요가 있습니다.

이 정도만 알아도 스마트 계약을 단순히 ‘자동으로 실행되는 프로그램’이라고 외우는 것보다 훨씬 실제적인 시각으로 볼 수 있습니다.

FAQ

스마트 계약은 조건이 맞으면 혼자 실행되나요?

보통 그렇게 이해하면 정확하지 않습니다. 사용자의 트랜잭션이나 다른 계약의 호출처럼 실행을 시작하는 입력이 필요하며, 외부 데이터가 필요한 경우에는 오라클 등을 통해 정보가 전달되어야 합니다.

스마트 계약을 이용하면 항상 가스비를 내야 하나요?

계약의 데이터를 단순히 읽는 일반적인 조회는 블록체인의 상태를 바꾸지 않기 때문에 사용자가 가스비를 지불하지 않을 수 있습니다. 반면 토큰 전송이나 교환처럼 상태를 변경하는 작업에는 트랜잭션이 필요하고 가스비가 발생합니다.

스마트 계약은 한번 배포하면 수정할 수 없나요?

배포된 코드 자체를 일반 프로그램처럼 직접 고치는 것은 어렵지만, 처음부터 프록시 같은 업그레이드 구조로 설계된 계약도 있습니다.

Etherscan에서 코드가 검증됐다고 나오면 안전한가요?

아닙니다. 소스 코드 검증은 공개된 코드와 실제 계약에서 실행되는 바이트코드의 일치 여부를 확인하는 과정이며, 보안 취약점이 없다는 인증은 아닙니다.

스마트 계약이 코인 가격이나 날씨를 직접 확인할 수 있나요?

블록체인 밖의 정보를 직접 인터넷에서 가져오는 방식으로 작동하지 않습니다. 외부 정보가 필요한 경우 오라클 같은 시스템을 통해 데이터를 전달받을 수 있습니다.

📌 핵심 정리

스마트 계약은 법률 계약서를 단순히 디지털화한 것이 아니라 블록체인의 특정 주소에 배포되어 실행되는 프로그램입니다.

사용자가 계약을 호출하거나 필요한 입력이 전달되면 미리 작성된 코드가 실행되고, 블록체인의 상태를 변경하는 작업이라면 그 결과가 온체인에 기록됩니다.

그래서 ‘자동 실행’이라는 말을 스마트 계약이 현실 세계의 조건을 스스로 감시하다가 혼자 움직인다는 뜻으로 이해하면 안 됩니다. 필요한 입력이 들어왔을 때 사람이 결과를 다시 판단하지 않아도 미리 작성된 규칙이 동일하게 적용된다는 의미에 더 가깝습니다.

상태를 변경하는 작업에는 가스비가 필요하고, 외부 데이터를 사용할 때는 오라클과 같은 별도의 구조가 필요할 수 있습니다. 또한 소스 코드가 공개되어 있거나 검증됐다는 사실만으로 계약의 안전성이 보장되는 것도 아닙니다.

이번에 실제 WETH 계약을 Etherscan에서 확인해 본 것처럼, 스마트 계약은 추상적인 개념이 아니라 실제로 주소와 코드를 가진 온체인 프로그램입니다.

이 구조를 이해하고 나면 DeFi, NFT, 토큰 교환처럼 스마트 계약을 활용하는 다른 블록체인 서비스도 훨씬 쉽게 이해할 수 있습니다.

📚 함께 읽으면 좋은 글

📚 참고자료

📢 안내

이 글은 스마트 계약이 블록체인에서 작동하는 구조를 이해하기 위한 일반적인 정보입니다. 실제 스마트 계약은 프로젝트마다 코드와 권한 구조, 업그레이드 방식과 외부 데이터 의존성이 다를 수 있으며, 소스 코드가 공개되거나 검증됐다는 사실만으로 안전성이 보장되지는 않습니다. 실제 서비스를 이용하기 전에는 프로젝트 공식 자료와 정확한 계약 주소를 함께 확인하는 것이 좋습니다.

richissue

richissue
함께 보면 좋은 글

댓글 0

첫 댓글을 남겨보세요.

광고 차단 알림

광고 클릭 제한을 초과하여 광고가 차단되었습니다.

단시간에 반복적인 광고 클릭은 시스템에 의해 감지되며, IP가 수집되어 사이트 관리자가 확인 가능합니다.