---
title: "zkSync 개발 시작하는 방법 (2025)"
description: "첫 zkSync 애플리케이션 개발 시작하기."
---

# zkSync 개발 시작하는 방법 (2025)

Matter Labs는 이제 Scroll, Polygon과 함께 세계 [최초의 zero-knowledge EVM](https://www.alchemy.com/overviews/zkevm)을 운영하는 경쟁에 뛰어든 대표 주자를 보유하게 되었다 – [zkSync](https://www.alchemy.com/overviews/what-is-zksync-era) Era.

2023년 3월 출시된 zkSync Era는 [zero-knowledge proofs](https://www.alchemy.com/overviews/validity-proof-vs-fraud-proof)를 활용해 Ethereum 네트워크의 속도와 처리 능력을 확장하는 EVM 호환 ZK Rollup이다.

zkSync에서 개발하면 ETH와 [**ERC20 tokens**](https://www.alchemy.com/overviews/erc20-solidity)에 대한 낮은 가스비, 그리고 atomic swaps, limit orders, 네이티브 Layer-2 NFT 지원 등의 이점을 얻을 수 있다.

이 글에서는 zkSync Era가 무엇인지, 그리고 zkSync 퍼블릭 테스트넷에 스마트 컨트랙트를 다섯 단계로 배포하는 방법을 설명한다.

## **zkSync era란 무엇인가?**

zkSync Era는 Matter Labs의 새로운 Layer-2 솔루션으로, ZK-Proofs와 Ethereum Virtual Machine 기술을 결합해 [**Ethereum 메인넷의 처리량을 확장한다**](https://www.alchemy.com/overviews/ethereum-scaling-solutions). 두 기술을 병합함으로써 zkSync Era는 더 빠르고 안전한 Ethereum 트랜잭션을 가능하게 한다.

완전한 [EVM](https://www.alchemy.com/overviews/what-is-the-ethereum-virtual-machine-evm) 동등성에 더해, Era는 EIP-4337에서 처음 제안된 [account abstraction 개념](https://www.alchemy.com/overviews/what-is-account-abstraction)을 Ethereum 스택에 도입한다.

account abstraction을 사용하면 지갑이 스마트 컨트랙트가 되어 커스텀 서명 알고리즘, 스폰서 트랜잭션, 2단계 인증 같은 기능을 가질 수 있다.

## **zkSync era 개발을 시작하는 방법**

zkSync Era에서의 개발은 대부분 [web3 개발자가 Ethereum에 컨트랙트를 배포할 때 사용하는 것과 동일한 도구](https://www.alchemy.com/dapps/top/developer-tools)를 사용한다. 이 튜토리얼에서는 zkSync 퍼블릭 테스트넷에 스마트 컨트랙트를 배포하는 방법을 다룬다.

### **사전 준비 사항**

이 튜토리얼을 진행하려면 다음이 필요하다:

- Ethereum 지갑의 개인 키
- 테스트 ether
- 필요한 플러그인이 설치된 [Hardhat](https://www.alchemy.com/dapps/hardhat) Integrated Development Environment (IDE)
- 패키지 매니저 (NPM 또는 Yarn)
- [VScode](https://www.alchemy.com/dapps/vscode)
- Typescript에 대한 기본적인 이해

## **1. zkSync era용 IDE 설정**

먼저 프로젝트용 폴더를 생성한다.

VScode(또는 기기의 터미널)를 열고 다음을 입력한다:

그다음, 다음 명령어로 npm을 초기화한다: **npm init -y**

**-y** 플래그는 **_package.json_** 파일의 모든 입력 필드를 기본값으로 미리 채워 시간을 절약한다.

npm과 프로젝트 폴더가 모두 설정되었으니, 이제 필요한 dependency를 설치한다.‍

VScode 터미널에서 다음을 입력한다:

**명령어 설명:**

- **$ npm i -D**: install 명령어의 별칭. -D 플래그는 모든 패키지를 개발자 dependency로 저장한다.
- $ typescript ts-node: Typescript와 Node.js용 Typescript 실행 엔진 설치.
- $ ethers@^5.7.2 zksync-web3@^0.13.1: 컨트랙트 배포 및 상호작용을 돕는 두 개의 라이브러리.
- $ hardhat: 사용 중인 IDE.
- $ @matterlabs/hardhat-zksync-solc @matterlabs/hardhat-zksync-deploy: 스마트 컨트랙트 컴파일 및 배포를 돕는 두 개의 Hardhat 플러그인.

다음은 Hardhat 프로젝트 초기화이다.‍

터미널에서 다음을 입력한다:

**npx hardhat init**

'**Create a TypeScript Project**'를 선택하고 엔터를 눌러 다음 필드들을 기본값으로 미리 채운다.

프로젝트 폴더 구조는 다음과 같아야 한다:

contracts 폴더에서 기본적으로 자동 생성되는 Lock.sol 컨트랙트는 필요하지 않으므로 삭제한다.‍

IDE 설정의 마지막 단계는 **hardhat.config.ts** 파일로 이동하는 것이다.

**hardhat.config.ts** 파일은 배포를 위한 다음 파라미터들을 정의하는 '커맨드 센터'이다:

- zkSync 컴파일러 버전
- 컨트랙트가 배포될 체인
- 컨트랙트를 작성할 [Solidity](https://www.alchemy.com/overviews/solidity-smart-contract) 컴파일러의 버전.

**hardhat.config.ts** 파일의 내용을 삭제하고 다음으로 교체한다:

이제 IDE 설정이 완료되었으며, 다음 단계는 스마트 컨트랙트를 생성하는 것이다.

## **2. 스마트 컨트랙트 생성**

사람의 이름과 나이를 등록할 컨트랙트이다.

프로젝트 디렉토리의 contacts 폴더로 이동해 **Registry.sol**이라는 새 파일을 생성한다.‍

그다음, 다음의 스마트 컨트랙트 코드를 파일에 복사해 붙여넣는다:

배포 전에 컨트랙트를 컴파일해야 한다. 터미널에서 다음을 입력한다:

**npx hardhat compile**

## **3. zkSync era용 지갑 설정**

zkSync Era는 기존 Ethereum 지갑을 지원하므로 새 지갑을 생성할 필요는 없다.

따라서 [Metamask](https://www.alchemy.com/dapps/metamask) 같은 기존 지갑을 사용할 수 있다.

**참고: 배포 절차에서는 개인 키를 내보내야 하므로, 투자금이나 저축이 보관된 개인 Ethereum 지갑을 사용하는 것은 권장하지 않는다.**

## **4. 테스트 Goerli ETH 받고 zkSync era로 브릿지하기**

컨트랙트를 배포하려면 zkSync Era 테스트넷의 테스트 ether가 필요할 수 있다.

**테스트 ether를 받으려면 배포자 지갑에서 zkSync Era 상의 인스턴스로 Goerli ETH를 브릿지한다.**

- 이를 위해 [Alchemy의 Goerli faucet](https://goerlifaucet.com/)으로 이동해 Goerli 테스트넷의 ether를 받는다.

- 진행하기 전에 무료 Alchemy 계정을 생성한다.

- 그다음 Metamask를 열고 지갑 주소를 클릭해 복사한다.

- Goerli faucet 웹사이트에서 지갑 주소를 붙여넣고 **Send Me ETH**를 클릭한다.

다음으로, zkSync Era의 [bridge](https://goerli.portal.zksync.io/bridge)로 이동한다.

"Connect via a browser wallet Metamask"를 클릭한다.

컨트랙트 배포에 사용할 지갑을 선택한다.

**MAX**를 클릭하거나(원하는 금액을 입력해도 되지만, 최소 0.1 [gETH](https://www.alchemy.com/overviews/what-is-a-geth-node-and-how-to-run-one) 이상이어야 함) **Deposit**을 클릭한다.

**참고**: 우측 하단 필드에 **"zkSync Era Goerli"**라고 표시되는지 확인한다.

브릿지가 완료되기를 기다리는 동안, 배포 스크립트를 작성해 배포를 마무리한다.

## **5. 배포 스크립트 생성 및 개인 키 내보내기**

다음으로, 배포 스크립트를 생성하고 Metamask에서 개인 키를 내보내 Private Key를 복사한 후 스마트 컨트랙트를 배포한다.

방법은 다음과 같다:

#### **배포 스크립트 생성**

VSCode로 돌아가서 scripts 폴더의 이름을 **deploy**로 변경하고, 그 안에 **deploy.ts**라는 파일을 생성한다.

그다음, 다음 코드를 파일에 복사한다:

"//"로 표시된 주석은 코드의 로직을 설명한다.

#### **MetaMask에서 개인 키 내보내기**

Metamask에서 브릿지에 사용했던 지갑을 열고 개인 키를 내보낸다.

세로 점 세 개를 클릭한 다음 Account details, 그다음 **Export private key**를 클릭한다.

비밀번호를 입력하고 표시된 문자열을 복사한다.

#### **개인 키 붙여넣고 스마트 컨트랙트 배포**

deploy.ts 파일로 돌아가 다음 줄을 찾는다:

**  const wallet = new Wallet\("&lt;WALLET-PRIVATE-KEY&gt;"\);**

**&lt;WALLET-PRIVATE-KEY&gt;** 자리에 개인 키를 붙여넣는다.

큰따옴표가 삭제되지 **않도록** 주의한다.

마지막으로 VScode의 터미널로 이동해 다음을 입력한다: **npx hardhat deploy-zksync**

## **6. 블록 탐색기를 통한 스마트 컨트랙트 검증**

zkSync Era의 테스트넷 블록 탐색기를 사용해 배포된 컨트랙트를 검증한다.

[블록 탐색기](https://goerli.explorer.zksync.io/)로 이동한다. 검색창에 배포된 컨트랙트의 주소를 붙여넣는다.

컨트랙트를 찾으면 **Contract** 탭을 클릭한 다음 **Verify Smart Contract**를 클릭한다.

그다음, 필요한 세부 정보를 입력한다:

**Contract Name**은 **"Registry"**여야 한다.

**Zksolc version** - v1.3.

Solc version - 0.8.17.

**Zksolc Version**과 **Solc Version** 모두 **hardhat.config.ts** 파일에서 확인할 수 있다.

Enter the [Solidity](https://www.alchemy.com/overviews/solidity) Contract Code 필드에 Registry.sol 파일의 내용을 붙여넣는다.

**Verify Smart Contract**를 클릭해 과정을 마무리한다.

‍**7. ZkSync Era에 배포된 컨트랙트와 상호작용하기**

블록 탐색기에서 다시 주소로 컨트랙트를 찾아 **Contract** 탭을 클릭한다.

이번에는 블록 탐색기에 두 개의 새 필드가 표시되어야 한다:

1. getter 함수를 위한 **Read**
1. setter 함수를 위한 Write

**personInfo** 매핑의 가시성이 _public_으로 정의되어 있으므로, 이에 대한 getter 메서드가 자동으로 생성된다.

배포자 지갑이 탐색기에 연결되어 있는지 확인한다. **addPerson**을 클릭한다.

섹션이 확장되고 두 개의 새 필드가 나타난다 - 하나는 사람의 이름을 정의하고, 다른 하나는 나이를 정의한다.‍

입력을 마친 후 **Write**를 클릭하고 트랜잭션을 확인한다.

트랜잭션이 확인된 후, personInfo를 클릭하고 방금 추가한 사람의 이름을 입력한다.

GUI는 추가된 사람의 나이를 반환해야 한다.‍
