-
cloudflare R2 ์ฐ๋๐ Node.js 2026. 4. 7. 06:46
โญ cloudflare R2๋?
cloudflare ์์ฒด๋ ํ๋ซํผ ์ ์ฒด๋ฅผ ์๋ฏธํ๋ฉฐ ๊ทธ์ค์ R2๋ ์คํ ๋ฆฌ์ง ๊ธฐ๋ฅ ํ๋๋ฅผ ์๋ฏธํฉ๋๋ค.
์ฆ, cloudflare R2๋ ๋์ฉ๋ ํ์ผ(์ด๋ฏธ์ง, ์์, ๋ฐ์ดํฐ ๋ฑ)์ ์ ์ฅํ๋ ํด๋ผ์ฐ๋ ์คํ ๋ฆฌ์ง ์๋น์ค์ ๋๋ค.
๐ ํน์ง
1. AWS S3 ๋ฑ์ ๋ฐ์ดํฐ๋ฅผ ๊บผ๋ผ ๋ ๋น์ฉ์ด ๋ค์ง๋ง R2๋ ๋ฐ์ดํฐ ๋ค์ด๋ก๋ ๋น์ฉ์ด ์์
2. AWS S3 API์ ๊ฑฐ์ ๋์ผํ์ฌ ๊ธฐ์กด S3 ์ฝ๋ ๊ทธ๋๋ก ์ฐ๊ธฐ ์ฌ์
3. cloudflare์ CDN ์๋น์ค์ ๊ฒฐํฉ๋์ด ๋ฐ์ดํฐ ์ ์ก์๋๊ฐ ๋น ๋ฆ
AWS S3์ ๊ฐ๋จ ๋น๊ต
๊ตฌ๋ถ Cloudflare R2 AWS S3 (Standard) ๋ฐ์ดํฐ ์ก์ ๋ฃ ๋ฌด๋ฃ ($0) ์ ๋ฃ (GB๋น ๋ถ๊ณผ) ์ ์ฅ ๋น์ฉ ์ฝ $0.015 / GB ์ฝ $0.023 / GB (๋ฆฌ์ ๋ณ ์์ด) ํธํ์ฑ S3 API ํธํ ํ์ค S3 API ๋ฆฌ์ ์ค์ ์๋ (๊ธ๋ก๋ฒ ๋ถ์ฐ) ์ฌ์ฉ์ ์ง์ ์ ํ ๋ฌธ์๊ฒ์์์คํ ์ ๊ฐ๋ฐํ๋ฉด์ ๋ค์ด๋ก๋ ํ์ผ์ ์ค์ฒด๋ฅผ ์ด๋์์ ๊ด๋ฆฌ๋ฅผ ํ๋ฉด ์ข์๊น ๊ณ ๋ฏผํ๋ค๊ฐ
AWS S3๋ ํ๋ฆฌํฐ์ด๋ผ ํด์ ์ฒ์ ๊ฐ์ ํ๋ฉด 1๋ ๋์ 5GB ์ฉ๋ ๋ฌด๋ฃํํ์ด๋ผ๋ ์ข์ ๋ถ๋ถ์ด ์์์ง๋ง,
cloudflare R2 ๋ํ ๋ฌด๋ฃํํ์ผ๋ก 10GB ์ ์ฅ ๋ฌด๋ฃ๋ผ๊ณ ํ๋๊ตฐ์.
์ ๋ ์ด๋ฏธ ๊ฐ์ ํ์ง ์๋ ์ด ์ง๋ ์ง๊ธ ์๋กญ๊ฒ ๊ฐ์ ํ๋ ๊ฒ๋ณด๋ค ์ฌ์ฉํ์ง ์์ ๊ฒ์ ํด๋ณด์๋ ๋ง์์
cloudflare R2๋ฅผ ์ ํํ๊ฒ ๋์์ต๋๋ค.
โญ cloudflare R2 ์์ํ๊ธฐ
์ฐ์ cloudflare ํํ์ด์ง์ ๋ค์ด๊ฐ์ค๋๋ค.
Connect, protect, and build everywhere
Make employees, applications and networks faster and more secure everywhere, while reducing complexity and cost.
www.cloudflare.com
๊ตฌ๊ธ์ cloudflare๋ผ๊ณ ๊ฒ์ํ์ ๋ ์ต์๋จ์ ๋ฐ๋ก ์ฌ์ดํธ๊ฐ ๋ ธ์ถ๋์ด ์์ต๋๋ค.
๋ก๊ทธ์ธ์ ํ์๊ฒ ๋๋ฉด

ํด๋น ๋ถ๋ถ์ ํด๋ฆญํด์ฃผ์๊ฒ ๋๋ฉด

์์ ๊ฐ์ด ๊ฒฐ์ ์๋จ์ ๋ฑ๋กํ๋ผ๊ณ ๋น๋๋ค.
cloudflare์์ ๋ด(Bot)์ด๋ ์๋น์ค๋ฅผ ๋จ์ฉํ๋ ๊ฒ์ ๋ง๊ธฐ ์ํด ์ค์ ์นด๋๊ฐ ์๋์ง ํ์ธํ๋ ๊ณผ์ ์ด๋ผ๊ณ ํฉ๋๋ค.
๋ฌด๋ฃ ๋ฒ์(10GB ๋ฑ) ๋ด์์๋ ๊ฒฐ์ ๊ฐ ์ ๋ ๋์ง ์๋๋ค๊ณ ๋์์์ผ๋ ํ์ธ ํ ๋ฑ๋กํ์๋ฉด ๋ฉ๋๋ค.
์ ๋ ์๊ณ ๊ฐ 0์์ธ ์ฒดํฌ์นด๋๋ก ๋ฑ๋กํ์ต๋๋ค :)

์์ ๊ฐ์ด ๋จ๋ฉด ์นด๋ ๋ฑ๋ก์ด ์ ์์ ์ผ๋ก ์๋ฃ๋์์ต๋๋ค.
๋ค์ R2 object storage -> Overview๋ก ๊ฐ์๋ฉด

์ ์ฌ์ง๊ณผ ๊ฐ์ด ๋จ๊ฒ ๋๋๋ฐ ์ฌ๊ธฐ์์ Create bucket์ ๋๋ฌ์ฃผ๋ฉด ๋ฉ๋๋ค.

Location์ค Automatic์ cloudflare๊ฐ ์์์ ์ต์ ์์น๋ฅผ ์ ํํฉ๋๋ค.
๋ณดํต ์ฌ์ฉ์์ ๊ฐ๊น์ด ์ง์ญ์ ์ ํํ๋๋ฐ, ์์์๋ฉด Asia Pacific์ ์ ํํ๋ค๊ณ ํฉ๋๋ค.
Specify jurisdiction์ ํน์ ์ง์ญ/๊ตญ๊ฐ์์๋ง ์ ์ฅํ๋๋ก ์ ํ์ ๋๋๊ฒ์ ๋๋ค.
Default Storage Class์์ Standard๋ ์์ฃผ ์ฌ์ฉํ๋ ๋ฐ์ดํฐ์ฉ, ๋น ๋ฅด๊ฒ ์ ๊ทผ ๊ฐ๋ฅ, ๊ธฐ๋ณธ ์ต์
์ฆ, ์ด๋ฏธ์ง, ์ฌ์ฉ์ ์ ๋ก๋ ํ์ผ, API์์ ์์ฃผ ์ฝ๋ ๋ฐ์ดํฐ ์ฉ๋์ ๋๋ค.
Infrequent Access๋ ๊ฑฐ์ ์์ฐ๋ ๋ฐ์ดํฐ์ฉ, ์ ์ฅ ๋น์ฉ์ ๋ ์ธ์ง๋ง ์ฝ์ ๋ ๋น์ฉ/์ง์ฐ ์ฆ๊ฐ
์ฆ, ๋ฐฑ์ ํ์ผ, ๋ก๊ทธ ์ ์ฅ, ์ค๋๋ ๋ฐ์ดํฐ ์ฉ๋์ ๋๋ค.
Automatic, Standard๋ฅผ ์ ํํ๊ณ Create bucket์ ๋๋ฆ ๋๋ค.

์์ ์ค์ ์์๋ ํ ํฐ๋ช ์ ์ ์ผ์๊ณ
๊ถํ์ Object Read & Write๋ก ํ๋ฉด ๋ฉ๋๋ค.
๊ทธ ๋ค์ ์ฐ์ธก ํ๋จ์ ํ๋์ ๋ฒํผ์ ํด๋ฆญํ๊ฒ ๋๋ฉด ์ต์ข ์ ์ผ๋ก
Access Key ID, Secret Access Key ๋ฅผ ๋ฐ๊ธ๋ฐ๊ฒ ๋๋๋ฐ, ์ ๋ ์ฐฝ์ ๋ซ์ง ๋ง๊ณ ๋ฐ๋ก ๋ฉ๋ชจ์ฅ์ ๋ณต์ฌํด๋์ธ์!
์ฌ๊ธฐ๊น์ง ๋ง๋ฌด๋ฆฌ ํ์ผ๋ฉด,
R2_ACCESS_KEY_ID=๋ณต์ฌํ_Access_Key_ID R2_SECRET_ACCESS_KEY=๋ณต์ฌํ_Secret_Access_Key R2_ACCOUNT_ID=์ฌ์ง์_์๋_Account_ID R2_BUCKET_NAME=์์ฑํ_Bucket_Name์์ ๊ฐ์ด .env ํ์ผ์ ์์ฑํด์ค๋๋ค. Account ID๋ R2์ Overview์ ๋ค์ด๊ฐ์๋ฉด
์ฐ์ธก์ Account Details๋์ Account ID๊ฐ ์๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค.
npm install @aws-sdk/client-s3 @aws-sdk/lib-storage dotenvR2(S3 ํธํ)์ ์ฐ๊ฒฐํ npm module์ ์ค์นํฉ๋๋ค.
์ ๋ก๋ ํ ์คํธ์ฉ jsํ์ผ์ ํ๋ ๋ง๋์ ํ
import { S3Client, PutObjectCommand } from "@aws-sdk/client-s3"; import "dotenv/config"; // 1. R2 ํด๋ผ์ด์ธํธ ์ค์ const s3 = new S3Client({ region: "auto", endpoint: process.env.R2_ENDPOINT, credentials: { accessKeyId: process.env.R2_ACCESS_KEY_ID, secretAccessKey: process.env.R2_SECRET_ACCESS_KEY, }, }); async function uploadTest() { const params = { Bucket: process.env.R2_BUCKET_NAME, Key: "test-file.txt", // R2์ ์ ์ฅ๋ ํ์ผ ์ด๋ฆ Body: "Hello R2! This is a test upload.", // ํ์ผ ๋ด์ฉ ContentType: "text/plain", }; try { const data = await s3.send(new PutObjectCommand(params)); console.log("์ ๋ก๋ ์ฑ๊ณต!", data); } catch (err) { console.error("์ ๋ก๋ ์คํจ:", err); } } uploadTest();์์ ๊ฐ์ด ์ฝ๋๋ฅผ ์์ฑํด์ค๋๋ค.
S3Client : R2 ์๋ฒ์ ์ปจ๋ฅ์ ํ๊ธฐ ์ํ ๋ฉ์ธ ํต์ ์ฅ๋น
PutObjectCommand : ํ์ผ์ ์ง์ด๋ฃ๊ธฐ ์ํ ๊ตฌ์ฒด์ ์ธ ๋ช ๋ น์
dotenv/config : ์๊น ๋ง๋ .env ํ์ผ์ ์ ๋ณด๋ฅผ ์ฝ์ด์์ process.env์ ๋ฃ์ด์ค
s3 ๋ณ์๋ ์ด์ ๋ด ์๋ฒ์ R2 ์ฌ์ด์ ์ ์ฉํต๋ก๊ฐ ๋๋ฉฐ, ํด๋น ์ค์ ์ด ํ๋ฆฌ๋ฉด "๊ถํ ์์" ๋๋ "์ฃผ์ ์ค๋ฅ"๊ฐ ๋ฐ์ํฉ๋๋ค.
s3.send๋ฅผ ํตํด R2 ์๋ฒ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์กํฉ๋๋ค.

์ฑ๊ณต์ ํ๊ฒ ๋๋ฉด ์์ ๊ฐ์ด ์๋ต์ด ์ค๋ฉด์ ์ค์ cloudflare์์ R2์ Overview๋ก ๋ค์ด๊ฐ
์๊น ์์ฑํ๋ Bucket์ ํ์ธํ๊ฒ ๋๋ฉด

์์ ๊ฐ์ด ํ ์คํธํ์ผ์ด ์์ฑ๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค.
'๐ Node.js' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Node.js] NestJS๋? (0) 2026.08.17 [Node.js] JWT(Json Web Token)๋ฅผ ์ด์ฉํ ๋ก๊ทธ์ธ ์ธ์ฆ ๊ตฌํ (0) 2026.07.14 [Node.js] Express๋? (์ ์ ๋ฐ ์ฌ์ฉ๋ฒ) (0) 2024.11.07 [Node.js] Node.js์ ์ ์์ ํน์ง (4) 2024.10.30 [Node.js] fs๋ชจ๋์ด๋?(์ฝ๊ธฐ, ์ฐ๊ธฐ, ์์ , ์ญ์ ) (0) 2024.08.29