솔리디티 코스 #0: EVM과 보안까지 잡는 Solidity 입문
Solidity의 역할, 역사, 개발 환경(Remix·Hardhat·Truffle), 설치·실행 절차와 보안 포인트를 기초부터 안내합니다. 첫 학습에 필요한 실습 코드와 체크리스트 포함.
이 글을 통해 Solidity의 목적과 개발 흐름을 빠르게 이해하고, 초보 단계에서 마주치는 설치·실행·보안 의사결정을 스스로 할 수 있게 됩니다.

왜 Solidity인가
- Solidity는 이더리움과 EVM 호환 체인에서 스마트 컨트랙트를 작성하기 위한 대표 언어입니다.
- 자바스크립트·파이썬·C++에서 영감을 받은 문법으로, 웹 개발자도 비교적 쉽게 접근할 수 있습니다.
- 한 번 배워두면 Polygon, BNB Chain, Avalanche 등 다수의 EVM 네트워크에 응용이 가능합니다.
EVM 호환성의 의미
EVM은 바이트코드 수준의 실행 환경입니다. Solidity로 작성한 코드는 컴파일되어 EVM 바이트코드로 변환되며, 이 바이트코드는 여러 체인에서 동일한 규칙으로 동작합니다. 즉 도구·테스트 전략을 공유할 수 있다는 이점이 생깁니다.
핵심 개념 한눈에
- 정적 타입:
uint,address,bool,string등 타입을 명시합니다. 이는 컴파일 단계에서 오류를 조기에 발견하는 데 유리합니다. - 이벤트(Event): 온체인 동작을 오프체인에서 추적할 수 있도록 로그를 발생시킵니다.
- 보안 지향 문법:
modifier,require,assert로 사전조건·불변식을 코드로 명확히 표현합니다. - 불변 배포 특성: 컨트랙트는 배포 후 변경이 어렵습니다. 초기 설계와 테스트, 업그레이드 패턴(프록시 등)의 이해가 필수입니다.
핵심 전제: 배포 전 테스트가 곧 비용 절감입니다. 온체인 버그는 되돌리기 어렵고, 신뢰에도 직접적 타격을 줍니다.
개발 환경 선택하기
아래 도구는 목적과 팀 규모에 따라 선택하면 됩니다. 로컬 자동화가 필요하면 Hardhat, 빠른 실험에는 Remix가 유리합니다.
| 도구 | 주요 용도 | 강점 |
|---|---|---|
| Remix IDE | 브라우저 실습·빠른 프로토타입 | 설치 불필요, 즉시 실행 |
| Hardhat | 로컬 개발·테스트·배포 자동화 | 플러그인 생태계, 스크립팅 유연성 |
| Truffle | 배포·네트워크 관리 | 전통적 워크플로, 마이그레이션 스크립트 |
팁: 처음에는 Remix로 문법과 동작을 익히고, 팀 개발 또는 실제 프로젝트로 넘어갈 때 Hardhat 시작하기 가이드를 따르는 식으로 전환하면 학습 곡선이 완만합니다.
[IMAGE: Solidity 개발 스택(IDE→테스트→배포)의 흐름도]
첫 설치와 실행
Solidity 자체 컴파일러(solc)는 전역 설치하거나, 프레임워크(예: Hardhat)가 내부적으로 버전을 관리하도록 맡길 수 있습니다.
전역 컴파일러 설치
npm install -g solc
Hardhat 기반 프로젝트 생성
npm install --save-dev hardhat
npx hardhat init
컴파일·배포·테스트 실행 예시
npx hardhat compile
npx hardhat run scripts/deploy.js --network localhost
npx hardhat test
주의: 네트워크 명세(예:
localhost,sepolia,polygon)와 컴파일러 버전은 프로젝트마다 다를 수 있으니hardhat.config.js에서 명확히 고정하세요. 팀 협업 시에는package-lock.json/pnpm-lock.yaml을 커밋해 환경 재현성을 확보합니다.
보안과 유지보수 포인트
- 입력 검증:
require로 권한·범위·상태를 체크하여 예상치 못한 호출을 방지합니다. - 정수 연산: 오버플로/언더플로는 최신 컴파일러에서 기본 체크되지만, 의도를 담은 검증 로직을 병행하세요.
- 소유권·권한: 관리자 함수는
onlyOwner등modifier로 보호하고, 멀티시그나 타임락으로 운영 리스크를 낮춥니다. - 이벤트 설계: 자산 이동·권한 변경 등 중요한 상태 변화에는 반드시 이벤트를 기록해 투명성을 높이세요.
- 테스트 범위: 단위 테스트 + 시뮬레이션(포크 테스트)로 체인 상태 변화까지 검증하면 배포 후 놀랄 일이 줄어듭니다.
작은 역사, 큰 맥락
Solidity는 2014년 개념 제안, 2015년 공식 발표를 거쳐 지속적으로 개선되어 왔습니다. 오늘날 DeFi·NFT·DAO 등 다양한 응용에서 사실상 표준 언어로 자리 잡았으며, 언어 자체도 보안과 최적화를 중심으로 발전 중입니다.