스프링부트에서 Cloudflare R2 스토리지 사용하기(AWS SDK for JAVA 2.x)
작성 일자 : 2024년 10월 20일
Cloudflare R2
Cloudflare R2는 Cloudflare에서 제공하는 오브젝트 스토리지 서비스입니다.
AWS에는 S3가 있듯이 Cloudflare에는 R2가 있으며, R2는 S3 API와 호환성을 가지고 있어서 AWS SDK for JAVA 2.x를 사용하여 R2에 접근할 수 있습니다.
요금제
Operations
- Class A operations : ListBuckets, PutBucket, ListObjects, PutObject, CopyObject, CompleteMultipartUpload, CreateMultipartUpload, LifecycleStorageTierTransition, ListMultipartUploads, UploadPart, UploadPartCopy, ListParts, PutBucketEncryption, PutBucketCors, PutBucketLifecycleConfiguration
- Class B operations : HeadBucket, HeadObject, GetObject, UsageSummary, GetBucketEncryption, GetBucketLocation, GetBucketCors, GetBucketLifecycleConfiguration
Pricing
Cloudflare R2의 요금은 다음과 같습니다.
Storage Type | Standard Storage | Infrequent Access Storage (Beta) |
---|---|---|
Storage | $0.015 / GB-month | $0.01 / GB-month |
Class A Operations | $4.50 / million requests | $9.00 / million requests |
Class B Operations | $0.36 / million requests | $0.90 / million requests |
Data Retrieval (Processing) | None | $0.01 / GB |
Egress (Data Transfer to Internet) | Free ¹ | Free ¹ |
장점
S3와 비교하였을때, Cloudflare R2의 장점은 기본적으로 스토리지 저장 비용이 저렴하다는 것과 Egress(데이터 전송) 비용이 무료라는 것입니다.
또한, 커스텀 도메인을 통해서 WAF custom rules, caching(CDN), access control 또는 bot management와 같은 Cloudflare의 다양한 기능을 사용할 수 있습니다.
AWS SDK for JAVA 2.x 사용하기
Application.yml 설정
cloudflare:
r2:
endpoint: https://{자신의 계정}.r2.cloudflarestorage.com
bucket: {버킷 이름}
access-key: {Access Key}
secret-key: {Secret Key}
Gradle 의존성 추가
dependencies {
implementation 'software.amazon.awssdk:s3:2.28.23'
}
S3ClientConfig 생성
@Configuration
public class S3ClientConfig {
@Value("${cloudflare.r2.endpoint}")
private String endpoint;
@Value("${cloudflare.r2.access-key}")
private String accessKey;
@Value("${cloudflare.r2.secret-key}")
private String secretKey;
@Bean
public S3Client s3Client() {
AwsCredentials credentials = AwsBasicCredentials.create(accessKey, secretKey);
return S3Client.builder()
.credentialsProvider(StaticCredentialsProvider.create(credentials))
.region(Region.of("auto"))
.endpointOverride(URI.create(endpoint))
.build();
}
}
Reference
Overview | Cloudflare R2 docs
Cloudflare R2 Storage allows developers to store large amounts of unstructured data without the costly egress bandwidth fees associated with typical cloud storage services.
developers.cloudflare.com