Tech Lab2 min read

솔리디티 코스 #1: Solidity 동작 방식 한눈에 이해하기

이 글은 Solidity 코드의 실행 순서와 트랜잭션 동작 원리를 중심으로 이벤트 로그, 오류 처리, 주석, 표현식 개념을 단계적으로 설명합니다.

#Solidity#기초#스마트컨트랙트#입문#이더리움#개발#Solidity#실행흐름#Solidity#에러처리

독자는 이 글을 통해 Solidity 코드가 실행되는 기본 흐름과 트랜잭션 기반 동작 원리를 이해하고, 이후 스마트 컨트랙트 설계 시 발생하는 오류를 예방할 수 있습니다.

솔리디티 플로우

Solidity 코드 실행 흐름

Solidity 코드 역시 위에서 아래로 순차 실행되는 구조를 가집니다. 다만, 블록체인 환경에서는 모든 실행이 트랜잭션을 기준으로 동작한다는 점이 중요합니다.

코드 실행 순서

  1. 상태 변수 선언 및 초기화
  2. 함수 호출
  3. 트랜잭션 처리 및 상태 변경
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

contract SimpleContract {
    string public message = "Hello, Solidity!";

    function setMessage(string memory _newMessage) public {
        message = _newMessage;
    }
}

실행 흐름 설명

  • 컨트랙트 배포 시 message 변수가 먼저 선언되고 초기값이 저장됩니다.
  • setMessage 함수가 호출되면 새로운 트랜잭션이 발생하며 message 값이 변경됩니다.

주의: 선언되지 않은 변수를 먼저 사용하면 컴파일 단계에서 오류가 발생합니다.

Solidity 콘솔 출력: 이벤트 로그

JavaScript의 console.log()와 달리 Solidity는 이벤트(event) 를 사용해 블록체인 로그를 남깁니다.
이 로그는 트랜잭션 영수증(Transaction Receipt)에 기록됩니다.

이벤트 사용 예제

contract Logger {
    event Log(string message);

    function logMessage(string memory _message) public {
        emit Log(_message);
    }
}
  • emit 키워드를 통해 이벤트를 발생시킵니다.
  • 프런트엔드나 테스트 도구에서 이벤트를 구독하여 상태 변화를 추적할 수 있습니다.

: 이벤트는 상태를 변경하지 않기 때문에 가스 비용이 비교적 저렴합니다.

Solidity 코드의 오류 처리

Solidity 실행 중 오류가 발생하면 전체 트랜잭션이 롤백되며, 이전 상태로 되돌아갑니다.

오류 발생 예제

contract ErrorHandling {
    function fail() public pure {
        require(false, "This function always fails");
    }
}

위 함수는 항상 실패하며, 호출 시 트랜잭션은 즉시 중단됩니다.

Solidity의 오류 처리 방식

함수설명
require(condition, message)조건 불만족 시 오류 발생, 입력 검증에 사용
assert(condition)내부 로직 검증용, 실패 시 치명적 오류
revert(message)조건 없이 강제 롤백

주의: assert 실패는 가스를 모두 소모할 수 있으므로 신중히 사용해야 합니다.

Solidity에서 주석 사용

주석(Comment)은 코드의 의도를 설명하고 가독성을 높이는 데 필수적입니다.

주석 작성 방법

// 한 줄 주석
/* 여러 줄 주석 */

예제 코드

contract CommentsExample {
    // 이 함수는 문자열을 반환합니다.
    function getMessage() public pure returns (string memory) {
        return "Hello, Solidity!"; // 문자열 반환
    }
}

: 공개 라이브러리나 협업 프로젝트에서는 주석 품질이 코드 품질만큼 중요합니다.

Solidity의 값과 표현식

Solidity는 다양한 값(value)표현식(expression) 을 지원하며, 연산은 즉시 평가됩니다.

값과 표현식 예제

contract Expressions {
    uint256 public number = 10 * 2; // 결과: 20

    function add(uint256 a, uint256 b) public pure returns (uint256) {
        return a + b;
    }
}

연산자 예제

contract Operators {
    function calculate() public pure returns (uint256) {
        return (10 + 5) * 2; // 결과: 30
    }
}
  • 산술 연산은 컴파일 시점 또는 실행 시점에 평가됩니다.
  • 복잡한 표현식은 가독성을 위해 괄호 사용을 권장합니다.

참고 링크

다음으로 읽어볼 글