IT

🏠 API 속도 μ œν•œ(Rate Limit): κ°œλ… νŒŒν—€μΉ˜κΈ°μ™€ ν˜„λͺ…ν•œ λŒ€μ²˜λ²• πŸ–₯

μ•ˆλ…•ν•˜μ„Έμš”! μ˜€λŠ˜μ€ μ›Ή μ„œλΉ„μŠ€ 개발과 μ΄μš©μ— μžˆμ–΄ 맀우 μ€‘μš”ν•œ κ°œλ…μΈ API 속도 μ œν•œ(Rate Limit)에 λŒ€ν•΄ 쉽고 깊이 있게 μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€. 이 μ œν•œμ€ μΈν„°λ„·μ΄λΌλŠ” 넓은 λ„λ‘œμ—μ„œ νŠΈλž˜ν”½ 체증을 λ§‰λŠ” ꡐ톡 ν†΅μ œ μ‹œμŠ€ν…œκ³Ό κ°™μŠ΅λ‹ˆλ‹€.


1. 🚦 API 속도 μ œν•œ(Rate Limit)μ΄λž€ λ¬΄μ—‡μΈκ°€μš”?

API 속도 μ œν•œμ€ μ„œλ²„(API 제곡자)κ°€ ν΄λΌμ΄μ–ΈνŠΈ(API μ‚¬μš©μž)κ°€ νŠΉμ • κΈ°κ°„ λ™μ•ˆ 보낼 수 μžˆλŠ” μš”μ²­μ˜ 횟수λ₯Ό κ°•μ œμ μœΌλ‘œ μ œν•œν•˜λŠ” μ •μ±…μž…λ‹ˆλ‹€.

  • κ°œλ…: β€œλ„ˆλŠ” 1λΆ„λ‹Ή 100번만 μš”μ²­ν•  수 μžˆμ–΄β€μ™€ 같은 κ·œμΉ™μž…λ‹ˆλ‹€.
  • λͺ©μ  (μ™œ μ œν•œν• κΉŒμš”?):
    • μ„œλ²„ 보호: νŠΉμ • μ‚¬μš©μžμ˜ κ³Όλ„ν•œ μš”μ²­μœΌλ‘œ 인해 μ„œλ²„μ— λΆ€ν•˜κ°€ κ±Έλ € μ„œλΉ„μŠ€κ°€ λ§ˆλΉ„λ˜λŠ” 것(DoS 곡격 λ°©μ§€ 포함)을 막기 μœ„ν•¨μž…λ‹ˆλ‹€.
    • 곡정성 보μž₯: λͺ¨λ“  μ‚¬μš©μžκ°€ λ™λ“±ν•˜κ²Œ API μžμ›μ„ μ‚¬μš©ν•  수 μžˆλ„λ‘ 보μž₯ν•©λ‹ˆλ‹€.
    • λΉ„μš© 절감: λΆˆν•„μš”ν•œ μ»΄ν“¨νŒ… μžμ› μ†Œλͺ¨λ₯Ό 쀄여 μ„œλΉ„μŠ€ 운영 λΉ„μš©μ„ μ ˆκ°ν•©λ‹ˆλ‹€.
  • μ œν•œ λ°©μ‹μ˜ μ’…λ₯˜:
    • μ‹œκ°„λ‹Ή/λΆ„λ‹Ή μš”μ²­ 횟수: κ°€μž₯ ν”ν•œ λ°©μ‹μž…λ‹ˆλ‹€. (예: μ‹œκ°„λ‹Ή 5,000회)
    • λ™μ‹œ 접속 수: λ™μ‹œμ— μ—°κ²°ν•  수 μžˆλŠ” μ„Έμ…˜μ˜ 수λ₯Ό μ œν•œν•©λ‹ˆλ‹€.
    • 총 데이터 μ „μ†‘λŸ‰: 일정 κΈ°κ°„ λ™μ•ˆ 전솑할 수 μžˆλŠ” λ°μ΄ν„°μ˜ μ΄λŸ‰μ„ μ œν•œν•©λ‹ˆλ‹€.

2. ❌ 속도 μ œν•œ 초과 μ‹œ λ°œμƒν•˜λŠ” ν˜„μƒ (429 Too Many Requests)

ν΄λΌμ΄μ–ΈνŠΈκ°€ μ„œλ²„κ°€ μ„€μ •ν•œ 속도 μ œν•œμ„ μ΄ˆκ³Όν•˜μ—¬ μš”μ²­μ„ 보낼 경우, μ„œλ²„λŠ” 일반적으둜 λ‹€μŒμ˜ HTTP μƒνƒœ μ½”λ“œμ™€ ν•¨κ»˜ 응닡을 κ±°λΆ€ν•©λ‹ˆλ‹€.

  • HTTP μƒνƒœ μ½”λ“œ 429:Too Many Requests (λ„ˆλ¬΄ λ§Žμ€ μš”μ²­)
    • 이 μ½”λ“œλŠ” ν΄λΌμ΄μ–ΈνŠΈκ°€ μ§€μ •λœ μ‹œκ°„ 내에 λ„ˆλ¬΄ λ§Žμ€ μš”μ²­μ„ λ³΄λƒˆμŒμ„ λͺ…ν™•ν•˜κ²Œ μ•Œλ €μ€λ‹ˆλ‹€.
  • 응닡 ν—€λ”μ˜ ν™œμš©:
    • λŒ€λΆ€λΆ„μ˜ 잘 μ„€κ³„λœ APIλŠ” 속도 μ œν•œ κ΄€λ ¨ 정보λ₯Ό 응닡 헀더에 ν¬ν•¨ν•˜μ—¬ ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ μ•Œλ €μ€λ‹ˆλ‹€.
      • X-RateLimit-Limit: ν˜„μž¬ μ œν•œ ν•œλ„ (예: 5000)
      • X-RateLimit-Remaining: 남은 μš”μ²­ 횟수 (예: 4999)
      • Retry-After: μ œν•œμ΄ 풀릴 λ•ŒκΉŒμ§€ κΈ°λ‹€λ €μ•Ό ν•˜λŠ” μ‹œκ°„ (초 λ‹¨μœ„ λ˜λŠ” νŠΉμ • λ‚ μ§œ/μ‹œκ°„)

3. πŸ’‘ API 속도 μ œν•œμ— ν˜„λͺ…ν•˜κ²Œ λŒ€μ²˜ν•˜λŠ” 팁 (ν•΄κ²° μ „λž΅)

속도 μ œν•œμ— 걸리지 μ•Šκ³  효율적으둜 APIλ₯Ό μ‚¬μš©ν•˜λ €λ©΄ ν΄λΌμ΄μ–ΈνŠΈ μΈ‘μ—μ„œ μ „λž΅μ μΈ 접근이 ν•„μš”ν•©λ‹ˆλ‹€.

1. μš”μ²­ 헀더 정보 ν™œμš© 및 μ§€μ—° (Backoff μ „λž΅)

API 응닡 헀더에 ν¬ν•¨λœ X-RateLimit-Remainingμ΄λ‚˜ Retry-After 정보λ₯Ό 적극적으둜 μ‚¬μš©ν•΄μ•Ό ν•©λ‹ˆλ‹€.

  • Retry-After μ€€μˆ˜: 429 응닡을 λ°›μœΌλ©΄ μ¦‰μ‹œ μž¬μ‹œλ„ν•˜μ§€ 말고, 응닡에 ν¬ν•¨λœ Retry-After 헀더 κ°’λ§ŒνΌ λ°˜λ“œμ‹œ λŒ€κΈ°ν•΄μ•Ό ν•©λ‹ˆλ‹€.
  • μ§€μˆ˜ λ°±μ˜€ν”„ (Exponential Backoff): λ§Œμ•½ Retry-After 헀더가 μ œκ³΅λ˜μ§€ μ•Šκ±°λ‚˜, μΌμ‹œμ μΈ 였λ₯˜λ‘œ 인해 5xx μ½”λ“œλ₯Ό 받은 경우, μž¬μ‹œλ„ μ‹œλ„λ₯Ό ν•  λ•Œλ§ˆλ‹€ λŒ€κΈ° μ‹œκ°„μ„ μ μ§„μ μœΌλ‘œ λŠ˜λ¦¬λŠ” λ°©μ‹μž…λ‹ˆλ‹€.
    • 예: 1μ°¨ μ‹€νŒ¨ μ‹œ 1초 λŒ€κΈ°, 2μ°¨ μ‹€νŒ¨ μ‹œ 2초 λŒ€κΈ°, 3μ°¨ μ‹€νŒ¨ μ‹œ 4초 λŒ€κΈ°β€¦

2. 캐싱(Caching)을 ν†΅ν•œ μš”μ²­ μ΅œμ†Œν™”

κ°€μž₯ 효과적인 방법 쀑 ν•˜λ‚˜λŠ” λΆˆν•„μš”ν•œ μš”μ²­ 자체λ₯Ό μ—†μ• λŠ” κ²ƒμž…λ‹ˆλ‹€.

  • 데이터 μž¬ν™œμš©: 자주 λ³€ν•˜μ§€ μ•ŠλŠ” λ°μ΄ν„°λŠ” 둜컬 μ €μž₯μ†Œ (λ°μ΄ν„°λ² μ΄μŠ€, Redis, λ©”λͺ¨λ¦¬)에 μ €μž₯해두고, 유효 κΈ°κ°„(TTL)이 μ§€λ‚˜κΈ° μ „κΉŒμ§€λŠ” API 호좜 없이 둜컬 λ°μ΄ν„°λ‘œ μ‘λ‹΅ν•©λ‹ˆλ‹€.
  • ν΄λΌμ΄μ–ΈνŠΈ 캐싱: API 응닡 ν—€λ”μ˜ Cache-Control λ˜λŠ” Expires 섀정을 ν™œμš©ν•˜μ—¬, λΈŒλΌμš°μ €λ‚˜ ν”„λ‘μ‹œ μ„œλ²„κ°€ μš”μ²­μ„ μ„œλ²„κΉŒμ§€ 보내지 μ•Šλ„λ‘ μœ λ„ν•©λ‹ˆλ‹€.

3. μš”μ²­ 병합 (Batching) 및 μ΅œμ ν™”

μ—¬λŸ¬ 개의 μž‘μ€ μš”μ²­μ„ ν•˜λ‚˜μ˜ 큰 μš”μ²­μœΌλ‘œ ν•©μΉ˜κ±°λ‚˜, ν•„μš”ν•œ λ°μ΄ν„°λ§Œ μš”μ²­ν•©λ‹ˆλ‹€.

  • Batch Request: λ§Œμ•½ APIκ°€ μ§€μ›ν•œλ‹€λ©΄, μ—¬λŸ¬ 개의 κ°œλ³„ μž‘μ—…μ„ ν•˜λ‚˜μ˜ 묢음(Batch)으둜 μ²˜λ¦¬ν•˜λŠ” μš”μ²­μ„ μ‚¬μš©ν•©λ‹ˆλ‹€. μ΄λŠ” μ—¬λŸ¬ 번의 κ°œλ³„ μš”μ²­μ„ ν•œ 번의 API 호좜둜 μ€„μ—¬μ€λ‹ˆλ‹€.
  • ν•„μš”ν•œ ν•„λ“œλ§Œ μš”μ²­: GraphQL APIλ‚˜ REST API의 필터링 κΈ°λŠ₯을 ν™œμš©ν•˜μ—¬, μ‘λ‹΅μ—μ„œ μ •λ§λ‘œ ν•„μš”ν•œ 데이터 ν•„λ“œλ§Œ μš”μ²­ν•˜λ„λ‘ μ΅œμ ν™”ν•©λ‹ˆλ‹€.

4. API ν‚€/ν”Œλžœ μ—…κ·Έλ ˆμ΄λ“œ κ³ λ €

근본적으둜 ν•„μš”ν•œ μš”μ²­ νšŸμˆ˜κ°€ ν˜„μž¬ μ‚¬μš© 쀑인 ν”Œλžœμ˜ μ œν•œμ„ μ΄ˆκ³Όν•˜λŠ” 경우라면, μ„œλΉ„μŠ€μ˜ μ•ˆμ •μ„±μ„ μœ„ν•΄ API μ œκ³΅μžμ—κ²Œ μ œν•œ μ™„ν™”λ₯Ό μš”μ²­ν•˜κ±°λ‚˜ 유료 ν”ŒλžœμœΌλ‘œ μ—…κ·Έλ ˆμ΄λ“œν•˜λŠ” 것을 κ³ λ €ν•΄μ•Ό ν•©λ‹ˆλ‹€.


5. πŸ›  개발자λ₯Ό μœ„ν•œ 심화 κ°œλ…

API 속도 μ œν•œμ€ λ‹¨μˆœν•œ 횟수 μ œν•œμ„ λ„˜μ–΄, μ„œλ²„ μžμ›μ˜ 효율적인 관리λ₯Ό μœ„ν•œ μ •κ΅ν•œ μ‹œμŠ€ν…œμž…λ‹ˆλ‹€.

  • 토큰 버킷 μ•Œκ³ λ¦¬μ¦˜ (Token Bucket):
    • λŒ€λΆ€λΆ„μ˜ 속도 μ œν•œ μ‹œμŠ€ν…œμ΄ μ‚¬μš©ν•˜λŠ” κΈ°λ³Έ μ•Œκ³ λ¦¬μ¦˜μž…λ‹ˆλ‹€.
    • API μš”μ²­μ„ μ²˜λ¦¬ν•  수 μžˆλŠ” 토큰이 λ‹΄κΈ΄ 버킷이 μžˆλ‹€κ³  κ°€μ •ν•©λ‹ˆλ‹€. 토큰은 μΌμ •ν•œ μ†λ„λ‘œ 버킷에 μ±„μ›Œμ§€κ³ , μš”μ²­μ΄ 올 λ•Œλ§ˆλ‹€ 토큰 ν•˜λ‚˜λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.
    • 버킷이 가득 μ°¨λ©΄ 토큰은 더 이상 μ±„μ›Œμ§€μ§€ μ•Šκ³ , μš”μ²­ μ‹œ 버킷이 λΉ„μ–΄ 있으면 429 응닡을 λ°˜ν™˜ν•©λ‹ˆλ‹€. 이 방식은 μΌμ‹œμ μΈ νŠΈλž˜ν”½ 폭발(Burst)은 ν—ˆμš©ν•˜λ©΄μ„œλ„ μž₯기적인 속도λ₯Ό μ œμ–΄ν•˜λŠ” 데 μœ μš©ν•©λ‹ˆλ‹€.
  • 리킀 버킷 μ•Œκ³ λ¦¬μ¦˜ (Leaky Bucket):
    • μš”μ²­μ΄ 물방울처럼 버킷에 λ“€μ–΄μ˜€κ³ , λ²„ν‚·μ˜ 물은 μΌμ •ν•œ μ†λ„λ‘œ λΉ μ Έλ‚˜κ°‘λ‹ˆλ‹€. 버킷이 λ„˜μΉ˜λ©΄ μƒˆ μš”μ²­μ€ κ±°λΆ€λ©λ‹ˆλ‹€.
    • 이 방식은 μš”μ²­ μ²˜λ¦¬μœ¨μ„ 맀우 μΌμ •ν•˜κ²Œ μœ μ§€ν•˜λŠ” 데 μ’‹μŠ΅λ‹ˆλ‹€.

API 속도 μ œν•œμ€ μ„œλΉ„μŠ€μ˜ μ•ˆμ •μ„±μ„ μœ„ν•œ ν•„μˆ˜μ μΈ λ©”μ»€λ‹ˆμ¦˜μž…λ‹ˆλ‹€. 이λ₯Ό 잘 μ΄ν•΄ν•˜κ³  ν™œμš©ν•˜μ—¬ λ”μš± κ²¬κ³ ν•˜κ³  효율적인 μ„œλΉ„μŠ€λ₯Ό κ°œλ°œν•˜κ³  μ΄μš©ν•˜μ‹œκΈΈ λ°”λžλ‹ˆλ‹€!

infodori1234

Recent Posts

πŸ–₯ NetBIOS over TCP IP NBT μ™„μ „ κ°€μ΄λ“œ

둜컬 λ„€νŠΈμ›Œν¬ ν™˜κ²½μ„ μ‘°κΈˆμ΄λΌλ„ 닀뀄본 μ‚¬λžŒμ΄λΌλ©΄ ν•œ λ²ˆμ―€μ€ λ§ˆμ£ΌμΉ˜λŠ” μ΅μˆ™ν•œ 단어가 μžˆμŠ΅λ‹ˆλ‹€. λ°”λ‘œ NetBIOS와 NBTμž…λ‹ˆλ‹€.…

2κ°œμ›” ago

🏠 JSON Schema: 데이터 μœ νš¨μ„± κ²€μ¦μ˜ ν‘œμ€€ 섀계도 πŸ–₯

μ•ˆλ…•ν•˜μ„Έμš”! ν˜„λŒ€ μ›Ή κ°œλ°œμ—μ„œ 데이터 κ΅ν™˜μ˜ 핡심인 JSON(JavaScript Object Notation)을 λ”μš± κ°•λ ₯ν•˜κ³  μ•ˆμ •μ μœΌλ‘œ λ§Œλ“€μ–΄μ£ΌλŠ” 도ꡬ,…

2κ°œμ›” ago

🏠 ECMAScript 3 ν˜Έν™˜μ„± μ™„μ „ 정리 κ°€μ΄λ“œ

❌ ECMAScript 3(E3)λž€ λ¬΄μ—‡μΌκΉŒ ECMAScript 3λŠ” 1999년에 κ³΅μ‹ν™”λœ μžλ°”μŠ€ν¬λ¦½νŠΈ ν‘œμ€€μ΄λ‹€. μ§€κΈˆ 보면 였래된 기술 κ°™μ§€λ§Œ,…

2κ°œμ›” ago

πŸ–₯ CoffeeScript μ™„μ „ κ°€μ΄λ“œ

CoffeeScriptλŠ” ν•œλ•Œ ν”„λ‘ νŠΈμ—”λ“œ 개발 μƒνƒœκ³„μ—μ„œ 맀우 인기 μžˆμ—ˆλ˜ μ–Έμ–΄μ˜€κ³ , μ§€κΈˆλ„ νŠΉμ • ν”„λ‘œμ νŠΈλ‚˜ λ ˆκ±°μ‹œ μ‹œμŠ€ν…œ, κ°„κ²°ν•œ…

2κ°œμ›” ago

🏠 λ©”λͺ¨λ¦¬ λˆ„μˆ˜(Memory Leak) μ‰½κ²Œ μ΄ν•΄ν•˜κΈ°: πŸ–₯ λ‚­λΉ„λ˜λŠ” μ»΄ν“¨ν„°μ˜ κΈ°μ–΅λ ₯ ❌

ν˜„λŒ€μ μΈ ν”„λ‘œκ·Έλž˜λ° ν™˜κ²½μ—μ„œ λ©”λͺ¨λ¦¬ λˆ„μˆ˜(Memory Leak)λŠ” μ—¬μ „νžˆ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ μ„±λŠ₯ μ €ν•˜μ™€ μΆ©λŒμ„ μΌμœΌν‚€λŠ” μ£Όμš” 원인 쀑…

2κ°œμ›” ago

πŸ–₯️ λΈŒλΌμš°μ € λ Œλ”λ§ κ³Όμ • (CRP) : μ›ΉνŽ˜μ΄μ§€κ°€ λˆˆμ•žμ— λ‚˜νƒ€λ‚˜κΈ°κΉŒμ§€μ˜ λ§ˆλ²•

(Critical Rendering Path, 핡심 λ Œλ”λ§ 경둜 μ™„λ²½ 이해) μ›Ή λΈŒλΌμš°μ €μ— μ£Όμ†Œλ₯Ό μž…λ ₯ν•˜κ³  μ—”ν„°λ₯Ό λˆ„λ₯΄λŠ” μˆœκ°„,…

2κ°œμ›” ago