무료로 Solidity를 배우는 가장 좋은 방법 (2025)
작성자 Frederik B
Solidity는 스마트 컨트랙트를 작성하기 위한 객체 지향 고급 언어입니다. Solidity를 배우면 스마트 컨트랙트와 탈중앙화 애플리케이션을 만들 수 있습니다.
이 글에서는 Solidity를 배우는 가장 일반적인 방법을 다루고, Ethereum 개발자가 되기 위해 학습해야 할 주요 Solidity 개념을 소개합니다.
Solidity 학습이 중요한 이유
Ethereum과 EVM 호환 블록체인에서 스마트 컨트랙트를 작성하는 프로그래밍 언어인 Solidity는 블록체인 개발자에게 가장 중요한 기술 중 하나입니다. Ethereum과 다른 스마트 컨트랙트 플랫폼을 중심으로 한 생태계가 성장함에 따라 Solidity 개발자에 대한 수요도 늘고 있습니다.
시니어 Solidity 개발자의 평균 연봉은 토큰 기반 지분이나 스톡옵션을 제외하고 연 120,000달러에서 225,000달러입니다. cryptocurrencyjobs.co에 따르면, 미국 Solidity 개발자의 평균 기본급은 127,500달러이며, 최저 기본급은 80,000달러, 최고 기본급은 180,000달러입니다. 반면 원격 근무 개발자는 연 111,000~200,000달러를 받습니다. 미국 개발자 평균 연봉인 103,000달러와 비교하면, 블록체인 전문성에 대한 수요가 높다는 것을 알 수 있습니다.
다음은 지역별 Solidity 개발자의 연간 급여 구조입니다 (미국 달러 기준):
- 북미 - $125K-$200K
- 유럽 - $80K-$135K
- 아시아 - $46K-$116K
- 오세아니아 - $85K-$120K
- 남미 - $49K-$150K
- 아프리카 - $49K-$75K
- 원격 근무 - $111K-$200K
Solidity를 배우면 상당한 경제적 기회를 얻을 수 있을 뿐 아니라, 세상에 큰 영향을 미칠 수 있는 훌륭한 앱을 만들 수도 있습니다. 실제로 Ethereum에만 금융 포용성부터 지속 가능한 에너지에 이르기까지 다양한 목적을 가진 앱이 약 3,000개 존재합니다.
Solidity를 배우는 방법
Solidity를 배우는 방법에는 온라인 강의, 부트캠프, 튜토리얼, 그리고 Hardhat 같은 인기 Solidity 개발 도구의 문서 읽기 등 여러 가지가 있습니다.
온라인 강의로 Solidity 배우기
튜토리얼보다 더 체계적인 구조와 안내가 필요하다면 온라인 강의가 Solidity를 배우기에 좋은 방법입니다. Alchemy University의 무료 Solidity Development Course를 비롯해 다양한 고품질 강의가 제공되고 있습니다.
튜토리얼은 자기 주도적으로 진행되는 반면, 온라인 강의는 정해진 수업과 마감 기한이 있어 학습자가 진도를 유지하도록 시간 제약을 통해 동기를 부여합니다. 또한 Solidity 강의에는 학습 진행 상황을 확인할 수 있는 퀴즈와 과제가 포함되는 경우가 많습니다.
Ethereum 부트캠프로 Solidity 배우기
체계적이고 몰입도 높은 환경에서 Solidity와 다른 블록체인 개발 기술을 배우고 싶다면 Solidity 부트캠프가 적합한 선택일 수 있습니다. 블록체인 부트캠프는 실무 준비가 된 블록체인 개발자가 되도록 돕는 집중적인 실습 교육을 제공합니다.
Alchemy는 ChainShot을 인수한 후, ChainShot의 7주, 3,000달러짜리 Ethereum Developer Bootcamp를 재구성하여 Alchemy University를 통해 무료로 제공하고 있습니다. 전문 강사와 열의 있는 동료들과 함께 Solidity를 배우고 싶다면 Alchemy University의 Ethereum 부트캠프 대기 명단에 자리를 확보하세요.
개발이 처음인 개발자라면, Ethereum 부트캠프를 시작하기 전에 Alchemy University의 3주 JavaScript 크래시 코스를 선수 과정으로 듣는 것이 좋습니다.
튜토리얼로 Solidity 배우기
스스로 학습을 주도하며 자신의 속도에 맞춰 배우고 싶다면 튜토리얼이 Solidity를 배우기에 좋은 방법입니다. 초급부터 고급까지 다양한 수준의 고품질 Solidity 튜토리얼이 온라인에 공개되어 있습니다.
공식 Ethereum developer resources에는 "Solidity" 태그가 붙은 튜토리얼이 53개 있으며, 스마트 컨트랙트의 기초부터 gas 최적화와 안전한 서명 같은 고급 주제까지 다룹니다.
배워야 할 주요 Solidity 개념
학습 방법을 선택했다면, 이제 Solidity로 코드를 작성하는 법을 배울 차례입니다. 효과적인 코드를 작성하려면 이해해야 할 핵심 Solidity 개념이 몇 가지 있습니다.
Solidity ABI
Application Binary Interface (ABI)는 서로 다른 두 소프트웨어가 상호작용할 수 있도록 하는 일련의 규칙입니다. Solidity의 맥락에서 ABI는 스마트 컨트랙트끼리, 그리고 지갑 같은 외부 소프트웨어와도 상호작용할 수 있게 해줍니다.
ABI를 사용하면 소스 코드 보유 여부와 관계없이 어떤 컨트랙트와도 상호작용하는 코드를 작성할 수 있습니다. 이는 ABI가 컨트랙트 간에 전달되는 데이터를 인코딩하고 디코딩하는 데 필요한 모든 정보를 포함하고 있기 때문에 가능합니다.
스마트 컨트랙트
스마트 컨트랙트는 Ethereum 블록체인에서 실행되며 일정한 조건이 충족되면 특정 동작을 수행하는 코드입니다. 스마트 컨트랙트는 디지털 토큰, 탈중앙화 애플리케이션 등을 만드는 데 사용될 수 있습니다.
스마트 컨트랙트의 일반적인 사용 사례는 ERC20 토큰을 만드는 것이며, 이는 단 몇 줄의 코드로 가능합니다. 더 복잡한 스마트 컨트랙트로는 토큰 스왑, 수익 파밍, 합성 자산 등이 있습니다. 이러한 컨트랙트는 Solidity 컴파일러를 통해 컴파일되며, 컨트랙트를 배포하는 데 사용되는 바이트코드를 생성합니다.
ERC20 토큰
ERC20 토큰은 Ethereum 블록체인에서 실행되는 디지털 자산의 한 유형입니다. 원자재나 법정화폐 같은 실물 자산을 나타내는 데 자주 사용됩니다.
ERC20 토큰은 Ethereum에서 가장 흔한 유형의 디지털 자산입니다. ERC20 토큰은 작성하기 가장 쉬운 컨트랙트 유형 중 하나이기도 하므로, 이를 만드는 법을 배우는 것은 중요한 기술입니다.
컨트랙트 인터페이스
인터페이스는 컨트랙트가 갖춰야 할 함수를 지정하는 방법입니다. 인터페이스를 사용하면 쉽게 재사용하고 확장할 수 있는 컨트랙트를 만들 수 있습니다. 예를 들어 토큰 컨트랙트를 위한 인터페이스를 만들면, 이 인터페이스를 구현하는 모든 컨트랙트를 토큰으로 사용할 수 있습니다.
상속
상속은 Solidity에서 코드를 재사용하는 방법입니다. 상속을 사용하면 "부모" 컨트랙트의 모든 코드를 물려받는 "자식" 컨트랙트를 만들 수 있습니다. 이를 통해 개발자는 코드 중복을 피하고 스마트 컨트랙트 유지보수를 훨씬 쉽게 할 수 있습니다.
상속은 객체 지향 프로그래밍의 중요한 개념이며, Solidity를 강력하게 만드는 요소 중 하나입니다. 쉽게 확장하고 수정할 수 있는 표준화된 컨트랙트를 만드는 법을 배우는 것은 중요한 Solidity 학습 과정입니다.
함수
다른 프로그래밍 언어와 마찬가지로 함수는 Solidity의 핵심 요소입니다. Solidity 함수는 입력을 받아 어떤 동작을 수행한 뒤 결과를 반환하는 코드 조각입니다.
함수는 토큰 전송부터 데이터 저장에 이르기까지 다양한 동작을 수행하도록 Solidity 스마트 컨트랙트에 작성될 수 있습니다. 재사용을 목적으로 만든 함수들의 모음을 라이브러리라고 합니다.
코딩의 기본 원칙 중 하나는 "반복하지 마라(Don't Repeat Yourself)"를 의미하는 "D.R.Y. 원칙"입니다. 이 원칙은 개발자가 같은 코드를 두 번 작성해서는 안 된다는 것을 말합니다. 대신 개발자는 함수를 한 번만 작성하고, 그 동작이 필요할 때마다 해당 함수를 호출해야 합니다.
함수 가시성
Solidity 함수에서 주목해야 할 중요한 점은 가시성 설정이 있다는 것입니다. 가시성은 누가 그 함수를 볼 수 있고 실행할 수 있는지를 결정합니다. Solidity에는 public, external, internal, private의 네 가지 가시성 수준이 있습니다.
- Public 함수는 누구나 보고 실행할 수 있습니다.
- External 함수는 누구나 볼 수 있지만 다른 컨트랙트에서만 실행할 수 있습니다.
- Internal 함수는 같은 컨트랙트 내의 다른 함수만 보고 실행할 수 있습니다.
- Private 함수는 해당 컨트랙트 자신만 보고 실행할 수 있습니다.
Call 함수
call 함수를 사용하면 다른 컨트랙트의 코드를 실행할 수 있습니다. 이는 Ethereum에서 컨트랙트들이 서로 상호작용하는 방식입니다.
call 함수를 사용하면 소스 코드 보유 여부와 관계없이 어떤 컨트랙트와도 상호작용하는 코드를 작성할 수 있습니다. 이는 ABI가 컨트랙트 간에 전달되는 데이터를 인코딩하고 디코딩하는 데 필요한 모든 정보를 포함하고 있기 때문에 가능합니다.
Delegatecall 함수
delegatecall 함수는 call 메서드와 비슷하지만 한 가지 중요한 차이가 있습니다. 바로 호출자의 컨텍스트에서 코드를 실행한다는 점입니다. 즉, 호출된 컨트랙트가 발생시킨 스토리지 변경 사항은 호출자의 스토리지에 반영됩니다.
delegatecall 함수를 사용하면 다른 컨트랙트가 재사용할 수 있는 컨트랙트를 작성할 수 있습니다. 예를 들어 인터페이스를 구현한 컨트랙트를 작성하면, 다른 컨트랙트가 그 인터페이스를 사용하기 위해 해당 컨트랙트를 delegatecall 할 수 있습니다.
Modifier
Modifier는 함수와 비슷하지만 몇 가지 중요한 차이가 있습니다. 첫째, modifier는 함수에만 사용할 수 있습니다. 둘째, modifier는 함수가 실행되기 전에 호출됩니다. modifier의 예로는 컨트랙트가 Ether를 받을 수 있게 해주는 payable이 있습니다.
Modifier를 사용하면 실제 코드를 건드리지 않고도 함수의 동작을 바꿀 수 있습니다. 예를 들어 modifier는 함수를 실행하기 전에 사용자의 잔액이 충분한지 확인하거나, 함수가 호출될 때 트리거되는 이벤트를 추가하는 데 사용할 수 있습니다.
배열
배열은 같은 데이터 타입의 요소를 고정된 크기로 저장하며, 이 요소들은 인접한 메모리 위치에 연속적으로 저장되는 선형 데이터 구조입니다. 배열은 고정 크기일 수도 있고 동적 크기일 수도 있습니다. 동적 배열은 선언 시점에 크기가 미리 정해지지 않는 반면, 고정 배열은 크기가 미리 정해져 있습니다.
데이터 그룹을 순회해야 하는 경우(예: 루프 사용) 배열을 사용합니다. 데이터 집합을 순회할 필요 없이 알고 있는 키를 기준으로 값을 조회할 수 있다면 매핑 사용을 고려하세요.
Struct
Struct는 Solidity 컨트랙트에서 데이터를 저장하는 방법입니다. Struct는 여러 속성을 가진 더 복잡한 데이터 타입을 만드는 데 유용합니다.
매핑
매핑은 Solidity 컨트랙트에서 데이터를 저장하는 방법입니다. 매핑은 배열과 비슷하지만, 키가 정수뿐 아니라 어떤 타입이든 될 수 있습니다. 이 특성 덕분에 매핑은 다재다능하고 강력합니다. 매핑을 사용하면 유연하고 사용하기 쉬운 방식으로 컨트랙트에 데이터를 저장할 수 있습니다.
이벤트
이벤트는 특정 조건이 충족되었을 때 코드 실행을 트리거하는 방법입니다. 예를 들어 개발자는 사용자가 토큰을 구매했을 때나 블록체인에서 트랜잭션이 확정되었을 때 트리거되는 이벤트를 작성할 수 있습니다.
Solidity 이벤트를 사용하면 개발자는 실제 세계에서 일어나는 사건에 반응해 실행되는 코드를 작성할 수 있습니다. 이는 많은 앱이 조건이 충족되었을 때 이메일이나 SMS를 보내는 등 실제 세계와 상호작용할 수 있는 방식입니다.
Require (오류 처리)
"require" 키워드는 require, assert, _revert_라는 세 가지 특수 함수 중 하나입니다. Require는 조건이 참인지 확인하고, 참이 아니면 트랜잭션을 되돌리고 오류 메시지를 반환합니다.
_require_를 사용하면 컨트랙트에서 오류가 발생하는 것을 방지할 수 있습니다. 예를 들어 _require_를 사용해 사용자의 잔액이 구매를 하기에 충분한지 확인하거나, 트랜잭션을 보내기 전에 주소가 유효한지 확인할 수 있습니다.
업그레이드 가능한 스마트 컨트랙트
업그레이드 가능한 스마트 컨트랙트는 컨트랙트를 재배포할 필요 없이 업그레이드할 수 있는 컨트랙트 유형입니다. 업그레이드 가능한 스마트 컨트랙트를 사용하면 이미 블록체인에 존재하는 데이터나 코드에 영향을 주지 않으면서 컨트랙트를 배포한 후에도 변경 사항을 적용할 수 있습니다.
프록시 컨트랙트
프록시 컨트랙트는 함수 호출을 최신 구현체로 전달하도록 설계된 업데이트 가능한 라우팅 컨트랙트입니다.
이 방식을 사용하면 프로토콜은 모든 사용자가 새 주소로 코드를 업데이트할 필요 없이 구현체를 업그레이드할 수 있습니다. 프록시를 사용하면 개발자는 함수를 찾을 수 있는 고정된 주소를 가질 수 있습니다.
프록시 컨트랙트에는 팀이 함수 라우팅 경로를 새 구현 컨트랙트 주소로 업데이트하기 위해 호출할 수 있는 업데이트 함수가 있습니다.
Multisig 컨트랙트
Multisig 컨트랙트는 코드를 실행하는 데 두 개 이상의 서명이 필요한 컨트랙트 유형입니다. Solidity multisig 컨트랙트는 트랜잭션이 실행되기 전에 여러 사람의 승인을 요구하고 싶을 때 유용합니다.
Multisig 컨트랙트는 일정 기간 동안 지출할 수 있는 금액을 제한하려는 경우에도 유용합니다. 예를 들어 1,000달러가 넘는 모든 트랜잭션에 두 개의 서명을 요구하는 multisig 컨트랙트를 사용할 수 있습니다.
재진입 공격
재진입 공격은 한 컨트랙트가 다른 컨트랙트를 호출하고, 그 두 번째 컨트랙트가 첫 번째 컨트랙트가 실행을 마치기 전에 다시 첫 번째 컨트랙트 또는 다른 신뢰할 수 없는 컨트랙트를 호출할 때 Solidity 컨트랙트에서 발생할 수 있는 공격 유형입니다.
재진입 공격은 컨트랙트의 취약점을 악용하는 데 사용될 수 있습니다. 예를 들어 공격자는 재진입 공격을 이용해 컨트랙트에서 모든 Ether를 빼낼 수 있습니다.
Solidity를 배우는 가장 좋은 방법
목표가 무엇이든, 자신의 필요에 맞는 Solidity 학습 방법이 있습니다. 빠르고 쉽게 시작하고 싶다면 튜토리얼이 좋은 선택입니다. Solidity 소개 자료도 확인해 보세요. 더 체계적인 구조와 안내가 필요하다면 온라인 강의가 더 적합할 수 있습니다. 몰입감 있는 실습 경험을 원한다면 부트캠프가 옳은 선택일 수 있습니다.
학습 방법을 선택했다면, 스마트 컨트랙트, 함수, 이벤트 등 반드시 익혀야 할 중요한 개념이 여럿 있습니다. 이러한 개념을 이해하면 능숙한 Solidity 개발자가 되는 길에 잘 들어선 것입니다.
관련 개요

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


