π R2 μ κ· κ³μ μ
μ
κ°μ΄λ
μ μ΄λ©μΌλ‘ Cloudflare R2 μΆκ° κ³μ λ§λ€κΈ° β λκΉμ§ λ°λΌνλ©΄ μ½ 15-20λΆ μμ
β ννμ΄μ§ κ΄λ¦¬
π μ μ κ³μ ?
- κΈ°μ‘΄ R2 (skycloverve@gmail.com) β λ¬΄λ£ 10GB νλ μ€ 14GB μμΉ κ³΅λΆλ‘ μ¬μ© μ€ (μ΄λ―Έ μ΄κ³Ό β μ λ£ μ νλμ κ°λ₯μ±)
- μ κ³μ β μΆκ° 10GB λ¬΄λ£ νλ + νκ³ λΆλ¦¬ + μ¬κ³ 격리
- μ΄λ² μ
λ‘λ λμ β μλ³μμ
μ½ 6GB + μνΈμ΅ μλ£ μ½ 2.5GB = μ½ 8.5GB (μ κ³μ λ¬΄λ£ νλ μ)
1
μ΄λ©μΌ κ²°μ
μ Cloudflare κ³μ μ μ¬μ©ν μ΄λ©μΌμ μ νμΈμ. κΈ°μ‘΄ λ κ°μ λ¬λΌμΌ ν©λλ€.
μΆμ² μλͺ
κ·μΉ: κΈ°μ‘΄ ν¨ν΄(`skyclover<μ«μ>` / `skyclover<λ¨μ΄>`) λ°λΌκ°κΈ°. μμ:
skycloverart@gmail.com β μνΈμ΅ λμ μ μ©
skycloverlessons@gmail.com β μλ³μμ
μ΄λ―Έμ§ μ μ©
luna.whale.r2@gmail.com β ν΅ν© μ΄λ―Έμ§ (κ°μ₯ λͺ
ν)
π κ²°μ ν
site-management.htmlμ κ³μ λΆλ¦¬ μ μ±
νμ μΆκ°νμΈμ. κΉλ¨Ήμ§ μκ².
2
Gmail κ³μ μμ± 5λΆ
π accounts.google.com/signup
- μ΄λ¦: Luna Whale Cloud (λλ λ³Έλͺ
)
- μ΄λ©μΌ: μμμ μ ν μ΄λ¦ (μ:
luna.whale.r2)
- λΉλ°λ²νΈ: κ°λ ₯νκ² μ€μ (μ μ₯ νμ)
- μ νλ²νΈ μΈμ¦: κΈ°μ‘΄ λ²νΈ κ·Έλλ‘ κ°λ₯ (Googleμ ν λ²νΈλ‘ μ¬λ¬ κ³μ OK)
- 볡ꡬ μ΄λ©μΌ:
skyclover777@gmail.com μ
λ ₯ (κ³μ μμ΄λ²λ¦Ό λ°©μ§)
β
κ°μ
μλ£λλ©΄ μ Gmailμ λ‘κ·ΈμΈλ μνλ‘ μ§ννμΈμ. λ€λ₯Έ λΈλΌμ°μ (μν¬λ¦Ώ μ°½) λλ Chrome νλ‘ν λΆλ¦¬ κΆμ₯.
3
Cloudflare κ°μ
3λΆ
π dash.cloudflare.com/sign-up
- λ°©κΈ λ§λ μ Gmail μ
λ ₯
- λΉλ°λ²νΈ μ€μ (Gmail λΉλ°λ²νΈμ λ¬λΌμΌ ν¨)
- μ΄λ©μΌ μΈμ¦ β μ Gmail λ°μνΈμ§ν¨μμ Cloudflare μΈμ¦ λ©μΌ ν΄λ¦
- κ°μ
μλ£ β Dashboard μλ μ§μ
Plan μ ν νλ©΄ λμ€λ©΄: Free μ ν. λλ©μΈ λ±λ‘ λ¨κ³ λμ€λ©΄ 건λλ°κΈ° (R2λ λλ©μΈ λΆνμ).
4
R2 νμ±ν + κ²°μ μ 보 λ±λ‘ 3λΆ
- μΌμͺ½ μ¬μ΄λλ°μμ R2 Object Storage ν΄λ¦
- "Purchase R2" λλ "Enable R2" λ²νΌ ν΄λ¦
- κ²°μ μ 보 λ±λ‘ νλ©΄ β μΉ΄λ λ±λ‘ νμ (λ¬΄λ£ νλ μμμλ μ²κ΅¬ μ λ¨)
- μΉ΄λ: κΈ°μ‘΄ PayPal μ¬μ© μΉ΄λ λλ λ€λ₯Έ μΉ΄λ
- μ£Όμ: λ² νΈλ¨ μ£Όμ OK (λλ νκ΅ μ£Όμ)
- R2 νμ±ν μλ£ β λΉ R2 λμ보λ νμ
β οΈ λ¬΄λ£ νλ νμΈ: λ§€μ 10GB μ μ₯ + 1M Class A μμ² + 10M Class B μμ² λ¬΄λ£. μ΄κ³Ό μ μλ μ²κ΅¬ β λμ보λμμ "Billing Alert" μ€μ κΆμ₯ ($5 μ λλ‘).
5
λ²ν· μμ± 1λΆ
- R2 λμ보λμμ "Create bucket" ν΄λ¦
- Bucket name:
luna-assets μ
λ ₯ (λλ μνλ μ΄λ¦)
luna-assets볡μ¬
- Location: Asia-Pacific (APAC) μ ν (λ² νΈλ¨Β·νκ΅ μ¬μ©μμκ² κ°μ₯ λΉ λ¦)
- "Create bucket" ν΄λ¦
6
Public Access νμ±ν 1λΆ
μΉμ¬μ΄νΈμμ μ΄λ―Έμ§λ₯Ό λΆλ¬μ€λ €λ©΄ κ³΅κ° URLμ΄ νμν©λλ€.
- λ°©κΈ λ§λ
luna-assets λ²ν· ν΄λ¦
- μλ¨ ν "Settings" ν΄λ¦
- "Public Access" μΉμ
β "Allow Access" ν΄λ¦ (r2.dev λλ©μΈ)
- κ²½κ³ λͺ¨λ¬μμ "Allow" νμΈ β κ³΅κ° URL μμ±λ¨
- νμλλ URL 볡μ¬:
https://pub-XXXXXXXXXXXX.r2.dev
β
URL 볡μ¬ν λ€ site-management.htmlμ κΈ°λ‘! κΉλ¨ΉκΈ° μ¬μ. λλ μΉ΄ν‘ μκΈ°νν
보λ΄κΈ°.
7
API Token λ°κΈ 2λΆ
rclone κ°μ λκ΅¬λ‘ μ
λ‘λνλ €λ©΄ ν ν° νμν©λλ€.
- R2 λμ보λ μ’μΈ‘ λ©λ΄ β "Manage R2 API Tokens" ν΄λ¦
- "Create API token" ν΄λ¦
- Token name:
rclone-uploader μ
λ ₯
- Permissions: "Admin Read & Write" μ ν (λλ Object Read & Write)
- Specify bucket(s): luna-assetsλ§ μ ν (λ€λ₯Έ λ²ν· μ κ·Ό μ ν)
- TTL: Forever (λλ 1λ
β 보μμ μ§§μμλ‘ μ’μ§λ§ μΌλ¨ Forever)
- "Create API Token" ν΄λ¦
π¨
ν λ²λ§ νμλ¨: λ€μ 3κ°μ§λ₯Ό μ¦μ λ³΅μ¬ + μμ ν κ³³μ μ μ₯:
Access Key ID
Secret Access Key
Endpoint (https://<...>.r2.cloudflarestorage.com)
λΆμ€ μ ν ν° μ¬λ°κΈ νμ.
λ§₯ λΉλ°λ²νΈ λ§€λμ (Keychain) λλ
1Password μΆμ².
8
rcloneμ μ remote μΆκ° 3λΆ
κΈ°μ‘΄ r2 remote(skycloverve κ³μ )λ κ·Έλλ‘ λκ³ , μ r2new remote μΆκ°.
ν°λ―Έλμμ μ€ν:
rclone config볡μ¬
- n μ
λ ₯ β New remote
- name:
r2new (λλ μνλ μ΄λ¦, λ¨ r2μ λ¬λΌμΌ ν¨)
- Storage:
s3 μ
λ ₯ (Amazon S3 νΈν)
- provider:
Cloudflare μ
λ ₯
- env_auth: 1 (false)
- access_key_id: Step 7μμ 볡μ¬ν Access Key ID λΆμ¬λ£κΈ°
- secret_access_key: Step 7μμ 볡μ¬ν Secret λΆμ¬λ£κΈ°
- region: auto
- endpoint: Step 7μμ 볡μ¬ν Endpoint URL λΆμ¬λ£κΈ°
νμ: https://<account-id>.r2.cloudflarestorage.com
- location_constraint: λΉμλκΈ° (Enter)
- acl: n (Not set)
- λλ¨Έμ§ λ€ κΈ°λ³Έκ° (Enter Enter Enter...)
- λ§μ§λ§μ y β Yes this is OK
- q β Quit config
β
νμΈ: rclone listremotes μ€ννλ©΄ r2: μ r2new: λ λ€ λ³΄μ¬μΌ ν¨.
9
ν
μ€νΈ μ
λ‘λ (1μ₯) 1λΆ
λ°λ‘ ν° ν΄λ μ¬λ¦¬μ§ λ§κ³ , μμ ν
μ€νΈ νμΌ 1μ₯μΌλ‘ κΆν νμΈ.
rclone copy /Users/sky7_mac/Documents/000_homepage/images/logo.png r2new:luna-assets/test/ --progress볡μ¬
μλ£ ν λΈλΌμ°μ μμ νμΈ:
https://pub-XXXXXXXXXX.r2.dev/test/logo.png (Step 6μμ λ°μ Public URL + /test/logo.png)
β
μ΄λ―Έμ§ 보μ΄λ©΄ μ±κ³΅! λ€μ λ¨κ³λ‘.
β 403 λλ 404 λμ€λ©΄:
1) Public Access (Step 6) νμ±νλλμ§ νμΈ
2) νμΌμ΄ μ€μ μ
λ‘λλλμ§ R2 μ½μμμ νμΈ
3) URL μ€ν νμΈ
10
μλ£ μ μ (claude)μκ² μλ €μ£ΌκΈ° π
μλ 3κ°μ§ μ λ³΄λ§ μλ €μ£Όμλ©΄ λλ¨Έμ§λ μλμΌλ‘ μ§νλ©λλ€ (λλ μ
λ‘λ + HTML κ²½λ‘ κ°±μ + λ°°ν¬):
- 1οΈβ£ μ Gmail μ£Όμ (μ:
luna.whale.r2@gmail.com)
- 2οΈβ£ Public URL (μ:
https://pub-XXXXXXXX.r2.dev)
- 3οΈβ£ rclone remote μ΄λ¦ (μ:
r2new)
β οΈ Access Key/Secretμ μ λ μ±ν
μ λΆμ¬λ£μ§ λ§μΈμ. rclone μ€μ μμλ§ μ μ₯.
π€ μ¬μ©μ μ 보 λ°μ ν μ κ° μλ μ§νν μμ
- 1. μλ³μμ
images/lessons/ 5.8GB β r2new:luna-assets/lessons/ μ
λ‘λ (μμ 8-12λΆ)
- 2. μνΈμ΅ λμ
0_ννμ΄μ§λ―Έμ μμ
202604μΆκ°μμ
/ μ½ 2.5GB β r2new:luna-assets/atelier/ μ
λ‘λ
- 3. PNG β JPG λ³ν κ²°κ³Όλ¬Ό (νμ¬ μ§ν μ€) β R2 μ
λ‘λ
- 4. HTML κ²½λ‘ μΌκ΄ μΉν:
https://pub-5c6f81e15f364b5e9af286a8c8895682.r2.dev/lessons/ β https://pub-XXXXXXXX.r2.dev/lessons/
- 5. art-shop.html λμ μΉ΄νλ‘κ·Έ μλ μμ±
- 6. .firebaseignore κ°±μ (Firebaseμμ lesson μ΄λ―Έμ§ μ μΈ)
- 7. Firebase λ°°ν¬ β μ½λλ§ β λ°°ν¬ μκ° λν λ¨μΆ
- 8. μ 체 κ²μ¦ (μ΄λ―Έμ§ 200 OK, monthly-detail μΉ΄λ νμΈ)
- 9. site-management.html κ°±μ (μ κ³μ μ 보 μΆκ°)
π μμ£Ό λ°μνλ λ¬Έμ
"R2 νμ±ν μ μΉ΄λ λ±λ‘μ΄ κ±°λΆλ¨"
λ² νΈλ¨ μΉ΄λκ° κ±°λΆλλ©΄ νκ΅ μΉ΄λ λλ PayPal μ¬μ©. μ¬μ©μκ° PayPal μ΅μ
λ±λ‘ν κ² μλ€λ©΄ κ·Έκ±° μ¬μ©.
"rclone config λμ€ λ§ν"
rclone config file
# νμλλ κ²½λ‘ (λ³΄ν΅ ~/.config/rclone/rclone.conf) μ§μ νΈμ§ κ°λ₯
# κΈ°μ‘΄ [r2] μΉμ
μλμ [r2new] μΉμ
μ§μ μΆκ°:
[r2new]
type = s3
provider = Cloudflare
access_key_id = (Access Key ID)
secret_access_key = (Secret)
region = auto
endpoint = https://<account-id>.r2.cloudflarestorage.com
"ν
μ€νΈ μ
λ‘λλ λλλ° URL μ μ μ 401/403"
Step 6 Public Accessλ₯Ό λ€μ νμΈ. Settings β Public Access β λ°λμ "Allow Access" μνμ¬μΌ ν¨. λλ Custom Domain μ¬μ© μ λλ©μΈ DNS μ ν λκΈ° (μ΅λ 24μκ°).
"μ κ³μ λΉλ°λ²νΈ μμ΄λ²λ¦΄κΉλ΄ κ±±μ "
λ§₯ ν€μ²΄μΈ(Keychain Access) λλ 1Passwordμ μ μ₯. 볡ꡬ μ΄λ©μΌμ skyclover777@gmail.comμΌλ‘ μ€μ ν΄λλ©΄ λΉλ°λ²νΈ μμ΄λ 볡ꡬ κ°λ₯.
κ°μ΄λ μμ±: 2026-05-17 Β·
β ννμ΄μ§ κ΄λ¦¬