솔리디티 기본 문법ㅣsolidity 언어 개념과 개발 환경, 스마트 컨트랙트

인사이트

솔리디티 기본 문법ㅣsolidity 언어 개념과 개발 환경, 스마트 컨트랙트

2022년 10월 28일

크립토키티, 유니스왑, 스포티파이라는 키워드, 혹시 한 번쯤 들어보셨나요? 해당 키워드는 Web3.0의 도래와 함께 블록체인 기술이 발전하기 시작하면서 생긴 탈중앙화 서비스입니다. 이 서비스는 모두 블록체인 네트워크 안에서 스마트 컨트랙트를 통해 작동합니다.

스마트 컨트랙트는 코드로 만들어진 계약서로 여러 종류의 자산인 코인, 토큰, NFT 등을 생성 및 저장합니다. 또, 자산을 이동시키기도 하면서 제3 자의 개입 없이 개인과 개인 간의 거래(P2P)를 가능하게 합니다. 어떻게 코드에 자산이 담기고, 이동할 수 있을까요? 이를 가능하게 하기 위해서는 무엇을 알아야 할까요?

오늘은 블록체인 이더리움 네트워크에서 스마트 컨트랙트를 개발하는 데 필요한 솔리디티 프로그래밍 언어에 대해 알아보고자 합니다.

유니스왑 uniswap
분산 네트워크 프로토콜을 사용하는 암호화폐 거래소, 유니스왑(uniswap) (출처 : 유니스왑 홈페이지)

솔리디티(Solidity)란?

솔리디티는 이더리움에서 제공하는 스마트 컨트랙트* 개발 언어입니다.

*스마트 컨트랙트는 블록체인 기술을 활용해 제3의 인증 기관 없이 개인 간의 계약이 이루어질 수 있도록 하는 기술입니다. 즉, 블록체인에서 작동하는 디지털화된 계약서를 뜻합니다.

기본적으로 이더(ETH)를 보내고 받는 데 필요한 데이터 타입, 함수 등을 제공하며 아래와 같은 세 가지의 특징을 가지고 있습니다.

1. 정적 타입(Statically typed) 언어

정적 타입 언어란, 컴파일 시 변수의 타입이 결정되는 언어를 뜻합니다. 프로그래머가 변수에 들어갈 값의 형태에 따라 직접 타입을 명시해 주어야 합니다.

2. Ethereum Virtual Machine (EVM)

EVM이란 이더리움(Ethereum) 블록체인 네트워크의 참여자(노드)가 공유하는 하나의 가상 머신이며 이더리움(Ethereum) 전체를 작동하는 엔진과도 같습니다. 솔리디티는 이러한 EVM을 타깃으로 디자인되었습니다.

3. 튜링 완전성

튜링 완전이란, 어떤 프로그래밍 언어나 추상 머신이 튜링 머신과 동일한 계산 능력으로 문제를 풀고 해결할 수 있다는 의미입니다. 솔리디티는 자체적인 튜링 완전 언어들을 지원하기 때문에 사실상 가능한 모든 형태의 거래를 코드로 작성할 수 있습니다. 또, 컴퓨터 코드 작업마다 수수료인 가스(Gas)를 부과해 악의적인 공격을 방어합니다.

이제부터 솔리디티를 통해 직접 스마트 컨트랙트 개발 환경을 구성해 보고, 솔리디티가 가지고 있는 기본적인 문법을 함께 살펴보겠습니다.

솔리디티 기본 문법

솔리디티 개발 환경(IDE)

Remix, IntelliJ IDEA Plugin, VSCode Extension, Etheratom 외에도 다양한 개발 환경이 존재합니다.

VSCode를 비롯한 Atom, IntelliJ 등은 우리가 일반적으로 사용하는 데스크톱 IDE입니다.

이는 자체적으로 솔리디티 코드를 디버깅하거나 컴파일하는 기능이 없습니다. 따라서 작성한 코드를 컴파일, 배포, 테스트, 디버깅해 주는 Truffle이나 Hardhat, 그리고 로컬 환경에 블록체인 테스트넷을 사용할 수 있게 해 주는 Ganache를 함께 사용해야 합니다. 초심자라면 별도의 서버 없이 컴파일러와 런타임 환경을 제공하는 브라우저 기반의 IDE인 Remix로 시작하는 것이 좋습니다.

솔리디티 설치 방법 🎮

이더리움에서 스마트 컨트랙트를 실행하기 위해서는 솔리디티 코드를 작성하고 solc이라는 솔리디티 컴파일러로 컴파일하여 이더리움 블록체인에 배포해야 합니다.

1. 컴파일러 설치

mac OS

brew update
brew tap ethereum/ethereum
brew install solidity

우분투

sudo add-apt-repository ppa:ethereum/ethereum
sudo apt update
sudo apt install solc

2. 버전 확인

solc --version

/* 아래와 같은 문구가 나온다면 설치가 잘 작동되었다는 뜻이다.
solc, the solidity compiler commandline interface
Version: 0.8.15+commit.e14f2714.Darwin.appleclang
*/

솔리디티 개발 시작하기 🕹

이번에는 스마트 컨트랙트 구조와 컨트랙트 코드 실행 방법에 대해 알아보겠습니다.

기본적인 스마트 컨트랙트 구조

기본적인 스마트 컨트랙트 구조는 다음과 같습니다. 크게 라이센스를 나타내 주는 식별자와, 솔리디티 버전 그리고, 배포하고자 하는 컨트랙트 코드가 존재합니다.

1. SPDX 라이센스 식별자

솔리디티 소스 코드를 사용할 수 있게 하는 것은 항상 저작권과 관련된 법적 문제를 다룹니다. 컴파일러는 기계 판독이 가능한 SPDX 라이센스 식별자의 사용을 권장합니다. 모든 소스 파일은 라이센스를 나타내는 주석으로 시작합니다. 주석은 파일의 어느 곳에 있어도 컴파일러가 인식하겠지만 항상 최상단에 두는 것이 좋습니다. 위의 코드는 GPL 3.0 버전 라이선스 하에 있다는 것을 의미합니다.

2. Version Pragma

솔리디티 버전을 선언하는 것입니다. 이를 통해 새로운 컴파일러 버전이 나와도 기존 코드가 깨지는 것을 방지하며 향후 컴파일러 버전과 이전 컴파일러 버전 사이에 호환되지 않은 변경 사항이 생기는 것을 차단합니다.

3. contract

배포할 컨트랙트 코드를 작성하는 곳입니다.

컨트랙트 코드 실행

1. 새 워크스페이스를 생성합니다. 폴더명은 practice로 지정하고, 폴더 안에 Ex1.sol 파일을 작성합니다.

가장 기본적인 컨트랙트 코드를 작성해 보겠습니다.

2. 컴파일러를 누르고 Ex.1 파일을 컴파일합니다.

commad(or shift) + S를 눌러도 컴파일은 작동합니다.

3. Deploy(배포)를 누릅니다.

4. 컨트랙트가 정상적으로 배포된 것을 확인할 수 있습니다.

솔리디티 문법 예제가 이어집니다.

이렇게 이더리움 블록체인 네트워크에서 애플리케이션을 만들 수 있는 데에 필요한 가장 기초적인 솔리디티의 개념과 설치 방법, 시작 방법을 대략 살펴보았습니다. 오늘 소개해드린 내용에 이어 솔리디티 문법 예제 포스팅을 살펴보시면 솔리디티 언어에 대해 더 깊게 이해하실 수 있어요. 아래 이미지를 클릭하시면 솔리디티 문법 예제 포스팅으로 이동합니다.

 고유진 Blochain Engineer, 양희진 Educational Operation Manager (Blockchain Engineering)
편집 조주연 Content Manager


🚀 블록체인 개발자 커리어의 시작,
블록체인 부트캠프가 더 궁금하다면?

목록 보기

추천글