제3장: 데이터 형식과 메타데이터

弘益人間 · 널리 인간을 이롭게 하라

개요

AI 생성 예술 작품은 단순한 픽셀 배열 이상입니다. 각 작품 뒤에는 생성 과정, 창작자 정보, 사용된 모델, 프롬프트, 파라미터 등 풍부한 메타데이터가 있습니다. 이러한 정보를 체계적으로 기록하고 전달하는 것은 투명성, 출처 추적, 저작권 관리, 그리고 생태계 전반의 상호운용성을 위해 필수적입니다.

WIA-ART-002 표준은 AI 생성 예술을 위한 포괄적인 데이터 형식과 메타데이터 스키마를 정의합니다. 이 장에서는 이미지 파일 형식, 메타데이터 구조, 블록체인 통합을 위한 출처 기록, 그리고 다양한 플랫폼 간의 데이터 교환 방법을 다룹니다.

이미지 파일 형식

1. 지원되는 파일 형식

WIA-ART-002는 다양한 용도와 요구사항을 충족하기 위해 여러 이미지 파일 형식을 지원합니다:

형식 특징 용도 메타데이터 지원
PNG 무손실, 투명도 지원 최종 결과물, 보관용 EXIF, XMP, tEXt 청크
JPEG/JPG 손실 압축, 작은 파일 크기 웹 공유, 미리보기 EXIF, XMP, IPTC
WebP 효율적 압축, 투명도 웹 최적화 EXIF, XMP
AVIF 차세대 압축, HDR 고품질 웹 배포 EXIF, XMP
TIFF 무손실, 다층 아카이브, 인쇄 EXIF, IPTC, XMP

2. PNG 파일의 메타데이터 임베딩

PNG는 WIA-ART-002에서 권장하는 주요 형식으로, tEXt 청크를 통해 커스텀 메타데이터를 저장할 수 있습니다:

// TypeScript: PNG 메타데이터 임베딩
import { PNG } from 'pngjs';
import { WIAArtMetadata } from 'wia-art-002';

function embedMetadata(imageBuffer: Buffer, metadata: WIAArtMetadata): Buffer {
  const png = PNG.sync.read(imageBuffer);

  // WIA-ART-002 메타데이터를 tEXt 청크로 저장
  png.text = {
    'wia-art-002:version': '1.0',
    'wia-art-002:metadata': JSON.stringify(metadata),
    'wia-art-002:signature': signMetadata(metadata)
  };

  return PNG.sync.write(png);
}

// 사용 예시
const metadata: WIAArtMetadata = {
  standard: 'WIA-ART-002',
  version: '1.0',
  artwork: {
    id: 'art-2024-001',
    title: 'Cyberpunk Cityscape',
    created: '2024-01-15T10:30:00Z',
    creator: {
      type: 'human-ai-collaboration',
      human: {
        address: '0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb',
        name: 'Alice Chen'
      },
      aiModel: {
        name: 'stable-diffusion-xl',
        version: '1.0',
        provider: 'Stability AI'
      }
    },
    generation: {
      prompt: 'futuristic cyberpunk city at night, neon lights...',
      negativePrompt: 'blurry, low quality, distorted',
      seed: 42,
      steps: 50,
      cfgScale: 7.5,
      sampler: 'DPM++ 2M Karras',
      size: { width: 1024, height: 1024 }
    }
  }
};

const imageWithMetadata = embedMetadata(originalImage, metadata);

WIA-ART-002 메타데이터 스키마

1. 핵심 메타데이터 구조

WIA-ART-002 메타데이터는 계층적 JSON 구조로 정의되며, 다음 주요 섹션으로 구성됩니다:

메타데이터 스키마 개요

{
  // 표준 식별
  "standard": "WIA-ART-002",
  "version": "1.0",

  // 작품 정보
  "artwork": {
    "id": "unique-identifier",
    "title": "작품 제목",
    "description": "작품 설명",
    "created": "ISO 8601 타임스탬프",
    "modified": "마지막 수정 시간",
    "tags": ["tag1", "tag2"]
  },

  // 창작자 정보
  "creator": {
    "type": "human|ai|human-ai-collaboration",
    "human": { /* 인간 창작자 정보 */ },
    "aiModel": { /* AI 모델 정보 */ }
  },

  // 생성 파라미터
  "generation": {
    "prompt": "텍스트 프롬프트",
    "negativePrompt": "부정 프롬프트",
    "seed": 난수 시드,
    "steps": 샘플링 단계,
    "cfgScale": 가이던스 스케일,
    /* 추가 파라미터 */
  },

  // 출처 및 권리
  "provenance": {
    "blockchain": "체인 이름",
    "transactionHash": "블록체인 트랜잭션",
    "ipfsHash": "IPFS 해시"
  },

  "rights": {
    "license": "라이선스 유형",
    "commercialUse": boolean,
    "derivatives": boolean
  }
}

2. 창작자 정보 (Creator)

AI 생성 예술의 특성상, 창작 과정에 인간과 AI가 모두 관여합니다. WIA-ART-002는 이를 명확히 구분하고 기록합니다:

// 인간-AI 협업 창작자 정보
{
  "creator": {
    "type": "human-ai-collaboration",

    // 인간 창작자
    "human": {
      "address": "0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb",
      "name": "Alice Chen",
      "role": "prompt-engineer",  // 또는 "artist", "designer"
      "contribution": "프롬프트 작성, 파라미터 조정, 최종 선택"
    },

    // AI 모델 정보
    "aiModel": {
      "name": "stable-diffusion-xl",
      "version": "1.0",
      "provider": "Stability AI",
      "trainingData": {
        "dataset": "LAION-5B",
        "ethicalClearance": true,
        "artistOptOut": "https://haveibeentrained.com/"
      },
      "modelHash": "sha256:abc123...",
      "inferenceProvider": "Replicate.com"
    },

    // 선택적: 추가 기여자
    "additionalContributors": [
      {
        "address": "0x123abc...",
        "role": "concept-artist",
        "contribution": "초기 컨셉 스케치 제공"
      }
    ]
  }
}

3. 생성 파라미터 (Generation Parameters)

재현성(Reproducibility)을 위해 모든 생성 파라미터를 상세히 기록합니다:

파라미터 타입 설명 필수
prompt string 정 프롬프트 (최대 10,000자) 필수
negativePrompt string 부정 프롬프트 선택
seed integer 난수 생성 시드 (재현성) 필수
steps integer 샘플링 단계 수 (1-200) 필수
cfgScale float 분류자 없는 가이던스 스케일 (1-30) 필수
sampler string 샘플러 알고리즘명 필수
size object 이미지 크기 {width, height} 필수
controlNet array ControlNet 설정 선택
lora array LoRA 모델 및 가중치 선택
initImage string img2img 초기 이미지 해시 선택
denoisingStrength float img2img 디노이징 강도 (0-1) 선택

출처 추적 (Provenance Tracking)

1. 블록체인 기반 출처 기록

WIA-ART-002는 블록체인을 활용하여 변조 불가능한 출처 기록을 유지합니다. 이는 작품의 진위성을 보장하고, 소유권 이력을 투명하게 추적할 수 있게 합니다:

// 블록체인 출처 기록 구조
{
  "provenance": {
    // 블록체인 정보
    "blockchain": "ethereum",
    "network": "mainnet",  // 또는 "goerli", "polygon", 등
    "contractAddress": "0xABC123...",
    "tokenId": "12345",
    "standard": "ERC-721",  // 또는 "ERC-1155"

    // 민팅 정보
    "mintTransaction": {
      "hash": "0x789def...",
      "block": 18234567,
      "timestamp": "2024-01-15T10:30:00Z",
      "minter": "0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb"
    },

    // IPFS 저장
    "ipfs": {
      "imageHash": "QmT5NvUtoM5nWFfrQdVrFtvGfKFmG7AHE8P34isapyhCxX",
      "metadataHash": "QmYwAPJzv5CZsnA625s3Xf2nemtYgPpHdWEz79ojWnPbdG",
      "gateway": "https://ipfs.io/ipfs/"
    },

    // 소유권 이력
    "ownershipHistory": [
      {
        "owner": "0x742d35...",
        "from": "2024-01-15T10:30:00Z",
        "to": "2024-02-20T14:20:00Z",
        "transactionHash": "0x789def..."
      },
      {
        "owner": "0x456abc...",
        "from": "2024-02-20T14:20:00Z",
        "to": null,  // 현재 소유자
        "transactionHash": "0xfedcba..."
      }
    ],

    // 검증 정보
    "verification": {
      "verified": true,
      "verifier": "WIA-Official-Registry",
      "verificationDate": "2024-01-15T10:35:00Z",
      "signature": "0x1234..."
    }
  }
}

2. 오프체인 출처 기록

블록체인이 항상 필요한 것은 아닙니다. 오프체인 방식도 지원하며, 중앙화된 레지스트리나 분산 데이터베이스를 사용할 수 있습니다:

{
  "provenance": {
    "type": "offchain",
    "registry": "WIA-Central-Registry",
    "registryUrl": "https://registry.wia-official.org",
    "artworkId": "art-2024-001",
    "registeredAt": "2024-01-15T10:30:00Z",

    // 디지털 서명
    "signature": {
      "algorithm": "ECDSA",
      "publicKey": "0x04abc123...",
      "signature": "0x789def...",
      "message": "SHA-256 hash of artwork + metadata"
    },

    // 타임스탬프 증명
    "timestamp": {
      "service": "OpenTimestamps",
      "proof": "base64-encoded-proof",
      "bitcoinBlock": 823456
    }
  }
}

권리 및 라이선싱

1. 라이선스 유형

WIA-ART-002는 다양한 오픈 및 상업 라이선스를 지원합니다:

라이선스 상업적 사용 수정 허용 재배포 귀속 필요
CC0 허용 허용 허용 불필요
CC-BY-4.0 허용 허용 허용 필수
CC-BY-SA-4.0 허용 허용 동일 라이선스 필수
CC-BY-NC-4.0 불허 허용 허용 필수
CC-BY-ND-4.0 허용 불허 허용 필수
All Rights Reserved 금지 금지 금지 N/A
Custom 별도 정의 별도 정의 별도 정의 별도 정의

2. 권리 메타데이터 구조

{
  "rights": {
    // 기본 라이선스
    "license": "CC-BY-SA-4.0",
    "licenseUrl": "https://creativecommons.org/licenses/by-sa/4.0/",

    // 권리 세부사항
    "commercialUse": true,
    "derivatives": true,
    "distribution": true,
    "attributionRequired": true,
    "shareAlike": true,

    // 귀속 정보
    "attribution": {
      "name": "Alice Chen",
      "url": "https://aliceart.com",
      "required": "Alice Chen / Stable Diffusion XL 1.0"
    },

    // 추가 제한사항
    "restrictions": [
      "불법적 목적으로 사용 금지",
      "AI 모델 재학습에 사용 금지 (선택적)"
    ],

    // 커스텀 라이선스 (선택적)
    "customLicense": {
      "text": "전체 라이선스 텍스트...",
      "url": "https://example.com/custom-license.txt"
    },

    // 저작권 정보
    "copyright": {
      "holder": "Alice Chen",
      "year": 2024,
      "notice": "© 2024 Alice Chen. All rights reserved."
    }
  }
}

메타데이터 검증 및 서명

1. 디지털 서명

메타데이터의 무결성을 보장하기 위해 ECDSA 디지털 서명을 사용합니다:

// TypeScript: 메타데이터 서명 및 검증
import { ethers } from 'ethers';

class MetadataSignature {
  // 메타데이터 서명
  static async sign(metadata: object, privateKey: string): Promise {
    const wallet = new ethers.Wallet(privateKey);

    // 메타데이터를 정규화된 JSON으로 변환
    const normalized = JSON.stringify(metadata, Object.keys(metadata).sort());

    // SHA-256 해시
    const hash = ethers.utils.keccak256(ethers.utils.toUtf8Bytes(normalized));

    // 서명
    const signature = await wallet.signMessage(ethers.utils.arrayify(hash));

    return signature;
  }

  // 서명 검증
  static verify(metadata: object, signature: string, address: string): boolean {
    // 메타데이터를 정규화된 JSON으로 변환
    const normalized = JSON.stringify(metadata, Object.keys(metadata).sort());

    // SHA-256 해시
    const hash = ethers.utils.keccak256(ethers.utils.toUtf8Bytes(normalized));

    // 서명으로부터 주소 복구
    const recoveredAddress = ethers.utils.verifyMessage(
      ethers.utils.arrayify(hash),
      signature
    );

    // 주소 비교
    return recoveredAddress.toLowerCase() === address.toLowerCase();
  }
}

// 사용 예시
const metadata = { /* WIA-ART-002 메타데이터 */ };
const privateKey = '0x...';  // 창작자의 개인키

const signature = await MetadataSignature.sign(metadata, privateKey);

// 메타데이터에 서명 추가
metadata.signature = {
  value: signature,
  signer: '0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb',
  timestamp: new Date().toISOString()
};

2. 메타데이터 스키마 검증

JSON Schema를 사용하여 메타데이터의 구조적 유효성을 검증합니다:

// JSON Schema for WIA-ART-002 Metadata
const wiaArt002Schema = {
  "$schema": "http://json-schema.org/draft-07/schema#",
  "title": "WIA-ART-002 Metadata Schema",
  "type": "object",
  "required": ["standard", "version", "artwork", "creator"],
  "properties": {
    "standard": {
      "type": "string",
      "const": "WIA-ART-002"
    },
    "version": {
      "type": "string",
      "pattern": "^\\d+\\.\\d+$"
    },
    "artwork": {
      "type": "object",
      "required": ["id", "title", "created"],
      "properties": {
        "id": { "type": "string" },
        "title": { "type": "string" },
        "created": { "type": "string", "format": "date-time" }
      }
    },
    "creator": {
      "type": "object",
      "required": ["type"],
      "properties": {
        "type": {
          "type": "string",
          "enum": ["human", "ai", "human-ai-collaboration"]
        }
      }
    }
  }
}

// 검증 함수
import Ajv from 'ajv';

function validateMetadata(metadata: any): { valid: boolean; errors?: string[] } {
  const ajv = new Ajv();
  const validate = ajv.compile(wiaArt002Schema);
  const valid = validate(metadata);

  return {
    valid,
    errors: valid ? undefined : validate.errors?.map(e => e.message)
  };
}

핵심 요점

복습 질문

  1. PNG, JPEG, WebP, AVIF 각 파일 형식의 특징과 적합한 사용 사례를 비교 설명하십시오. WIA-ART-002가 PNG를 권장 형식으로 선택한 이유는 무엇입니까?
  2. WIA-ART-002 메타데이터 스키마의 주요 섹션 5가지를 나열하고 각각의 목적을 설명하십시오. 왜 계층적 JSON 구조가 사용되었습니까?
  3. AI 생성 예술에서 "창작자" 개념이 복잡한 이유를 설명하고, WIA-ART-002가 이를 어떻게 해결하는지 논의하십시오. human-ai-collaboration 타입의 구조를 상세히 기술하십시오.
  4. 생성 파라미터(prompt, seed, steps, cfgScale 등)를 상세히 기록하는 이유는 무엇입니까? 재현성(reproducibility)의 중요성과 한계를 논의하십시오.
  5. 블록체인 기반 출처 추적의 작동 원리와 장점을 설명하십시오. IPFS와 블록체인의 조합이 왜 효과적인지 논의하십시오.
  6. Creative Commons 라이선스(CC0, CC-BY, CC-BY-SA, CC-BY-NC 등)의 차이점을 설명하고, AI 생성 예술에서 각 라이선스가 적합한 상황을 제시하십시오.
  7. ECDSA 디지털 서명을 사용한 메타데이터 무결성 검증 과정을 단계별로 설명하십시오. 서명이 변조를 방지하는 원리는 무엇입니까?
  8. 메타데이터 표준화가 AI 예술 생태계의 상호운용성에 어떻게 기여하는지 구체적인 예시와 함께 논의하십시오. 표준화의 도전 과제는 무엇입니까?