토큰 버킷 개념
요청 속도 제한하기
토큰 버킷 개념은(는) CoddyKit의 무료 Go Academy 강의입니다. 이것은 4개 중 1번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Go Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Go Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
속도 제한이 필요한 이유
속도 제한은 단위 시간당 수행할 수 있는 작업 수를 제한합니다. 이를 통해 API를 악용으로부터 보호하고, 제3자 할당량을 준수하며, 부하가 걸린 상황에서도 시스템을 안정적으로 유지합니다.
- 과부하를 방지합니다
- 공정한 사용을 강제합니다
- 상위 서비스의 제한을 준수합니다
토큰 버킷 모델
토큰을 담는 버킷을 생각해 보세요. 각 요청은 진행하려면 토큰 하나를 가져가야 합니다. 토큰은 일정한 속도로 보충됩니다. 버킷이 비어 있으면 요청은 기다리거나 거부됩니다.
속도와 순간 처리량
토큰 버킷은 두 매개변수로 정의됩니다. 속도는 초당 추가되는 토큰 수이고, 순간 처리량은 버킷 용량입니다. 순간 처리량을 설정하면 일정한 속도를 잠시 초과하는 요청을 허용할 수 있습니다.
시간에 따른 보충
속도가 초당 토큰 5개라면 약 200밀리초마다 토큰 하나가 나타납니다. 버킷에는 순간 처리량보다 많은 토큰을 담을 수 없으므로 사용하지 않은 용량이 영원히 누적되지 않습니다.
순간 요청 허용하기
버킷이 가득 찬 상태에서 순간 처리량이 10이면 최대 10개의 요청을 즉시 처리할 수 있습니다. 그 후 요청은 일정한 속도에 맞춰 처리됩니다. 이를 통해 응답성과 제어 사이의 균형을 맞출 수 있습니다.
간단한 시간 기반 확인
일정한 간격으로 허용 신호를 내보내는 주기 신호기를 사용하여 속도 제한을 근사할 수 있습니다. 각 요청은 다음 신호까지 기다립니다.
ticker := time.NewTicker(200 * time.Millisecond)
defer ticker.Stop()
for i := 0; i < 3; i++ {
<-ticker.C
fmt.Println("request", i)
}토큰 버킷과 누수 버킷 비교
누수 버킷은 일정한 속도로 비워져 출력을 완전히 평탄화하고 순간적인 요청을 허용하지 않습니다. 토큰 버킷은 용량까지 순간적인 요청을 허용합니다. API 제한에는 토큰 버킷이 더 일반적으로 사용됩니다.
최소 버킷 시뮬레이션
이 실행 가능한 예제는 100밀리초마다 보충되는 용량 3의 토큰 버킷을 시뮬레이션하여 어떤 요청이 허용되는지 보여줍니다.
package main
import (
"fmt"
"time"
)
func main() {
tokens := 3
last := time.Now()
rate := 100 * time.Millisecond
for i := 0; i < 6; i++ {
elapsed := time.Since(last)
refill := int(elapsed / rate)
if refill > 0 {
tokens += refill
if tokens > 3 {
tokens = 3
}
last = time.Now()
}
if tokens > 0 {
tokens--
fmt.Println("request", i, "allowed")
} else {
fmt.Println("request", i, "rejected")
}
time.Sleep(40 * time.Millisecond)
}
}Allow, Wait, Reserve 비교
제한기는 보통 세 가지 동작을 제공합니다. Allow는 즉시 참 또는 거짓을 반환하고, Wait는 토큰을 사용할 수 있을 때까지 차단하며, Reserve는 얼마나 기다려야 하는지 알려줍니다. 차단할 수 있는지에 따라 선택하세요.
제한이 적용되는 범위
속도 제한은 클라이언트별, 엔드포인트별 또는 전역으로 적용할 수 있습니다. 클라이언트 IP를 키로 사용하는 제한기 맵은 클라이언트별 할당량을 적용하고, 하나의 공유 제한기는 전체 처리량을 제한합니다.
매개변수 선택하기
속도를 하위 서비스의 할당량에 맞추세요. API가 분당 600개의 요청을 허용한다면 속도를 초당 10개로 설정합니다. 평균 처리량을 초과하지 않으면서 예상되는 순간적인 증가를 흡수하도록 순간 처리량을 설정하세요.
빠른 확인
토큰 버킷에 대한 이해도를 확인해 보세요.
복습
토큰 버킷 개념을 배웠습니다:
- 요청마다 토큰을 사용하고 일정한 속도로 토큰을 보충합니다
- 순간 처리량은 급증한 요청을 위한 버킷 용량입니다
- 토큰 버킷은 순간적인 요청을 허용하지만 누수 버킷은 허용하지 않습니다
- Allow, Wait, Reserve가 일반적인 API입니다
AI 튜터와 함께 Go을(를) 배우세요 — 무료
브라우저에서 실제 코드를 작성하고 실행하며, 24/7 AI 튜터로부터 즉각적인 도움을 받고, 웹이나 앱에서 중단한 부분부터 계속 학습하세요.
- 코스
- 51
- 레슨
- 203
자주 묻는 질문
“토큰 버킷 개념” 강의는 무료인가요?
네 — “토큰 버킷 개념” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Go Academy 강의 전체를 잠금 해제할 수 있습니다. Go Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“토큰 버킷 개념”에서 뭘 배우나요?
요청 속도 제한하기 브라우저에서 직접 실행하는 실습 코드로 Go Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Go Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Go Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 1번째 강의입니다.
“토큰 버킷 개념” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Go Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Go Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.