본문으로 건너뛰기
0%

Solidity란 무엇인가?

Alchemy team headshot

작성자 Alchemy

2023년 9월 22일에 게시됨6분 읽기

web3 산업이 성장하면서 개발자들은 더 많은 web3 프로그래밍 언어 선택지를 마주하게 됩니다. 각 언어는 스마트 컨트랙트 작성 시 서로 다른 장점과 트레이드오프를 가지도록 설계되어 있습니다. 언어마다 특정 블록체인을 지원하는지 여부가 다르거나, 속도, 가독성, 보안성과 같은 특성이 다를 수 있습니다.

Ethereum 블록체인을 위한 스마트 컨트랙트 언어로 개발된 Solidity는 블록체인 업계에서 가장 큰 개발자 생태계를 위한 탈중앙화 애플리케이션을 만드는 데 사용되는 강력한 프로그래밍 언어입니다.

이 글에서는 Solidity의 역사, 언어적 영향, 그리고 용도를 통해 Solidity를 소개합니다. 마지막에는 무료 Solidity 강좌와 web3 개발 학습 자료를 통해 학습을 이어갈 수 있는 최고의 개발자 자료들을 제공합니다.

Solidity란 무엇인가?

2014년에 제안된 Solidity는 Ethereum Virtual Machine(EVM)에서 실행되는 스마트 컨트랙트를 구현하기 위한 객체 지향 고급 프로그래밍 언어입니다. Solidity는 C++나 JavaScript와 같은 잘 알려진 프로그래밍 언어에서 영감을 받았습니다. web3 개발자로서 Solidity를 다루는 것은 web3 개발을 배우는 데 도움이 됩니다.

이 섹션에서는 Solidity의 역사를 소개하고, Solidity와 다른 프로그래밍 언어 간의 유사점을 설명하며, Solidity의 주요 사용 사례를 다룹니다.

Solidity는 누가 만들었는가?

2014년, Ethereum의 CTO였던 Gavin Wood는 스마트 컨트랙트 작성을 위한 튜링 완전 프로그래밍 언어에 대한 Ethereum의 필요를 충족시킬 언어로 Solidity를 고안했습니다.

Ethereum의 창시자인 Vitalik Buterin은 Bitcoin이 개척한 블록체인 기능을 확장하면서 스마트 컨트랙트 기능을 추가한 프로토콜로 Ethereum을 제안했습니다. 그의 구상에서 Ethereum은 조건부로 실행되는 코드 조각들로 이루어진 정교한 스마트 컨트랙트 네트워크를 실행할 수 있어야 했으며, 이는 분산된 전 세계 컴퓨터 네트워크에서 실행됩니다. 스마트 컨트랙트는 개발자가 새로운 암호화폐를 만들고, DeFi 앱을 구축하는 등 다양한 일을 할 수 있게 합니다.

Solidity 프로젝트 팀은 Christian Reitwiessner가 이끌었으며, 스마트 컨트랙트 구현을 위한 튜링 완전 객체 지향 프로그래밍 언어를 만드는 데 성공했습니다. 고급 언어라는 것은 개발자가 계산을 수행하기 위해 메모리나 바이트코드 같은 시스템 수준 정보를 직접 다루지 않고도 스마트 컨트랙트를 작성할 수 있다는 것을 의미합니다.

튜링 완전성이란 데이터 조작 시스템, 이 경우 프로그래밍 언어가 튜링 머신의 동작을 시뮬레이션할 수 있는 능력을 말합니다. 이론적으로 Solidity는 개발자가 요구할 수 있는 어떤 계산이든 수행할 수 있어야 했습니다.

Solidity는 어떤 프로그래밍 언어를 기반으로 하는가?

Solidity는 개발 과정에서 C++, Python, JavaScript를 포함한 여러 기존 프로그래밍 언어를 기반으로 하고 영향을 받았습니다.

C++와의 유사점

Solidity는 변수 선언과 for 루프에서 C++와 동일한 문법을 사용합니다. 또한 두 함수가 이름은 같지만 받는 매개변수가 다를 때 필요한 C++ 스타일의 함수 오버로딩도 지원합니다.

마지막으로, Solidity는 암시적 및 명시적 타입 변환을 모두 허용합니다. 즉, 변수 타입은 개발자가 명시적으로 작성한 코드에 의해 캐스팅되거나, 계산에 필요한 경우 자동으로 변환됩니다.

JavaScript와의 유사점

Solidity는 과거 JavaScript의 영향을 크게 받았습니다. 현재 가장 눈에 띄는 유사점은 함수를 정의할 때 'function' 키워드를 사용한다는 점입니다.

Solidity에 큰 영향을 준 언어들에 익숙한 개발자라면 Solidity를 익히는 것이 비교적 수월할 것입니다. 또한 Solidity는 정적 타입 언어이며, 라이브러리 사용과 복잡한 타입 생성을 지원합니다.

Python과의 유사점

Solidity가 Python으로부터 받은 영향은 문법 측면에서는 덜 드러나지만, Python과 마찬가지로 Solidity는 C3 선형화, 다중 상속을 사용하며 'super' 키워드를 유지합니다.

Python 스타일 문법을 사용하는 Vyper는 Solidity와 유사하며, EVM 호환 블록체인에서 사용되는 스마트 컨트랙트의 보안을 높이기 위해 의도적으로 설계되었습니다.

Solidity는 어떻게 사용되는가?

블록체인 코딩 언어로서의 특성상 Solidity는 Ethereum Virtual Machine(EVM)에서 컴파일되도록 명시적으로 만들어졌습니다. 따라서 Solidity는 모든 EVM 호환 블록체인을 위한 안전한 Ethereum 호환 스마트 컨트랙트를 작성할 수 있습니다.

이러한 광범위한 호환성은 이해하기 쉬운 특성, 유연한 기능성과 맞물려 Solidity를 업계에서 가장 널리 사용되는 블록체인 개발 언어로 만들었습니다.

Solidity는 어떻게 동작하는가?

Solidity 개발자는 EVM에서 실행되는 프로그램인 스마트 컨트랙트를 작성합니다. 다른 언어의 클래스와 유사하게, 스마트 컨트랙트는 여러 함수, 내부 상태, 공개 선언을 가질 수 있습니다.

Solidity 컨트랙트는 EVM이 읽을 수 있도록 바이트코드로 컴파일됩니다. 컴파일 후에는 Solidity 컨트랙트가 Vyper나 Huff와 같은 다른 EVM 스마트 컨트랙트 언어로 작성된 컨트랙트와 다르지 않게 보입니다.

다른 개발자 도구와 마찬가지로 Solidity도 정기적인 버전 업데이트를 거칩니다. 스마트 컨트랙트는 한 번 배포되면 블록체인에 등록된 이후에는 되돌릴 수 없기 때문에, Solidity 버전 제약은 생성 시점에만 중요하다는 점에 유의해야 합니다.

Solidity 개발자는 이론적으로 Ethereum 스마트 컨트랙트를 바이트코드로 직접 작성할 수 있지만, Solidity와 같은 고급 언어는 엔지니어가 저수준 조작 없이 더 효율적으로 컨트랙트를 작성할 수 있게 해줍니다.

Solidity는 EVM과 어떻게 상호작용하는가?

다음은 Solidity가 EVM의 상태를 변경하는 방식을 요약한 것입니다:

  1. Solidity로 스마트 컨트랙트 작성
  2. Solidity 스마트 컨트랙트가 바이트코드로 컴파일됨
  3. 바이트코드가 EVM opcode로 변환됨
  4. EVM opcode가 EVM의 상태를 변경함

EVM은 Ethereum의 "글로벌 컴퓨터"를 위한 _가상 상태 머신_이자 기록 관리자입니다. 가장 단순하게 말하면, EVM은 주소, 계정 잔액, 토큰 보유량을 포함한 네트워크의 전역 상태를 유지합니다.

Solidity 스마트 컨트랙트는 EVM의 전역 상태를 변경하도록 작성됩니다. EVM의 전역 상태는 토큰 발행, 토큰 송수신, 자산 해제와 같은 동작에 의해 변경됩니다.

EVM opcode로 인코딩된 다양한 EVM 연산들이 이러한 전역 상태 변경을 유발합니다. 각 EVM opcode는 한 주소에서 다른 주소로 토큰을 보내거나, 토큰을 발행하거나, 심지어 스마트 컨트랙트를 파괴하는 등 특정 종류의 상태 변경을 EVM이 수행하도록 설계되어 있습니다.

마지막 단계에서 EVM은 스마트 컨트랙트의 바이트코드를 EVM opcode로 변환하며, 이는 블록체인에 필요한 변경을 가합니다.

각 opcode에는 일정한 _가스 수수료_가 따르며, 이는 악의적인 행위자가 과도한 요청으로 네트워크를 막는 위험을 줄이기 위해 ETH로 청구됩니다. 트랜잭션의 총 가스 비용은 가스 단위당 가격에 트랜잭션에 포함된 opcode들의 총 가스 비용을 곱하여 계산됩니다.

어떤 EVM 호환 블록체인이 Solidity를 지원하는가?

Solidity는 Polygon, Arbitrum, Optimism과 같은 L2를 포함한 모든 EVM 호환 블록체인을 위한 스마트 컨트랙트를 작성할 수 있습니다. Solidity는 유연하고 사용하기 쉬우므로, 다수의 다른 블록체인에서도 지원됩니다. 다음은 Solidity를 지원하는 주요 프로젝트들입니다:

1. Polkadot

Polkadot은 릴레이 체인을 이용해 여러 블록체인(즉, 파라체인)을 하나의 체인으로 통합하는 데 초점을 맞춘 체인입니다. Polkadot의 목표는 파라체인들이 상호 운용 가능하도록 하여 확장성을 허용하고 대역폭을 늘리는 것입니다. Polkadot 파라체인의 한 예로 Alchemy가 지원하는 Astar가 있습니다.

2. Avalanche

Avalanche는 Solidity 개발을 지원하는 Ethereum 경쟁자입니다. Avalanche 아키텍처는 세 개의 블록체인으로 이루어진 네트워크를 기반으로 합니다: 자산 발행 및 거래를 위한 체인(X Chain), 네트워크 검증자를 조정하는 체인(P-Chain), 그리고 스마트 컨트랙트 생성을 허용하는 체인(C Chain)입니다.

3. BNB chain (구 Binance smart chain)

Binance Smart Chain은 Ethereum 위의 ERC-20 토큰으로 시작했으며, 성장하는 앱 생태계를 지원하기 위해 Binance Smart Chain(BSC) 네트워크가 만들어졌습니다. BSC와 그 토큰들은 스마트 컨트랙트에 Solidity를 사용합니다. 오늘날 Binance Smart Chain은 BNB Chain으로 불립니다.

Solidity는 얼마나 대중적인가?

Solidity는 블록체인 업계에서 가장 대중적인 스마트 컨트랙트 프로그래밍 언어입니다. Solidity는 EVM 호환 스마트 컨트랙트를 만들기 위한 네이티브 언어입니다. EVM 바깥에서도 Neon Labs의 Solana EVM처럼 Ethereum의 Virtual Machine을 내장 지원하는 프로젝트들이 있습니다.

블록체인 업계가 아직 성장 중이기 때문에, Solidity가 다른 모든 프로그래밍 언어에 비해 덜 사용되는 것처럼 보일 수 있습니다. 하지만 업계 내에서 Solidity는 가장 널리 적용 가능한 스마트 컨트랙트 언어입니다. Solidity는 여러 체인과 가장 빠르게 성장하는 web3 dApp 생태계에서 강력한 사용 사례를 가지고 있습니다.

The Next Web의 Hard Fork가 발표한 보고서에 따르면, Solidity는 블록체인 태그가 붙은 질문에서 그다음으로 가까운 경쟁자보다 두 배 많이 등장합니다. JavaScript는 Solidity의 9.5%에 비해 단 4.8%의 비중을 차지합니다.

Ethereum에서 Solidity는 어떻게 사용되는가?

Ethereum에서 Solidity 사용 사례 몇 가지를 살펴보면 유연한 스마트 컨트랙트를 만드는 데 있어 Solidity 코드가 얼마나 단순한지 잘 느낄 수 있습니다. 공식 Solidity 문서에 수록된 코드 예제들은 이 언어를 소개하는 데 좋은 입문 자료입니다.

스마트 컨트랙트

다음은 Ethereum 위에 간단한 통화를 만드는 Solidity 문서의 간단한 코드 예제입니다.

Ethereum에서 간단한 화폐 스마트 컨트랙트를 구현한 Solidity 코드 예제
이 코드는 화폐를 생성합니다.

컨트랙트의 함수 선언, private 및 public 변수를 주목하십시오. 함수는 컨트랙트가 온체인에서 다양한 동작을 수행하게 하며, 이 경우 한 주소에서 다른 주소로 토큰을 보내거나 토큰을 발행하는 동작입니다.

Public 변수는 컨트랙트 외부에서 접근 가능하며 해당 변수의 값을 조회하기 위한 getter 함수를 자동으로 생성합니다. event 키워드는 클라이언트 애플리케이션이 컨트랙트로 인한 변경 사항을 수신할 수 있게 합니다.

이 예제에서 클라이언트는 sent 이벤트를 보게 되며, 이는 msg.sender 주소가 receiver 주소로 일정 _amount_의 토큰을 보냈음을 리스너에게 알려줍니다.

Solidity ERC 표준이란 무엇인가?

Solidity 스마트 컨트랙트 설계의 기반에는 ERC(Ethereum Request for Comment) 표준이 있으며, 이는 다양한 유형의 Ethereum 토큰 구현을 개선하고 표준화하기 위해 만들어진 가이드라인입니다.

ERC 표준은 EIP(Ethereum Improvement Proposal)를 통해 제안됩니다. ERC 표준이 승인되고 확정되면, 이는 Solidity 컨트랙트 작성의 표준이 됩니다. 이를 통해 스마트 컨트랙트를 만들기 위한 공통 Solidity 인터페이스 템플릿이 가능해집니다. Solidity 개발자가 기존 ERC 표준을 준수하는 토큰을 만들면, 자신의 토큰이 블록체인에서 어떻게 적절히 동작할지 알 수 있습니다.

가장 널리 사용되는 ERC 표준 몇 가지는 다음과 같습니다:

  • ERC-20 - 대체 가능 토큰 표준
  • ERC-721 - 대체 불가능 토큰 표준
  • ERC-1155 - 반대체 가능 토큰 표준
  • ERC-4626 - 수익 창출 볼트 표준

Solidity 프로그래밍을 배우는 방법

Solidity가 무엇인지는 알았지만, Solidity 학습은 어떻게 시작해야 할까요? 가장 대중적인 스마트 컨트랙트 언어인 만큼, Solidity 개발 학습을 시작할 수 있는 다양한 온라인 자료가 존재합니다.

Solidity를 배우는 가장 좋은 방법 중 하나는 Alchemy University의 7주 Solidity 부트캠프입니다. 이는 원래 web3 엔지니어들로 이루어진 선도적인 팀인 ChainShot이 만들었으며, Alchemy가 2022년 8월 ChainShot을 인수한 후 재설계했습니다.

이 Ethereum 개발자 부트캠프는 원래 3,000달러짜리 인증 과정이었으나, 현재는 무료입니다. Alchemy University에 등록할 순서를 확보하세요.

Solidity 자료

이 섹션에서는 Solidity 개발 학습을 위한 최고의 온라인 자료들을 소개합니다.

  1. 공식 Solidity 문서 - Solidity 개발 학습의 주된 자료로 문서를 활용하세요.
  2. Solidity by Example - 'Hello World' 프로그램부터 지갑 애플리케이션, DeFi까지 다양한 Solidity 예제 모음.
  3. Clean Contracts - Solidity 코드 예제와 함께 안전하고 예측 가능한 스마트 컨트랙트를 작성하는 방법에 대한 가이드.
  4. OpenZeppelin의 Ethernaut - 각 레벨이 스마트 컨트랙트를 해킹하는 것으로 구성된 스마트 컨트랙트 기반 워 게임.

Solidity로 개발 시작하기

이 글에서는 Solidity를 소개하고 Solidity 개발 학습을 시작할 수 있는 자료들을 제공했습니다. Solidity는 Ethereum 및 EVM 호환 블록체인 위에서 탈중앙화 애플리케이션을 개발하기 위한 매우 유연하고 강력한 언어입니다.

지식에 어느 정도 익숙해졌다면, 주저하지 말고 Sepolia 테스트넷에 애플리케이션을 배포하고, web3 해커톤에 참여하고, web3 스타트업을 만드는 시도를 시작해 보세요!

Background gradient

블록체인 매직을 만드세요

Alchemy는 가장 강력한 Web3 개발자 제품 및 도구를 리소스, 커뮤니티, 그리고 전설적인 지원과 결합합니다.