🔧 스마트 컨트랙트 수정·배포 가능한 주요 방법들

분류 업그레이드 가능 여부 대표 방식

  1. 일반 배포 방식 ❌ 아님 (불가능) 단순 재배포
  2. Proxy 패턴 기반 업그레이드 ✅ 가능 Transparent Proxy, UUPS, Beacon Proxy
  3. Eternal Storage + Delegatecall ✅ 가능 (초기 형태) 커스텀 프록시
  4. 다이아몬드 패턴 (EIP-2535) ✅ 고도화 Diamond Storage 기반

1️⃣ 일반 배포 방식 (Non-upgradeable)

⚙️ 작동 방식
• 컨트랙트를 직접 배포하고, 그 주소로 상호작용
• 코드 수정 시, 기존 컨트랙트 주소와 별개로 새로운 컨트랙트를 배포

✅ 장점
• 구조가 단순하고 안전함
• 보안 감사를 받기 쉬움

❌ 단점
• 수정 시 반드시 새 주소 배포 + 데이터 마이그레이션 필요
• 프론트엔드에서 주소 업데이트 필요

📌 사용처: 변경 필요 없는 Token, Library, Factory 등

2️⃣ Proxy 패턴 업그레이드 방식 (OpenZeppelin 호환)

📦 대표 기술: Transparent Proxy, UUPS Proxy, Beacon Proxy

🔸 A. Transparent Proxy Pattern

⚙️ 작동 방식
• 사용자 → Proxy에 요청 → Proxy는 logic을 Implementation 계약에 delegatecall
• Admin은 upgradeTo() 호출 가능 (일반 사용자는 불가)

✅ 장점
• 오픈젤린이 공식 지원, 보안 안정성 높음
• admin과 사용자 역할 분리 명확

❌ 단점
• Proxy + Logic 분리로 가스비 약간 증가
• 컨트랙트마다 Proxy가 필요함

🔸 B. UUPS (Universal Upgradeable Proxy Standard)

⚙️ 작동 방식
• Proxy는 upgradeTo()를 지원하지 않음
• Logic 계약이 upgradeTo()를 갖고 있어 스스로 업그레이드 함

✅ 장점
• Proxy 구조가 더 단순해 가스 효율적
• 하나의 Proxy 코드로 여러 UUPS 논리 계약 공유 가능

❌ 단점
• upgradeTo()가 구현된 Logic에서 실수하면 브릭될 위험
• Upgradeability 보안 검사 필요 (OpenZeppelin 플러그인)

🔸 C. Beacon Proxy Pattern

⚙️ 작동 방식
• Proxy → Beacon 계약 → Implementation 계약
• Beacon을 업그레이드하면 여러 Proxy들이 새 Logic을 공유함

✅ 장점
• 여러 컨트랙트를 동시에 업그레이드 가능
• 대규모 앱에서 유용 (e.g. 여러 Token, Vault 등)

❌ 단점
• 구조가 더 복잡함
• 초기 설정이 번거로움

3️⃣ Eternal Storage + Delegatecall (초기 커스텀 방식)

⚙️ 작동 방식
• Storage 계약 따로, Logic 계약은 delegatecall로 실행
• 로우레벨에서 직접 관리해야 함

✅ 장점
• 매우 유연하고 커스터마이징 가능

❌ 단점
• OpenZeppelin에서 권장하지 않음 (보안 취약)
• 복잡하고 실수 위험 높음

✅ 현재는 Transparent/UUPS로 거의 대체됨

4️⃣ 다이아몬드 패턴 (EIP-2535)

모듈화 + 확장성에 최적화된 고급 프록시 패턴

⚙️ 작동 방식
• 여러 기능(facet)을 별도 컨트랙트로 나누고, 다이아몬드가 selector → facet 매핑
• delegatecall로 호출

✅ 장점
• 수백 개 기능을 가진 복잡한 시스템에서 유리
• 각각의 facet을 독립적 upgrade 가능

❌ 단점
• 구조가 매우 복잡하고 이해 난이도 높음
• 보안 및 테스트 부담 큼
• 일반 프로젝트에는 과한 경우 많음

📊 정리표: 컨트랙트 업그레이드 방식 비교

방식 업그레이드 복잡도 안정성 가스 효율 사용 예
일반 배포 ❌ ⭐ ⭐⭐⭐⭐ ⭐⭐⭐⭐ 간단한 계약, 토큰
Transparent Proxy ✅ ⭐⭐ ⭐⭐⭐⭐ ⭐⭐ 대부분의 업그레이드 시스템
UUPS Proxy ✅ ⭐⭐ ⭐⭐⭐ ⭐⭐⭐ 가스 최적화가 필요한 시스템
Beacon Proxy ✅ ⭐⭐⭐ ⭐⭐⭐ ⭐⭐ 다수 배포가 필요한 앱
Eternal Storage ✅ ⭐⭐⭐⭐ ⭐ ⭐⭐ 직접 구현 실험용
다이아몬드 패턴 ✅ ⭐⭐⭐⭐⭐ ⭐⭐ ⭐⭐⭐ 모듈화 시스템, 복잡한 앱

🎯 추천 기준

프로젝트 성격 추천 방식
단순 계약, 변경 없음 일반 배포
표준적인 업그레이드 필요 Transparent Proxy
가스 최적화, 배포 많음 UUPS Proxy
수십/수백 개 컨트랙트 Beacon Proxy
고급 구조 실험, 플러그인형 앱 다이아몬드 패턴

+ Recent posts