마지막 업데이트:
Solidity는 스마트 컨트랙트를 설계하고 구현하기 위해 만들어진 중괄호(curly-bracket) 기반의 고수준 객체 지향 프로그래밍 언어입니다.[3][6]
Solidity는 여러 잘 알려진 프로그래밍 언어들로부터 영향과 영감을 받은 중괄호(curly-bracket) 언어입니다. Solidity는 C++로부터 가장 깊은 영향을 받았지만, Python, JavaScript 등과 같은 언어들로부터도 개념을 차용했습니다.[6]
Solidity는 Ethereum 네트워크 팀이 smart contracts를 구현하기 위해 설계한 계약 지향 프로그래밍 언어입니다. C++, Python, JavaScript와 같은 프로그래밍 언어에서 영감을 얻었습니다. Solidity 소스 코드는 Ethereum Virtual Machine을 위해 컴파일되며, Ethereum 및 EVM 호환 네트워크를 위한 smart contracts를 작성하는 데 사용됩니다.[1][2]
Solidity의 기본 개념은 개발자가 blockchain 네트워크에서 decentralized applications (DApps) 및 자가 실행 계약을 생성할 수 있도록 하는 데 중점을 둡니다.
2014년 8월, Ethereum의 공동 창립자인 Gavin Wood가 Solidity에 대한 아이디어를 제안했습니다. 이후 Christian Reitwiessner가 이끄는 Ethereum 프로젝트의 Solidity 팀이 이 언어를 만들고 개발했습니다.[7][8]
Solidity는 2015년 8월 7일 버전 0.1.0으로 처음 출시되었습니다. 초기에는 언어의 기능이 기본적이고 제한적이었으나, 시간이 흐르면서 Solidity는 수많은 개선과 발전을 거쳤습니다.
Solidity는 Ethereum 개발자들 사이에서 빠르게 인기를 얻었으며, smart contracts 개발을 위한 주요 언어가 되었습니다. Solidity를 통해 개발자들은 다양한 기능과 서비스를 수행하기 위해 Ethereum blockchain에서 실행될 코드를 작성할 수 있게 되었습니다.
Solidity는 다양한 blockchain 프로젝트와 decentralized applications (dApps)에서 사용되어 왔습니다. Solidity로 작성된 Smart contracts 는 ERC-20 토큰, 투표 시스템, 시간 잠금 자금 등 다양한 용도로 활용될 수 있습니다.[9]
Solidity 컴파일러 v0.8.27이 2024년 9월 4일에 출시되었습니다.[4] 2024년 10월 9일에 출시된 Solidity v0.8.28은 두 컴파일러 파이프라인 모두에서 값 타입의 일시적 저장(transient-storage) 상태 변수에 대한 전체 지원을 추가했습니다. 또한 특정 벤치마크에서 IR 컴파일 메모리 사용량을 최대 80%, 실행 시간을 최대 25%까지 줄였습니다.[11]
2025년 12월 3일에 출시된 Solidity v0.8.31은 Osaka를 기본 EVM 타겟으로 설정하고, 256비트 워드에서 선행 0 비트 수를 세는 CLZ 옵코드 지원을 추가했으며, 상수 변수를 허용하도록 스토리지 레이아웃 지정자를 확장했습니다. 또한 중대한 변경이 포함될 0.9.0 릴리스에서 제거될 예정인 기능들에 대해 지원 중단 경고를 발행하기 시작하여 개발자들이 해결해야 할 호환성 변경 사항을 알렸습니다.[12]
2026년 2월 18일에 출시된 Solidity v0.8.34는 버전 0.8.28부터 0.8.33까지 영향을 미치는 고위험 IR 코드 생성기 버그를 수정했습니다. --via-ir로 컴파일할 때, 일시적 상태 변수에 delete를 사용하는 코드가 동일한 타입의 영구 및 일시적 변수를 지울 때 컴파일러가 잘못된 스토리지 옵코드를 내보낼 수 있는 문제를 해결했습니다.[13]
2026년 4월 29일에 출시된 Solidity v0.8.35는 ERC-7201 네임스페이스 스토리지를 위한 컴파일 타임 내장 기능인 erc7201을 추가하고, --experimental 옵션을 통해 실험적 모드를 공식화했습니다. 또한 stack-too-deep 오류와 느린 IR 컴파일 문제를 해결하기 위해 설계된 실험적인 SSA 형태의 제어 흐름 그래프(control-flow-graph) 코드 생성기를 도입했습니다. SSA 생성기는 초기 단계에 머물렀으며 기본 --via-ir 파이프라인은 아니었습니다. 이 릴리스에는 0.9.0에서 키워드가 될 예정인 식별자들에 대한 지원 중단 경고도 포함되었습니다.[14]
2026년 July 9일에 출시된 Solidity v0.8.36은 여전히 실험적이고 비기본 설정인 SSA 생성기에 스택-투-메모리 스필링(stack-to-memory spilling) 기능을 추가했으며, 재귀 함수와 관련된 불안전한 스필 문제를 수정했습니다. 또한 EOF가 Fusaka 업그레이드에서 거절되고 mainnet 지원이 없게 됨에 따라 실험적인 EOF 백엔드를 제거했습니다.[15]
2026년 9월 10일에 출시된 Solidity v0.8.37은 2026년 10월 21일 기준 최신 안정화 컴파일러 버전입니다. Amsterdam EVM의 SLOTNUM 옵코드 지원을 추가하여, Amsterdam을 대상으로 컴파일할 때 Solidity에서는 [block](https://iq.wiki/wiki/block).slotnum으로, Yul에서는 slotnum()으로 사용할 수 있게 되었습니다. 다만 Amsterdam 타겟팅은 실험적 상태로 유지되었습니다. 또한 이 릴리스에서는 실험적 SSA 생성기의 그리디 스택 셔플러(greedy stack shuffler)를 계획 알고리즘(planning algorithm)으로 교체했습니다.[16]
버전 0.8.37은 또한 영향 범위와 조건이 서로 다른 몇 가지 중요한 컴파일러 오류를 수정했습니다. 레거시 파이프라인에서 메모리 bytes 배열의 요소에 delete를 사용할 경우 뒤따르는 바이트를 최대 31바이트까지 0으로 만들 수 있었던 문제가 0.8.36 버전까지 영향을 미쳤으나 수정되었습니다. IR 파이프라인에서는 --via-ir을 사용할 때 0.7.2부터 0.8.36 버전까지 특정 상호 재귀 함수에서 스택-투-메모리 스필링이 충돌할 수 있었던 문제를 해결했습니다. 또한 IR 파이프라인에서 커스텀 에러의 명명된 인자가 require에 전달될 때 revert 데이터의 인자 순서가 잘못되던 현상도 수정되었습니다.[16]
C++의 영향은 변수 선언 구문, for 루프, 함수 오버로딩 개념, 암시적 및 명시적 형 변환 및 기타 여러 세부 사항에서 볼 수 있습니다.[6]
Solidity는 과거에 JavaScript의 영향을 부분적으로 받았습니다. 이는 변수의 함수 수준 스코핑과 'var' 키워드의 사용 때문이었습니다. JavaScript의 영향은 버전 0.4.0부터 줄어들기 시작했습니다. 현재 JavaScript와의 주요 유사점으로 남아있는 것은 함수가 'function' 키워드를 사용하여 정의된다는 점입니다. [6]
Solidity는 또한 JavaScript에서 사용 가능한 것과 유사한 import 구문 및 의미론을 지원합니다. 이러한 점들을 제외하면, Solidity는 대부분의 다른 중괄호(curly-bracket) 언어들과 비슷해 보이며 더 이상 주요한 JavaScript의 영향은 없습니다.[6]
Solidity에 영향을 준 또 다른 언어는 Python입니다. Solidity의 제어자(modifiers)는 훨씬 더 제한된 기능을 가진 Python의 데코레이터(decorators)를 모델링하기 위해 추가되었습니다.[6]

다음은 Solidity의 몇 가지 핵심 개념입니다.[3]
Solidity는 다음을 포함한 스마트 계약 플랫폼에서 사용할 수 있습니다:[5]
Ethereum과 Solidity의 결합은 개발자들이 광범위하고 복잡한 애플리케이션을 만들 수 있게 해주었습니다. Ethereum이 탈중앙화된 플랫폼을 제공하고 Solidity가 강력한 프로그래밍 언어를 제공함으로써, 개발자들은 안전하고 효율적이며 투명한 smart contracts를 만드는 데 필요한 도구를 갖게 되었습니다.
개발자들은 Solidity로 smart contracts를 작성한 다음 이를 Ethereum blockchain에 배포합니다. smart contract가 배포되면, 이는 다른 컨트랙트나 애플리케이션으로부터 독립적으로 존재합니다. 이는 고유한 이더리움 주소와 잔액을 가지며, 이더리움 네트워크의 다른 참여자들과 마찬가지로 트랜잭션을 생성하고 수신할 수 있습니다.
트랜잭션에 의해 스마트 컨트랙트가 실행되면, 이더리움 네트워크는 컨트랙트의 코드를 실행합니다. 이 코드는 자금 이체부터 다른 컨트랙트와의 상호작용에 이르기까지 광범위한 작업을 수행할 수 있습니다.[10]
또 다른 과제는 Ethereum의 확장성 및 효율성 문제에 대처하는 것이었습니다. 이는 smart contracts의 처리량과 속도를 제한하고, 네트워크에서 트랜잭션을 실행하는 데 필요한 비용인 gas 비용을 증가시켰습니다.[8]
또한, smart contract 개발을 위해 서로 다른 기능과 장단점을 제공하는 새로운 플랫폼과 언어들이 등장함에 따라, blockchain 분야의 혁신과 경쟁에 발맞추는 것도 또 다른 과제였습니다.
이러한 과제들을 해결하고 커뮤니티의 요구와 기대를 충족시키기 위해, Solidity는 정기적인 업데이트와 개선을 통해 수년에 걸쳐 끊임없이 진화하고 발전하고 있습니다.
가장 중요한 변화 중 일부는 구조체(structs), 열거형(enums), 매핑(mappings)과 같은 새로운 타입의 도입, 상속, 인터페이스 및 라이브러리 지원, 제어자(modifiers), 이벤트 및 에러 핸들링 추가, require 및 revert 함수와 같은 보안 검사 및 모범 사례 구현, gas 사용량 및 바이트코드 생성 최적화, 그리고 오라클 및 블록체인 간 통신과 같은 외부 소스 및 시스템과의 통합 등이 포함됩니다.[8]