Solidity란 무엇인가?
작성자 Alchemy
웹3 산업이 성장하면서 개발자들은 더 많은 웹3 프로그래밍 언어 선택지를 마주하게 됩니다. 각 언어는 스마트 컨트랙트를 작성할 때 서로 다른 이점과 트레이드오프를 갖도록 설계되어 있습니다. 언어들은 특정 블록체인을 지원하는지 여부, 또는 속도, 가독성, 보안성 같은 특성에서 차이를 보일 수 있습니다.
Ethereum 블록체인의 스마트 컨트랙트 언어로 개발된 Solidity는 블록체인 업계에서 가장 큰 개발자 생태계를 위한 탈중앙화 애플리케이션을 만드는 데 사용되는 강력한 프로그래밍 언어입니다.
이 글에서는 Solidity의 역사, 언어적 영향 관계, 그리고 용도를 통해 Solidity를 소개합니다. 마지막에는 무료 Solidity 강의와 웹3 개발 학습 자료를 통해 계속 학습할 수 있는 최고의 개발자 자료들을 제공합니다.
Solidity란 무엇인가?
2014년에 제안된 Solidity는 Ethereum Virtual Machine(EVM)에서 실행되는 스마트 컨트랙트를 구현하기 위한 객체 지향 고급 프로그래밍 언어입니다. Solidity는 C++, JavaScript 같은 잘 알려진 프로그래밍 언어에서 영감을 받았습니다. 웹3 개발자로서 Solidity를 다루는 것은 웹3 개발을 배우는 데 도움이 됩니다.
이 섹션에서는 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를 포함한 여러 기존 프로그래밍 언어를 기반으로 하고 영향을 받았습니다.
Solidity와 C++의 유사점
Solidity는 변수 선언과 for 루프에서 C++와 동일한 문법을 사용합니다. 또한 C++ 스타일의 함수 오버로딩을 지원하는데, 이는 두 함수가 이름은 같지만 받아들이는 매개변수가 다를 때 필요합니다.
마지막으로, Solidity는 암시적 및 명시적 타입 변환을 모두 허용합니다. 즉, 변수 타입은 개발자가 명시적으로 코드로 캐스팅하거나, 계산에 필요한 경우 자동으로 변환됩니다.
Solidity와 JavaScript의 유사점
Solidity는 한때 JavaScript의 영향을 크게 받았습니다. 현재 가장 눈에 띄는 유사점은 함수를 정의할 때 'function' 키워드를 사용한다는 점입니다.
Solidity의 주요 영향 언어들에 익숙한 개발자라면 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의 상태를 변경하는 방식을 요약한 것입니다:
- Solidity로 스마트 컨트랙트 작성
- Solidity 스마트 컨트랙트가 바이트코드로 컴파일됨
- 바이트코드가 EVM opcode로 변환됨
- 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는 여러 체인과 가장 빠르게 성장하는 웹3 dApp 생태계에서 강력한 사용 사례를 가지고 있습니다.
The Next Web의 Hard Fork가 발표한 보고서에 따르면, 블록체인 태그가 붙은 질문에서 Solidity는 두 번째로 가까운 경쟁 언어보다 두 배 더 많이 등장합니다. JavaScript는 Solidity의 9.5%에 비해 4.8%의 물량밖에 되지 않습니다.
Solidity는 Ethereum에서 어떻게 사용되는가?
Ethereum에서 Solidity가 사용되는 몇 가지 예시를 보면 유연한 스마트 컨트랙트를 만드는 Solidity 코드의 간결함을 잘 느낄 수 있습니다. 공식 Solidity 문서에 있는 코드 예제는 이 언어를 소개하는 좋은 입문 자료입니다.
스마트 컨트랙트
다음은 Ethereum에서 간단한 화폐를 만드는 Solidity 문서의 간단한 코드 예제입니다.

컨트랙트의 함수 선언, 비공개 및 공개 변수를 주목해서 보세요. 함수는 컨트랙트가 온체인에서 여러 동작을 수행할 수 있게 해주는데, 이 경우에는 한 주소에서 다른 주소로 토큰을 보내는 것과 토큰을 발행하는 것입니다.
공개 변수는 컨트랙트 외부에서 접근 가능하며, 해당 변수의 값을 가져오기 위한 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 표준 몇 가지는 다음과 같습니다:
Solidity 프로그래밍 학습 방법
Solidity가 무엇인지는 이제 알았지만, 어떻게 학습을 시작해야 할까요? 가장 인기 있는 스마트 컨트랙트 언어인 만큼, 온라인에는 Solidity 개발 학습을 시작할 수 있는 풍부한 자료가 있습니다.
Solidity를 배우는 가장 좋은 방법 중 하나는 Alchemy University의 7주 Solidity 부트캠프입니다. 이 부트캠프는 웹3 엔지니어들로 구성된 선도적인 팀인 ChainShot이 원래 만든 것으로, Alchemy가 2022년 8월 ChainShot을 인수한 후 재설계했습니다.
이 Ethereum 개발자 부트캠프는 원래 3,000달러짜리 인증 과정이었지만, 지금은 무료입니다. Alchemy University에 합류할 대기열 자리를 확보하세요.
Solidity 자료
이 섹션에서는 Solidity 개발을 배우기 위한 온라인 최고의 자료들을 제공합니다.
- 공식 Solidity 문서 - Solidity 개발 학습의 주요 자료로 문서를 활용하세요.
- Solidity by Example - 'Hello World' 프로그램부터 지갑 애플리케이션, DeFi에 이르는 Solidity 예제 모음.
- Clean Contracts - Solidity 코드 예제와 함께 안전하고 예측 가능한 스마트 컨트랙트를 작성하는 방법에 대한 가이드.
- OpenZeppelin의 Ethernaut - 각 레벨이 스마트 컨트랙트를 해킹하는 것으로 구성된 스마트 컨트랙트 기반 워 게임.
Solidity로 빌드를 시작하세요
이 글에서는 Solidity를 소개하고 Solidity 개발 학습을 시작할 수 있는 자료들을 제공했습니다. Solidity는 Ethereum과 EVM 호환 블록체인에서 탈중앙화 애플리케이션을 개발하기 위한 매우 유연하고 강력한 언어입니다.
지식에 자신감이 생겼다면, 주저하지 말고 Goerli 테스트넷에 애플리케이션을 배포하고, 웹3 해커톤에 참여하고, 웹3 스타트업을 만들어보세요!
관련 개요

블록체인 매직을 만드세요
Alchemy는 가장 강력한 Web3 개발자 제품 및 도구를 리소스, 커뮤니티, 그리고 전설적인 지원과 결합합니다.


