# 확장가능한 온체인 SVG 이미지 스토리지

- URL: https://soohan.dev/projects/cj/expandable-onchain-svg-storage
- Category: projects/cj
- Published: 2022-06-10
- Tags: blockchain, nft, svg, solidity
- Author: Soohan Park

> SVG의 XML 태그를 여러 스마트 컨트랙트에 나눠 저장하고 조합해, 계약 크기 제한을 넘는 이미지를 온체인에 보관한 연구.

---

<Download
  href="https://nptgbqzcpg7dbphu.public.blob.vercel-storage.com/files/projects/cj/expandable-onchain-svg-storage/paper.pdf?download=1"
  title="확장가능한 온체인 SVG 이미지 스토리지"
  meta="PDF · 1.5MB"
/>

CJ올리브네트웍스 NFT Lab에서 NFT 이미지와 메타데이터를 스마트 컨트랙트 안에
지속적으로 보관하는 방법을 연구하고, 논문에 저자로 참여했습니다.
중앙 서버나 IPFS pinning 서비스의 운영 여부에 기대지 않으면서도,
이더리움 스마트 컨트랙트의 크기 제한보다 큰 이미지를 다룰 수 있는 구조를 살펴봤습니다.

논문은 *확장가능한 온체인 SVG 이미지 스토리지*로 발표했습니다.

## 이미지 한 장을 여러 계약에 나눠 저장

NFT가 중앙 서버의 URL만 가리키면 서버가 중단되거나 파일이 바뀔 때 자산의 표현도 영향을 받습니다.
IPFS는 콘텐츠 주소를 사용하지만, 장기간 제공하려면 누군가가 파일을 계속 pinning해야 합니다.
반면 데이터를 컨트랙트에 직접 저장하는 온체인 방식은 이런 외부 저장소 의존을 줄이지만,
이더리움 계약 코드 크기가 약 24KB로 제한돼 큰 이미지를 한 계약에 담기 어렵습니다.

연구에서는 벡터 품질을 유지하면서 XML 태그 단위로 나눌 수 있는 SVG를 선택했습니다.
이미지를 래스터 조각으로 자르는 대신 도형과 속성을 표현하는 태그를 분리하면,
필요한 조각을 다시 조합하거나 일부 속성만 바꾸는 구조를 만들 수 있습니다.

## Property, Assemble, Storage 세 계층

구조는 역할에 따라 세 계층으로 나뉩니다.

1. `Property Layer` — 사용자가 선택할 조합의 식별자와 속성을 관리합니다.
2. `Assemble Layer` — 여러 저장 계약에서 XML 태그를 읽어 하나의 SVG 문자열로 결합합니다.
3. `Storage Layer` — 분할된 XML 태그를 여러 스마트 컨트랙트에 나눠 보관합니다.

큰 데이터는 Storage Contract를 추가해 확장하고, 조합 방식이나 외부 인터페이스가 달라지면
해당 계층만 교체할 수 있습니다. 모든 데이터를 한 계약에 넣는 방식과 달리,
이미지 데이터와 조합 규칙의 변경 범위를 분리한 것이 핵심입니다.

실험은 Ethereum Rinkeby와 EVM London 환경에서 Solidity 0.8.7,
Node.js 16.14.2, ethers 5.6.4를 사용했습니다. 301KB SVG를 XML 태그 단위로 나눠
17개의 Storage Contract에 저장한 뒤, 1번부터 5번, 6번부터 10번, 1번부터 10번 계약의 일부 조합과
전체 계약 조합으로 이미지를 복원했습니다.

부분 조합으로도 선택한 태그에 해당하는 이미지가 만들어졌고,
17개 계약을 모두 조합했을 때 원본 SVG가 재현됐습니다.
이 결과는 계약 하나의 크기 제한을 저장 계층의 수평 확장으로 넘을 수 있음을 보여줍니다.

## 확장성과 배포 비용의 상충관계

제안한 구조는 바뀐 계층만 다시 배포할 수 있어, 이미지나 조합 규칙이 계속 확장되는 프로젝트에서
전체를 다시 올리는 비용을 피할 수 있습니다. 하지만 최초 실험에서 301KB SVG와 관련 계약을
배포하는 데 든 비용은 가스 가격 3 Gwei 기준 약 0.8 ETH였습니다.
온체인 지속성을 얻는 대신 초기 배포 비용과 계약 수가 커지는 구조입니다.

논문도 Storage Contract의 수와 비용을 더 줄이는 일을 후속 과제로 남겼습니다.
현재 관점에서는 한 가지 한계가 더 있습니다. 데이터가 온체인에 남는다는 사실이
SVG 렌더링의 안전성이나 지갑·마켓플레이스의 장기 호환성을 자동으로 보장하지는 않습니다.
외부 입력을 조합할 때의 스크립트·참조 정책, 클라이언트별 SVG 지원 범위도 별도로 다뤄야 합니다.

따라서 이 연구는 모든 NFT 이미지를 온체인에 넣어야 한다는 결론보다,
계약 크기 제한을 데이터 분할과 계층 분리로 다루고 그 대가를 비용으로 측정한 설계에 가깝습니다.

## 논문 정보

- 제목: 확장가능한 온체인 SVG 이미지 스토리지
- 영문 제목: Expandable Onchain SVG Image Storage
- 저자: 박수한, 김경은, 이동영, 김지혜, 윤인균, 김준렬, 김현석, 안석현
- 발표: 한국블록체인학회
- 발표일: 2022년 6월 10일
