Nami Cloud는 분산 스토리지와 상호작용하는 두 가지 방법을 제공합니다. 두 서비스 모두 Walrus를 기본 스토리지 계층으로 사용하지만, 서로 다른 인터페이스와 기능 세트를 제공합니다. 이 가이드는 특정 요구 사항에 따라 S3-호환 스토리지와 Walrus 퍼블리셔 원시 API 중에서 선택하는 데 도움을 줍니다.

서비스 비교 개요

기능S3-호환 스토리지Walrus 퍼블리셔 API
지연 시간수백 밀리초~10초 업로드 + 10초 가용성
스토리지 갱신자동 (핸즈프리)수동 에포크 관리
API 스타일표준 S3 REST API커스텀 Walrus 프로토콜
학습 곡선최소 (익숙한 S3)보통 (새로운 개념)
기존 도구 지원완전한 AWS SDK 지원커스텀 통합 필요
성능Railgun (베타)와 함께 빠름직접 네트워크 접근
분석 및 모니터링메트릭 지원메트릭 지원
스토리지 에포크 제어자동화 (핸즈프리)수동 제어 가능
Web3 통합추상화된 레이어직접 블록체인 접근

상세 서비스 분석

S3-호환 스토리지

S3-호환 스토리지를 선택해야 할 때

  • AWS S3에서 마이그레이션 - 코드 변경 없음
  • 빠른 프로토타이핑 - 익숙한 도구로 즉시 시작
  • 간단한 스토리지 요구 - 복잡성 없이 파일 업로드/다운로드
  • 팀의 익숙함 - 개발자들이 이미 S3 API를 알고 있음
  • 타사 통합 - S3 엔드포인트를 기대하는 도구 사용

장점

  • 제로 마이그레이션 마찰 - 기존 S3 코드 및 도구와 작동
  • 자동 관리 - 내장된 암호화, 갱신 및 최적화
  • 익숙한 인터페이스 - 표준 S3 작업 (PUT, GET, DELETE, LIST)
  • Railgun 가속 (베타) - 내장된 성능 최적화
  • SDK 지원 - 모든 주요 언어에서 AWS SDK와 작동
  • 빠른 설정 - 몇 분 안에 데이터 저장 시작

단점

  • 제한된 가시성 - 기본 Walrus 작업에 대한 통찰력이 적음
  • S3 제한 - S3 API 설계 패턴에 의해 제약받음

Walrus 퍼블리셔 원시 API

퍼블리셔 API를 선택해야 할 때

  • Web3 애플리케이션 - 직접 블록체인 검증 및 제어 필요
  • 커스텀 워크플로우 - 전문화된 스토리지 통합 구축

장점

  • 다중 엔드포인트 관리 - 여러 퍼블리셔를 지역별로 제어
  • 종합적인 분석 - 상세 메트릭, 로그 및 성능 데이터
  • 직접 Walrus 접근 - 스토리지 에포크 및 블록체인 작업에 대한 완전한 제어
  • 유연한 구성 - 특정 사용 사례에 대한 커스텀 설정

단점

  • 높은 지연 시간 - 10초 업로드 + 10초 가용성
  • 수동 관리 - 스토리지 에포크 관리 필요
  • 가파른 학습 곡선 - Walrus 프로토콜 개념 이해 필요
  • 커스텀 통합 - 기존 SDK 지원 없음, 자체 클라이언트 구축 필요
  • 더 복잡한 설정 - 엔드포인트 및 모니터링 구성 필요
  • S3 도구 지원 없음 - 기존 S3 CLI 도구나 라이브러리 사용 불가
  • 높은 개발 비용 - 구현에 더 많은 시간 필요

성능 및 확장성 비교

지연 시간 및 처리량

S3-호환 스토리지

  • Railgun 가속 (베타): 전 세계적으로 100ms 이하
  • 단일 엔드포인트: 단순성을 위해 최적화됨
  • 자동 캐싱: 내장된 엣지 가속
  • 표준 작업: S3 의미론을 가진 PUT/GET

Walrus 퍼블리셔 API

  • 직접 네트워크 접근: 네이티브 Walrus 성능
  • 다중 엔드포인트: 퍼블리셔 간 로드 밸런싱
  • 지리적 최적화: 가장 가까운 퍼블리셔로 라우팅
  • 배치 작업: 효율적인 대량 업로드/다운로드

코드 예제 비교

import { S3Client, PutObjectCommand } from "@aws-sdk/client-s3";

const s3Client = new S3Client({
endpoint: "https://my-bucket.storage.nami.cloud",
credentials: {
accessKeyId: "your-access-key",
secretAccessKey: "your-secret-key"
}
});

// 파일 업로드 - 표준 S3 API
await s3Client.send(new PutObjectCommand({
Bucket: "my-bucket",
Key: "file.jpg",
Body: fileBuffer
}));