정지용
기술스택 목록
언어

Solidity

프로젝트 9에서 사용했습니다. 각 프로젝트에서 어떤 역할로 썼는지 아래에 정리했습니다.

이 기술은 무엇인가요?

이더리움 등 EVM 블록체인에서 실행되는 스마트컨트랙트를 작성하는 프로그래밍 언어

Solidity는 이더리움 가상머신(EVM) 위에서 동작하는 스마트컨트랙트를 작성하기 위해 만들어진 정적 타입 언어다. 블록체인 위에서 자산 소유권, 거래 규칙, 권한 관리 같은 로직을 코드로 표현하고, 이를 배포하면 누구나 검증 가능하고 중간에 임의로 바꿀 수 없는 방식으로 실행할 수 있게 하려는 목적으로 설계되었다. 문법은 JavaScript/C++와 유사하지만, 가스(gas) 비용, 상태 변경, 재진입 공격 같은 블록체인 고유의 제약을 언어 차원에서 다뤄야 한다는 점이 일반 프로그래밍 언어와 다르다. 토큰, NFT, 탈중앙 거래소, 게임 로직 등 온체인에서 자산과 상태를 다루는 대부분의 애플리케이션이 Solidity로 작성된다.

이럴 때 사용합니다

  • 이더리움 및 EVM 호환 체인에 자산 소유권이나 거래 규칙을 온체인으로 배포하고 싶을 때
  • NFT, 토큰, 마켓플레이스처럼 위·변조 불가능한 상태 관리가 필요한 로직을 만들 때
  • 제3자가 중개하지 않아도 신뢰할 수 있는 자동화된 계약 로직이 필요할 때

핵심 개념

Smart Contract
블록체인에 배포되어 특정 주소를 가지며, 외부 트랜잭션에 의해 함수가 호출되어 상태를 변경하는 코드 단위이다.
Gas
컨트랙트 실행에 필요한 연산 비용을 나타내는 단위로, 코드가 복잡하거나 상태 변경이 많을수록 더 많은 가스를 소비한다.
State Variable
블록체인에 영구적으로 저장되는 컨트랙트의 데이터로, 트랜잭션마다 변경 내역이 기록되며 조회·수정에 가스 비용이 든다.
EVM (Ethereum Virtual Machine)
Solidity 코드가 컴파일된 바이트코드를 실제로 실행하는 런타임 환경으로, 이더리움 및 호환 체인들이 공통으로 사용한다.
Modifier
함수 실행 전후에 공통 조건(권한 검사 등)을 끼워 넣어 재사용할 수 있게 해주는 문법 요소이다.
Reentrancy
외부 컨트랙트 호출 도중 상태가 아직 갱신되지 않은 틈을 노려 함수가 재귀적으로 다시 호출되는 대표적인 보안 취약점이다.

가장 단순한 상태 저장 컨트랙트

숫자 하나를 블록체인에 저장하고 읽어오는 최소 형태의 컨트랙트로, set은 상태를 변경하고 get은 가스 없이 조회만 한다.

Solidity
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

contract SimpleStorage {
    uint256 private value;

    function set(uint256 _value) public {
        value = _value;
    }

    function get() public view returns (uint256) {
        return value;
    }
}

처음 쓸 때 흔한 함정

  • 배포 후에는 코드를 수정할 수 없어, 업그레이드 패턴을 처음부터 설계하지 않으면 대응이 어렵다.
  • 외부 컨트랙트 호출 시 상태 갱신 순서를 잘못 잡으면 재진입 공격에 노출될 수 있다.
  • 일반 언어처럼 반복문·저장소 사용을 가볍게 여기면 가스 비용이 예상보다 크게 늘어난다.

위 개요는 기술 학습을 돕기 위해 자동 생성된 일반 설명입니다. 정확한 사양과 최신 정보는 공식 문서를 확인하세요.

프로젝트별 활용 방식

위 개념이 실제 프로젝트에서 어떻게 쓰였는지 보여줍니다.

함께 사용한 기술

위 프로젝트들에서 같이 쓰인 다른 기술입니다.