SeaweedFS 가져오기

SeaweedFS 가져오기

SeaweedFS는 S3 호환 게이트웨이를 제공하기 때문에 DuckDB의 S3 지원을 사용해서 SeaweedFS 버킷을 읽고 쓸 수 있어요.

출처: 공식문서

사전 준비 (Prerequisites)

연동에는 httpfs 확장이 필요합니다. INSTALL SQL 명령으로 설치하고, 이 작업은 한 번만 하면 돼요.

SeaweedFS를 로컬에서 시험해 보려면 S3 자격증명이 담긴 s3config.json 파일을 만들어 봅시다.

{
  "identities": [
    {
      "name": "analyst",
      "credentials": [
        {
          "accessKey": "your_access_key_id",
          "secretKey": "your_secret_access_key"
        }
      ],
      "actions": ["Admin", "Read", "Write", "List", "Tagging"]
    }
  ]
}

그다음 모든 SeaweedFS 스택을 컨테이너 하나로 띄우고 버킷을 만듭니다.

docker run -d --name seaweedfs -p 8333:8333 \
    -v "$(pwd)/s3config.json:/etc/seaweedfs/s3config.json" \
    chrislusf/seaweedfs:latest \
    mini -dir=/data -s3.config=/etc/seaweedfs/s3config.json

echo "s3.bucket.create -name ⟨your-bucket⟩" | \
    docker exec -i seaweedfs weed shell -master=localhost:9333

S3 엔드포인트는 8333 포트에서 수신합니다.

자격증명과 설정

SeaweedFS S3 설정에 들어 있는 자격증명으로 S3 시크릿을 만듭니다.

CREATE SECRET my_secret (
    TYPE s3,
    KEY_ID '⟨your_access_key_id⟩',
    SECRET '⟨your_secret_access_key⟩',
    ENDPOINT '⟨seaweedfs-host⟩:8333',
    URL_STYLE 'path',
    USE_SSL false
);
  • SeaweedFS는 path-style 요청을 처리하므로 URL_STYLEpath로 설정하세요. 와일드카드 DNS가 필요 없어요.
  • SeaweedFS는 region을 요구하지 않으므로 REGION은 생략할 수 있습니다.
  • 위 로컬 설정처럼 일반 HTTP 엔드포인트라면 USE_SSL false를 설정하고, 게이트웨이가 TLS 뒤에 있으면 생략하세요.

조회

SeaweedFS 자격증명을 설정하고 나면 read_csvread_parquet 같은 DuckDB 내장 메서드로 데이터를 조회할 수 있어요.

SELECT * FROM 's3://⟨your-bucket⟩/⟨file⟩.csv';
SELECT * FROM read_parquet('s3://⟨your-bucket⟩/⟨file⟩.parquet');

쓰기도 같은 방식으로 동작하며, 결과에 대한 글롭(glob) 읽기도 가능합니다.

COPY (SELECT 42 AS answer) TO 's3://⟨your-bucket⟩/sample/answer.parquet';
SELECT * FROM read_parquet('s3://⟨your-bucket⟩/sample/*.parquet');

SeaweedFS는 Iceberg도 지원합니다. 테이블 버킷에는 테이블 데이터가 Parquet 파일로 저장되고, 게이트웨이의 내장 Iceberg REST Catalog가 테이블 메타데이터를 제공해요. SeaweedFS catalog 예시를 보면 이 경로로 Iceberg 테이블을 조회하는 방법을 확인할 수 있습니다.

더 알아보기 (Learn more)

  • S3 호환 스토리지 공통 문법(s3://...)을 그대로 쓰므로 DuckDB 객체 스토리지 경험을 재사용할 수 있어요.
  • SeaweedFS를 로컬 컨테이너로 띄워 손쉽게 DuckDB-객체스토리지 연동을 실습해 볼 수 있습니다.