본문 바로가기
블록체인

솔리디티(Solidity)란?

by 제이제이_은재 2022. 7. 7.

 

💡 솔리디티(Solidity)

 

솔리디티는 스마트 컨트랙트를 실행하는 객체 지향, 정적 타입, 고급 스크립트 언어로, EVM에서 실행된다. 솔리디티는 컨트랙트 기반의 고급 프로그래밍 언어이다. 자바스크립트와 같은 스크립트 언어의 구문과 매우 유사하다. 솔리디티는 C++ 과 파이썬, 자바스크립트를 기반으로 만들어졌으며, 이더리움 네트워크에서 스마트 컨트랙트를 생성할 수 있도록 설계되었다. 솔리디티는 정적 타입 스크립트 언어이기에, 런타임 언어와 달리 컴파일 시 제약 조건을 확인하고 적용한다.

 

 ✓ 역사

 

솔리디티는 2014년 8월 컴퓨터 과학자 가빈 우드가 처음 제안하였다. 우드는 이더리움에서 2년간 CTO로 재직했으며, 크리스찬 라이트와즈너가 우드를 이어받아 솔리디티 개발을 이끌었다. 그 결과 2015년 8월 솔리디티가 정식으로 출시되었다.

 

 

✓ 솔리디티로 할 수 있는 일

 

솔리디티는 이더리움 네트워크의 기반이다. 솔리디티가 없으면 이더리움도 존재할 수 없다. 만약 개발자가 은행 앱을 만들어 앱스토어에 올리려면, Swift라는 언어를 사용해 프로그래밍 해야 한다. 그리고 Swift로 만든 앱을 앱스토어에 올리기 위해 애플에 신청하면, 애플은 앱을 심의하고 적합한 경우 앱스토어에 올린다. 그리고 사용자는 언제든지 앱스토어에서 원하는 앱을 다운로드 받을 수 있다. 이더리움도 마찬가지이다. 이더리움 네트워크에서 언제든지 원하는 분산형 앱을 사용할 수 있다. 이더리움 네트워크에 dApp을 올리기 위해서는 솔리디티로 프로그래밍을 해야한다. 다만 앱스토어처럼 중앙기관에 심의를 받을 필요 없이 누구나 약간의 비용만 내면 이더리움 네트워크에 자신이 만든 dApp을 올릴 수 있다.

 

 

✓ 솔리디티는 튜링 완전 언어

 

비트코인 스크립트와 비교해서 솔리디티의 가장 큰 특징은 튜링 완전/불완전 이다.

 

* 튜링 머신

 

1930년대에 앨런 튜링은 유니버셜 튜링 머신이라는 개념을 고안했다. 튜링 머신은 실제로 구현된 기계가 아니라, 이론 상으로 존재하는 기계로 오늘날 우리가 구축할 수 있는 가장 강력한 기계 컴퓨터를 사용하는 수학적 연산 모델이다. 어떤 프로그래밍 언어나 추상 기계가 튜링 머신과 동일한 연산 능력을 가질 때, 우리는 그것이 튜링 완전하다고 말한다. 반대로 튜링 머신보다 연산 능력이 덜어질 경우 튜링 불완전하다고 말한다. 튜링 머신과 튜링 완전, 튤이 불완전성에 대해서는 지금 당장 깊게 이해할 필요는 없다. 지금은 튜링 머신이 우리가 일반적으로 아는 컴퓨터 언어들처럼 기본적인 연산과 조건문, 반복문 등을 모두 수행할 수 있는 기계 정도로 이해하면 된다.

 

* 스마트 컨트랙트와 튜링 완전, 불완전성

 

비트코인 스마트 컨트랙트에서는 Opcode를 사용해 스크립트를 구성했다. 그러나, 비트코인 스크립트에는 치명적인 단점이 하나 있었다. 바로 몇가지 Opcode를 사용할 수 없다는 점이다. 사토시 나카모토는 무한 반복 공격과 같은 보안상의 이슈를 고려해 의도적으로 반복문 Opcode를 제외했다. 따라서 비트코인 스크립트를 두고 튜링 불완전하다고 말한다.

 

비트코인으로 스마트 컨트랙트를 구현할 때는 반복문을 사용할 수 없다모니 단순한 스마트 컨트랙트를 만드는 데에 그칠 수 밖에 없었다. 이더리움의 핵심은 이러한 비트코인의 튜링 불완전성이라는 한계를 넘어, 개발자가 원하는 스마트 컨트랙트를 유연하게 구현할 수 있도록 튜링 완전을 제공하는 것이다. EVM은 반복문 Opcode들을 지원하는 대표적인 튜링 완전 머신이며, 솔리디티는 튜링 완전 머신을 동작하게 하는 튜링 완전 언어이다.

 

 

✓ 솔리디티 개발 도구

 

dApp의 벡엔드 개발 도구들은 대표적으로 다음과 같은 것들이 있다.

 

* Remix IDE

Remix는 솔리디티를 사용한 dApp 개발을 도와주는 통합 개발 환경이다. Remix IDE는 자바스크립트로 만들어졌기 때문에 브라우저에서 사용가능하며, 로컬이나 데스크톱 버전을 사용할 수도 있다.

 

* solc

솔리디티는 고급 언어이기 때문에 가상 머신인 EVM은 솔리디티를 읽을 수 없다. 따라서 솔리디티를 바이트코드로 컴파일해야 하는데, 이때 사용하는 컴파일러가 solc이다.

 

* Ganache

Ganache는 개발 단계에서 시뮬레이션 테스트 환경을 구성해주는 도구이다. 실제 이더리움 메인넷에서 테스트를 하기 위해서는 이더를 내야 하지만, Ganache를 사용하면 채굴 없이 가상 이더리움 환경에서 트랜잭션 제한 없이 테스트를 할 수 있다.

 

* TestNet

이더리움에서 제공하는 퍼블릭 테스트 네트워크를 TestNet이라고 한다. 테스트 네트워크는 실제 이더리움과 비슷하지만 실제 트랜잭션이 이루어지지는 않는다. 이더리움에는 현재 Ropsten, Kovan, Rinkeby 세 개의 퍼블릭 테스트 넷이 제공되고 있다.

 

* Framework: Truffle, Embar, Dapple

솔리디티 코드를 이더리움 네트워크에 올리기 위한 여러 복잡한 과정을 해결해주는 다양한 프레임워크들이 있다. 이 프레임워크들은 솔리디티 코드에 대해 테스트, 디버깅, 컴파일 배포를 제공한다.

 

댓글