---
title: "OpenZeppelin이란 무엇인가? 개발자 가이드"
description: "Web3 프로젝트를 위한 보안"
---

## OpenZeppelin이란?

<ImageBlock
  src="https://media.alchemy.com/1704159586-openzeppelin-logo.png"
  alt="OpenZeppelin 로고"
  width={500}
  height={250}
  priority
/>

[OpenZeppelin](https://www.alchemy.com/dapps/openzeppelin)은 암호화폐 사이버보안 기술 및 서비스 회사다. 안전한 스마트 컨트랙트를 구축하기 위한 오픈소스 프레임워크를 제공하며, 대형 DeFi 및 NFT 프로젝트를 대상으로 포괄적인 보안 감사도 수행한다. 클라이언트로는 Ethereum Foundation, Coinbase, Brave 같은 주요 프로젝트가 있다.

감사 외에도 OpenZeppelin은 스마트 컨트랙트 개발자에게 보안 도구 라이브러리를 제공함으로써 DeFi 생태계 전반의 보안 수준을 높이려 한다. 이 제품들을 통해 개발자는 보안보다 배포에 더 집중할 수 있게 되고, 그 결과 더 빠른 출시와 더 높은 신뢰성이 가능해진다.

현재 OpenZeppelin의 제품은 3,000개 이상의 공개 프로젝트에서 사용되고 있다.

## 스마트 컨트랙트란?

스마트 컨트랙트는 블록체인에 저장되고 실행되는 프로그램이다. 실제 계약서처럼 합의사항과 규칙을 기술하지만, 이를 자동으로 집행할 수도 있다.

이런 "스마트"한 동작이 가능한 이유는 합의 조건이 블록체인 상에서 코드로 작성되고 실행되기 때문이다. 가장 널리 쓰이는 스마트 컨트랙트 플랫폼인 Ethereum에서 스마트 컨트랙트는 일반 계정과 마찬가지로 자체 잔액을 가지며 트랜잭션을 생성할 수 있다.

다른 사용자들도 이 스마트 컨트랙트로부터 자금을 보내거나 받을 수 있다. 일반 계약과 달리 이런 스마트 컨트랙트는 일반적으로 되돌릴 수 없으며 한 번 배포되면 삭제할 수 없다.

스마트 컨트랙트는 개발자가 탈중앙화 애플리케이션과 토큰을 만들 수 있게 해주는 기반이다. 탈중앙화 금융에 필요한 인프라 상당수가 스마트 컨트랙트를 기반으로 하며, 이를 통해 보험이나 대출 같은 복잡한 금융 프로세스가 가능해진다.

## OpenZeppelin이 왜 필요한가?

보안이 모든 탈중앙화 애플리케이션의 핵심이라는 것은 말할 필요도 없다.

이전에는 프로젝트 팀들이 각자 자체적으로 보안 인프라를 작성해야 했고, 그 결과 개발자들이 매번 "바퀴를 재발명"하는 일이 흔했다.

스마트 컨트랙트를 처음부터 작성하는 것은 학습 목적으로는 좋을 수 있지만, 프로덕션 환경에서는 위험한 관행이 될 수 있다. 스마트 컨트랙트가 안전하려면 견고해야 하는데, 이는 진공 상태에서는 달성할 수 없다. 신뢰성을 확보하려면 시간과 실사용이 필요하며, 이는 특히 소규모 프로젝트에는 처음부터 갖추기 어려운 조건이다.

<ImageBlock
  src="https://media.alchemy.com/1704159809-cyber-security.jpg"
  alt="스마트 컨트랙트 보안 위험을 나타내는 사이버 보안 컨셉 아트"
  width={1600}
  height={955}
/>

DeFi 보안에 대한 명확한 표준이 없다 보니 어떤 프로젝트가 안전한지 판별하기가 어렵다. 프로토콜마다 각자의 컨트랙트 구현 방식을 가지고 있어, 특정 프로토콜이 안전한지 검증하거나 인식하는 것조차 쉽지 않다.

더불어 DeFi 프로젝트가 큰 수익을 낼 수 있다는 점에서, 개발자들이 빠른 출시를 위해 보안을 뒤로 미루는 일도 드물지 않다.

대표적인 예가 이제는 악명 높아진 일드 파밍 열풍의 주인공, YAM Finance다. 이 프로젝트는 값비싼 보안 감사를 생략하기로 했다. YAM Finance 프로토콜은 단 10일 만에 만들어졌고, 출시 후 48시간 만에 이미 6억 달러 상당의 자산이 몰렸다.

하지만 스마트 컨트랙트 프로토콜에서 보안 취약점이 발견되면서 서비스를 중단해야 했다. 사용자 자금이 걸려 있는 만큼, 보안을 소홀히 하면 재앙으로 이어질 수 있다.

보안 감사가 잠재적 보안 취약점을 최소화하는 데 핵심적이긴 하지만, YAM Finance의 사례에서 보듯 그것만으로는 충분하지 않다. YAM처럼 빠르게 만들어진 프로젝트는 비용 문제로 보안 감사를 받는 경우가 드물기 때문에, 개발자가 처음부터 적절한 보안 도구를 갖추는 것이 중요해진다.

## OpenZeppelin은 어떤 기능을 제공하는가?

OpenZeppelin은 개발자에게 즉시 사용 가능한 보안 도구와 인프라를 제공함으로써 이런 사고를 방지한다. 이 제품들 덕분에 스마트 컨트랙트 개발자는 보안 인프라를 매번 새로 만드는 대신 배포에 계속 집중할 수 있다.

OpenZeppelin 팀은 이제 견고한 보안 기반을 갖추는 데 "수개월이 아니라 수분이면 된다"고 말하곤 한다.

OpenZeppelin에는 두 가지 주요 제품, Contracts와 Defender가 있다.

OpenZeppelin의 _Contracts_는 Ethereum 및 다른 블록체인을 위한 [안전한 스마트 컨트랙트 라이브러리](https://docs.openzeppelin.com/contracts/4.x/)로, 개발자는 이를 자유롭게 사용할 수 있다.

이 오픈소스 템플릿들은 커뮤니티 검토를 거치며 최신 보안 관행을 따른다. OpenZeppelin이 이를 실현하는 방법 중 하나는 버그 바운티 헌터 프로그램으로, 커뮤니티 구성원이 OpenZeppelin 컨트랙트의 보안 취약점을 찾으면 보상을 받을 수 있다.

감사를 거친 OpenZeppelin 컨트랙트를 재사용함으로써 프로젝트는 공격 표면(attack surface area)을 크게 줄일 수 있다. 공격 표면이란 이론적으로 공격자가 침투할 수 있는 지점의 수를 의미한다. 나아가 모듈성과 표준화 덕분에 협업과 감사도 훨씬 쉬워진다.

<ImageBlock
  src="https://media.alchemy.com/1704159957-openzeppelin-contracts-wizard.png"
  alt="스마트 컨트랙트 코드를 생성하는 OpenZeppelin Contracts Wizard 인터페이스"
  width={1460}
  height={1054}
/>

OpenZeppelin은 Contracts Wizard라는 대화형 컨트랙트 생성기도 제공한다. 개발자는 Wizard를 사용해 OpenZeppelin의 컴포넌트로 컨트랙트를 만들 수 있다. 또한 Wizard에서는 컨트랙트 유형(예: [ERC20](https://www.alchemy.com/overviews/erc20-solidity)), 파라미터, 기능을 지정할 수 있다.

작업이 끝나면 Wizard는 배포 가능한 형태의 코드를 생성해 준다.

다음은 OpenZeppelin이 제공하는 다양한 내장 기능 중 몇 가지 예다:

- **Access Control**: OpenZeppelin의 access control을 사용하면 개발자는 시스템 내에서 누가 무엇을 할 수 있는지 손쉽게 설정할 수 있다. 이 인프라는 모든 프로젝트의 보안에 있어 핵심적인데, 여기서 실패가 발생하면 [시스템 자체가 탈취될 수도 있다](https://blog.openzeppelin.com/on-the-parity-wallet-multisig-hack-405a8c12e8f7/).

OpenZeppelin Contracts는 단순한 단일 관리자 소유 방식과 유연한 [Role-Based Access Control](https://en.wikipedia.org/wiki/Role-based_access_control) 기능을 모두 제공한다. 이 기능들을 이용해 개발자는 누가 토큰을 발행하고, 제안에 투표하고, 전송을 동결하는지 등 보호된 함수에 대한 권한을 안전하게 지정할 수 있다.

- **Governance**: OpenZeppelin의 Governor 컨트랙트는 즉시 사용 가능한 거버넌스 프로토콜을 제공한다. 온체인 거버넌스는 진정으로 탈중앙화된 프로토콜에 필수적이며, 이미 많은 프로토콜에서 핵심 구성요소가 되었다. 커뮤니티 거버넌스는 파라미터 조정, 스마트 컨트랙트 업그레이드, 다른 프로토콜과의 연동, 트레저리 관리, 그랜트 지급 등 중요한 결정을 내릴 수 있다. OpenZeppelin의 Contracts는 모듈성이 높기 때문에, [Solidity](https://www.alchemy.com/overviews/solidity)의 상속을 이용해 새로운 모듈을 만드는 방식으로 변경 사항을 도입할 수 있는 경우가 많아 하드포크가 필요하지 않다.

<ImageBlock
  src="https://media.alchemy.com/1704160046-erc-20.jpg"
  alt="Ethereum의 ERC-20 토큰 표준을 나타내는 일러스트레이션"
  width={1171}
  height={706}
/>

- **Tokens:** OpenZeppelin은 ERC20, ERC721 같은 가장 흔한 Ethereum 표준 대부분에 대한 토큰 컨트랙트를 제공한다. 이 인프라를 이용해 개발자는 자체 토큰을 배포하는 것은 물론, 가격 모니터링, 지정된 토큰 전송 방식, 구매 인증 등 다양한 기능도 함께 사용할 수 있다.

‍

Defender는 OpenZeppelin의 웹 기반 보안 운영(SecOps) 플랫폼이다. [Defender](https://openzeppelin.com/defender/)는 Ethereum 탈중앙화 애플리케이션 운영과 관련된 많은 작업을 자동화함으로써 스마트 컨트랙트의 배포와 관리를 단순화한다.

이 플랫폼은 웹 기반 백엔드 연동, 자동화된 작업, 수동 컨트랙트 상호작용 등 다양한 기능을 제공한다. 개발자는 Defender 플랫폼 위에서 바로 개발을 시작할 수 있어, 처음부터 견고한 보안 기반을 갖출 수 있다.

<ImageBlock
  src="https://media.alchemy.com/1704160385-openzeppelin-defender.png"
  alt="OpenZeppelin Defender 보안 운영 플랫폼 대시보드"
  width={1580}
  height={1232}
/>

> "올해 DeFi에서 발생한 YAM, [Uniswap](https://www.alchemy.com/dapps/uniswap), [dForce](https://www.alchemy.com/dapps/dforce), Hegic 등의 여러 익스플로잇은 신중한 보안 프로세스를 따랐다면 예방하거나 피해를 줄일 수 있었을 것입니다. 하지만 팀들은 보안 모범 사례와 위험 평가 방법을 충분히 알려주는 종합적인 시스템을 갖추지 못하고 있습니다." -OpenZeppelin CTO, Jonathan Alexander

OpenZeppelin에 따르면 bZx, Opyn 해킹 같은 대형 익스플로잇으로 인한 사용자 자금 손실은 Defender가 제공하는 것과 같은 빠른 대응 도구가 있었다면 줄일 수 있었을 것이다.

## OpenZeppelin이 DeFi를 위해 이루는 것은 무엇인가?

<ImageBlock
  src="https://media.alchemy.com/1704160156-defi-crybersecurity.jpeg"
  alt="DeFi 애플리케이션을 위한 사이버 보안 보호를 나타내는 일러스트레이션"
  width={1024}
  height={538}
/>

OpenZeppelin은 개발자가 직접 보안을 처리할 필요를 없앰으로써 더 안전한 탈중앙화 애플리케이션의 토대를 마련하고 있다. 보안 기능이 내장되어 있으면 개발자는 보안을 희생하지 않고도 계속 빠르게 개발을 이어갈 수 있다. 공격과 DeFi 시스템이 점점 복잡해지는 상황에서 이는 매우 중요하다.

OpenZeppelin이 스마트 컨트랙트의 보안 표준으로 자리 잡으면서, DeFi 전반에서 필요한 신뢰를 최소화하는 데 도움을 준다. 사람들은 흔히 0% 신뢰, 즉 당사자 간에 어떤 신뢰도 필요 없는 상태를 이야기하지만, DeFi 프로토콜의 경우 이는 비현실적이다.

팀이든, DAO든, 감사자든, 우리는 항상 어떤 당사자를 신뢰하고 있다. 문제처럼 들릴 수 있지만, 전통 은행 시스템에 비하면 이는 훨씬 투명한 과정이다. DeFi에서는 언제든 코드를 직접 읽어볼 수 있기 때문이다.

OpenZeppelin의 CEO인 Damian Bermer는 우리가 목표로 삼아야 할 것은 0%가 아니라 신뢰 최소화(trust minimization)라고 주장한다.

> 신뢰 최소화는 우리가 신뢰하면서도 눈으로 확인할 수 없는 부분을 좁혀나가는 것입니다. 우리는 온체인에서 실행되는 코드를 볼 수 있습니다. 하지만 가장 신뢰가 최소화된 DeFi 플랫폼에서도 여전히 우리가 신뢰해야 하는 것은 무엇일까요? DeFi를 확장하는 가장 좋은 방법은 대규모 신뢰 최소화 상태에 도달하는 것입니다. -Damian Bermer

오픈소스 보안 자원을 제공함으로써 OpenZeppelin은 각 프로토콜마다 새로 작성되는 코드를 줄여 생태계 전반의 신뢰 필요성을 낮출 수 있다. 보안 인프라에 대한 신뢰가 높아지면 DeFi 프로젝트의 보안에 대한 불확실성이 크게 줄어들어, 더 폭넓은 채택과 확장이 가능해진다.

## Alchemy로 나만의 스마트 컨트랙트 배포하기

OpenZeppelin의 스마트 컨트랙트는 안전하고, 커뮤니티의 검증을 거쳤으며, 실전에서 검증되었다. Alchemy에 가입하고 오늘 바로 [첫 스마트 컨트랙트 배포를 시작해 보자](https://www.alchemy.com/?a=fd92c87506)!
