Amazon Web Services 한국 블로그
Amazon S3, Vercel Marketplace 및 v0 by Vercel에서 이용 가능
Vercel에서 웹 애플리케이션과 AI 애플리케이션을 구축하는 개발자는 이제 Vercel Marketplace와 v0에서 직접 Amazon S3 스토리지 리소스를 추가할 수 있습니다. S3의 내구성, 확장성 및 성능을 Vercel이 제공하는 프로비저닝 워크플로의 편리함과 결합할 수 있습니다. 오늘부터 Amazon S3 Tables과 Amazon S3 Vectors를 포함한 Amazon Simple Storage Service(Amazon S3)를 Vercel Marketplace 및 v0 by Vercel에서 기본적으로 사용할 수 있습니다. 이 서비스는 일상적인 스토리지, 분석, AI라는 세 가지 유형의 워크로드를 지원합니다.
중요한 이유
수백만 명의 개발자가 Vercel에서 웹 애플리케이션과 AI 애플리케이션을 구축, 배포, 확장합니다. 스토리지는 애플리케이션 성능을 높이는 데 필수적이지만, 이전에는 스토리지를 프로비저닝하려면 AWS Management Console로 이동하여 정책과 자격 증명을 구성해야 했습니다. 이제 S3 스토리지가 Vercel 개발자 환경에 직접 통합되어, 리소스 프로비저닝 및 연결 구성을 자동으로 처리합니다. Amazon Aurora, Amazon DynamoDB 및 Amazon OpenSearch Serverless에 대한 기존 통합 기능과 함께 Vercel 내에서 완전한 애플리케이션 스택(데이터베이스 계층부터 객체, 벡터 및 오픈 테이블 스토리지에 이르기까지)을 하나의 AWS 계정에서 단일 요금으로 이용할 수 있습니다.
모든 애플리케이션을 위한 스토리지
- S3 범용 버킷: 파일, 이미지, 비디오, 문서 등, 데이터 레이크, 클라우드 네이티브 애플리케이션, 모바일 앱의 객체를 사실상 무제한으로 저장합니다. S3는 기본적으로 99.999999999%의 데이터 내구성과 99.99%의 가용성을 제공하도록 설계된, 가장 내구성이 뛰어난 스토리지를 클라우드에서 제공합니다.
- S3 Tables: 자동화된 테이블 유지 관리와 압축을 통해 분석에 최적화된 성능을 제공하는 완전관리형 Apache Iceberg 스토리지입니다. S3 Tables는 DuckDB를 비롯한 모든 Iceberg REST 카탈로그 API 호환 엔진에서 직접 쿼리할 수 있습니다.
- S3 Vectors: 검색 증강 생성(RAG), 시맨틱 검색 등의 AI 애플리케이션을 지원하는 목적별 벡터 스토리지와 쿼리를 통해 벡터 업로드, 저장 및 쿼리 비용을 최대 90% 절감합니다.

그림 1 – Vercel Marketplace의 AWS 페이지.
시작하기
Vercel 대시보드에서 스토리지 탭으로 이동하여 생성을 선택합니다. AWS를 선택하고, S3 버킷 유형을 선택하고, 리전을 선택하고, 버킷을 생성합니다. 프로비저닝에는 몇 초 정도 걸립니다.

그림 2 – 리전과 이름을 선택하여 Vercel에서 Amazon S3 범용 버킷을 생성합니다.
버킷을 프로젝트에 연결한 다음 Vercel CLI를 사용하여 환경 변수를 가져옵니다.
vercel link
vercel env pull .env.local
이 통합은 AWS_REGION, AWS_ROLE_ARN, AWS_RESOURCE_ARN, 그리고 S3_BUCKET_NAME, S3_TABLE_BUCKET_NAME, S3_VECTOR_BUCKET_NAME과 같은 버킷 이름을 주입합니다. 런타임에 @vercel/functions/oidc의 awsCredentialsProvider는 단기 OIDC 토큰을 AWS Security Token Service(AWS STS)와 교환하여 리소스에 대한 한정된 임시 자격 증명을 얻습니다. 정적 키는 어디에도 저장되지 않습니다.
S3를 사용한 오브젝트 스토리지
이 Next.js 경로는 범용 버킷에 파일을 업로드합니다.
import { S3Client, PutObjectCommand } from "@aws-sdk/client-s3";
import { awsCredentialsProvider } from "@vercel/functions/oidc";
const s3 = new S3Client({
region: process.env.AWS_REGION,
credentials: awsCredentialsProvider({
roleArn: process.env.AWS_ROLE_ARN,
}),
});
export async function POST(request) {
const formData = await request.formData();
const file = formData.get("file");
await s3.send(new PutObjectCommand({
Bucket: process.env.S3_BUCKET_NAME,
Key: file.name,
Body: Buffer.from(await file.arrayBuffer()),
ContentType: file.type,
}));
return Response.json({ success: true });
}
동일한 클라이언트에서 ListObjectsV2Command와 GetObjectCommand를 사용하여 오브젝트를 나열하고 읽을 수 있습니다.
S3 Tables를 사용한 분석
S3 Tables는 분석용 목적별 S3 스토리지를 제공하며, 증가하는 데이터 볼륨에 맞추어 쿼리 성능을 자동으로 최적화하도록 설계되었습니다. 자동 테이블 유지 관리와 압축을 지원하는 완전관리형 Apache Iceberg 테이블을 제공하며, 모든 Apache Iceberg REST 카탈로그 호환 엔진에서 작동합니다. 간단한 쿼리를 위해 Vercel 함수 내에 DuckDB를 사용할 수 있습니다. 이 예는 ARN으로 테이블 버킷을 연결하고 집계 쿼리를 실행합니다.
import { DuckDBInstance } from "@duckdb/node-api";
import { awsCredentialsProvider } from "@vercel/functions/oidc";
const creds = await awsCredentialsProvider({
roleArn: process.env.AWS_ROLE_ARN,
})();
const db = await DuckDBInstance.create();
const conn = await db.connect();
await conn.run("INSTALL aws; LOAD aws; INSTALL httpfs; LOAD httpfs; INSTALL iceberg; LOAD iceberg;");
await conn.run(`
CREATE SECRET s3cred (
TYPE s3,
KEY_ID '${creds.accessKeyId}',
SECRET '${creds.secretAccessKey}',
SESSION_TOKEN '${creds.sessionToken}',
REGION '${process.env.AWS_REGION}'
);
`);
await conn.run(`
ATTACH '${process.env.AWS_RESOURCE_ARN}' AS s3tables (
TYPE iceberg,
ENDPOINT_TYPE s3_tables
);
`);
const rows = await (await conn.run(`
SELECT town_city, AVG(median_price) AS avg_price
FROM s3tables."${process.env.S3_TABLES_NAMESPACE}".town_monthly
GROUP BY town_city
ORDER BY avg_price DESC
LIMIT 10
`)).getRowObjects();
Next.js 경로 내에서 DuckDB를 실행하는 경우, 네이티브 바인딩이 번들에 포함되지 않도록 next.config.mjs의 serverExternalPackages에 @duckdb/node-api를 추가하세요.
S3 Vectors를 사용한 벡터 검색
S3 Vectors는 Amazon S3에 저장된 콘텐츠에 대한 AI 에이전트, AI 추론 및 시맨틱 검색을 지원하는 목적별 비용 최적화 벡터 스토리지를 제공합니다. S3 Vectors는 별도의 벡터 데이터베이스 없이 벡터를 저장하고 쿼리할 수 있는 네이티브 지원을 제공하지만, 벡터를 생성하지는 않습니다. 원하는 모델로 임베딩을 생성한 다음, 인덱스에서 가장 가까운 일치 항목을 쿼리합니다.
import { S3VectorsClient, QueryVectorsCommand } from "@aws-sdk/client-s3vectors";
import { awsCredentialsProvider } from "@vercel/functions/oidc";
const vectors = new S3VectorsClient({
region: process.env.AWS_REGION,
credentials: awsCredentialsProvider({
roleArn: process.env.AWS_ROLE_ARN,
}),
});
export async function POST(request) {
const { embedding } = await request.json();
const result = await vectors.send(new QueryVectorsCommand({
vectorBucketName: process.env.S3_VECTOR_BUCKET_NAME,
indexName: "documents",
queryVector: { float32: embedding },
topK: 5,
returnMetadata: true,
}));
return Response.json({ matches: result.vectors });
}
v0 by Vercel을 사용한 구축
v0에서 구축하려는 대상을 설명하면 적합한 리소스가 프로비저닝됩니다. 즉, AWS를 사용하여 이미지를 업로드하는 사진 갤러리라고 요청하면 범용 버킷을, ‘내 PDF의 질문에 답변하는 지원 봇’이라고 요청하면 S3 Vectors를, ‘클릭스트림 데이터를 위한 분석 대시보드’라고 요청하면 S3 Tables가 제공됩니다. 그러면 v0가 연결을 구성하고 작동하는 코드를 생성합니다.

그림 3 – 자연어 프롬프트로 PDF 지원 봇을 생성하는 v0 화면. Amazon S3 Vectors가 연결되어 있으며, 미리 보기 패널에 애플리케이션이 표시됩니다.
S3와 AWS 데이터베이스 결합
Vercel의 모든 AWS 서비스는 동일한 계정 및 인증 모델을 공유하므로, 추가 설정 없이 결합할 수 있습니다. 예를 들어 파일은 S3에 저장하고 파일 메타데이터는 Aurora에 저장하거나, RAG 검색을 위해 문서 텍스트는 DynamoDB에 저장하고 임베딩은 S3 Vectors에 저장할 수 있습니다.
AWS 계정으로 Vercel 사용하기
통합을 통해 새 AWS 계정을 생성할 수 있으며, 해당 계정은 개발 및 테스트에 필요한 S3 기능을 지원합니다. 아울러, 기존 AWS 계정을 연결하여 완전한 S3 및 AWS 기능 세트를 사용하고, 현재의 결제 조건을 유지할 수도 있습니다. 기존 AWS 계정을 연결하는 경우, Vercel은 플랫폼을 통해 생성한 새 버킷에 대해서만 작동합니다. 모든 S3 리소스가 자체 AWS 계정에 생성되므로, AWS 네이티브 도구를 사용하고 한곳에서 스토리지를 관리할 수 있습니다.
요금 및 가용성
통합 비용은 없으며, 사용하는 리소스에 대해 표준 Amazon S3 요금을 지불하면 됩니다. Vercel을 통해 생성된 새 AWS 계정에는 6개월 내에 사용 가능한 100 USD의 크레딧이 제공됩니다. S3 Tables와 S3 Vectors를 포함한 Amazon S3는 Vercel이 지원하는 모든 상용 AWS 리전의 v0 및 Vercel Marketplace에서 사용할 수 있습니다. 시작하려면 v0 또는 Vercel Marketplace의 AWS 페이지를 방문하세요.
피드백을 보내주세요!
API를 호출하고, 문서를 검색하고, 지역별 가용성을 확인하고, 이 새로운 기능에 대한 문제 해결을 확인하려면 선호하는 AI 도구를 사용하여 AWS MCP Server 및 플러그인을 활용하세요. AWS re:Post for Amazon S3에서 피드백을 공유해 주세요.
— Daniel