Fixed Window Counter

이 μ•Œκ³ λ¦¬μ¦˜μ˜ 핡심 μ•„μ΄λ””μ–΄λŠ”,

β€œμ •ν•΄μ§„ μ‹œκ°„ ꡬ간(Window)λ§ˆλ‹€ μš”μ²­ 횟수λ₯Ό μΉ΄μš΄νŠΈν•˜κ³ , κ·Έ νšŸμˆ˜κ°€ μ •ν•΄μ§„ ν•œλ„(Limit)λ₯Ό λ„˜μ§€ λͺ»ν•˜κ²Œ λ§‰λŠ” 것” 이닀.

κ°€μž₯ κ°„λ‹¨ν•˜κ²Œ λΉ„μœ ν•˜μžλ©΄, "μ‹œκ°„μ œ μΆœμž…λ¬Έ" κ³Ό 같을 수 μžˆλ‹€.

  • κ³ μ •λœ μ‹œκ°„ ꡬ간 (Window): μΆœμž…λ¬Έμ΄ μ—΄λ €μžˆλŠ” μ‹œκ°„. (예: λ§€ 1λΆ„)

  • μΉ΄μš΄ν„° (Counter): κ·Έ μ‹œκ°„ λ™μ•ˆ ν†΅κ³Όν•œ μ‚¬λžŒμ˜ 수λ₯Ό μ„Όλ‹€. (예: 1λΆ„ λ™μ•ˆ 10λͺ…)

  • μ œν•œ (Limit): μ •ν•΄μ§„ 인원(10λͺ…)이 λͺ¨λ‘ ν†΅κ³Όν•˜λ©΄, λ‹€μŒ μ‹œκ°„μ΄ 될 λ•ŒκΉŒμ§€ 문을 λ‹«λŠ”λ‹€.

λ™μž‘ 방식

  1. μ‹œκ°„ ꡬ간 μ„€μ •: λ¨Όμ € μ‹œκ°„μ„ κ³ μ •λœ 크기둜 λ‚˜λˆˆλ‹€. 예λ₯Ό λ“€μ–΄, 1λΆ„, 10λΆ„, 1μ‹œκ°„ λ‹¨μœ„λ‘œ λ‚˜λˆŒ 수 μžˆλ‹€.

  2. μΉ΄μš΄ν„° μ΄ˆκΈ°ν™”: μƒˆλ‘œμš΄ μ‹œκ°„ ꡬ간이 μ‹œμž‘λ˜λ©΄, ν•΄λ‹Ή κ΅¬κ°„μ˜ μΉ΄μš΄ν„°λ₯Ό 0으둜 μ΄ˆκΈ°ν™”ν•œλ‹€.

  3. μš”μ²­ 처리 및 카운트 증가: μš”μ²­μ΄ λ“€μ–΄μ˜€λ©΄, ν˜„μž¬ μ‹œκ°„ κ΅¬κ°„μ˜ μΉ΄μš΄ν„°λ₯Ό 1 μ¦κ°€μ‹œν‚¨λ‹€.

  4. ν•œλ„ 확인: μΉ΄μš΄ν„° 값이 미리 μ„€μ •λœ ν•œλ„λ³΄λ‹€ μž‘μ€μ§€ ν™•μΈν•œλ‹€.

    • ν—ˆμš© (Allow): ν•œλ„ 이내라면 μš”μ²­μ„ μ²˜λ¦¬ν•œλ‹€.

    • κ±°λΆ€ (Deny): ν•œλ„λ₯Ό μ΄ˆκ³Όν–ˆλ‹€λ©΄ μš”μ²­μ„ κ±°λΆ€ν•œλ‹€.

  5. μœˆλ„μš° 리셋: ν˜„μž¬ μ‹œκ°„ ꡬ간이 λλ‚˜κ³  λ‹€μŒ μ‹œκ°„ ꡬ간이 μ‹œμž‘λ˜λ©΄, 이전 기둝은 λͺ¨λ‘ λ¬΄μ‹œν•˜κ³  2번 λ‹¨κ³„λ‘œ λŒμ•„κ°€ μΉ΄μš΄ν„°λ₯Ό λ‹€μ‹œ 0으둜 μ΄ˆκΈ°ν™”ν•œλ‹€.

  • 맀우 λ‹¨μˆœν•¨: 둜직이 κ°„λ‹¨ν•΄μ„œ μ΄ν•΄ν•˜κ³  κ΅¬ν˜„ν•˜κΈ° 쉽닀.

  • λ©”λͺ¨λ¦¬ 효율적: νŠΉμ • ν‚€(μ‚¬μš©μž, IP λ“±)에 λŒ€ν•΄ ν˜„μž¬ μΉ΄μš΄ν„° κ°’ ν•˜λ‚˜λ§Œ μ €μž₯ν•˜λ©΄ λ˜λ―€λ‘œ λ©”λͺ¨λ¦¬ μ‚¬μš©λŸ‰μ΄ 적닀.

πŸ‘Ž 치λͺ…적인 단점: μœˆλ„μš° 경계 문제 (Window Boundary Problem)

이 μ•Œκ³ λ¦¬μ¦˜μ˜ κ°€μž₯ 큰 λ¬Έμ œμ μ€ μ‹œκ°„ ꡬ간이 λ°”λ€ŒλŠ” 경계 μ§€μ μ—μ„œ μ„€μ •λœ ν•œλ„μ˜ μ΅œλŒ€ 2λ°°κΉŒμ§€ μš”μ²­μ΄ λͺ°λ¦΄ 수 μžˆλ‹€λŠ” 점이닀.

μ˜ˆμ‹œ: 1λΆ„λ‹Ή 10개의 μš”μ²­μ„ ν—ˆμš©ν•˜λŠ” 경우

  • μœˆλ„μš° 크기 = 1λΆ„

  • Limit = 10번 μš”μ²­ ν—ˆμš©

  • 12:00:00 ~ 12:00:59 β†’ μ΅œλŒ€ 10개 ν—ˆμš©

  • 12:01:00 ~ 12:01:59 β†’ μ΅œλŒ€ 10개 ν—ˆμš©

  • 12:02:00 ~ 12:02:59 β†’ μ΅œλŒ€ 10개 ν—ˆμš© ...

  • μœˆλ„μš° 1 (12:00:00 ~ 12:00:59)

    • μ‚¬μš©μžκ°€ 12:00:59 이 λ§ˆμ§€λ§‰ μˆœκ°„μ— 10개 μš”μ²­μ„ 보낸닀.

      β†’ 이 10개 μš”μ²­μ€ λͺ¨λ‘ ν—ˆμš©λœλ‹€.

  • μœˆλ„μš° 2 (12:01:00 ~ 12:01:59)

    • λ°”λ‘œ 1초 후인 12:01:00 에 또 10개 μš”μ²­μ„ 보낸닀.

      β†’ μƒˆ μœˆλ„μš°κ°€ μ‹œμž‘λ˜μ—ˆμœΌλ―€λ‘œ, 또 10개 μš”μ²­μ΄ λͺ¨λ‘ ν—ˆμš©λœλ‹€.

  • μ‹€μ œλ‘œλŠ” 1초(12:00:59 ~ 12:01:00 사이) λ™μ•ˆ 20개의 μš”μ²­μ΄ λ“€μ–΄μ™”λŠ”λ°,

  • Fixed Window CounterλŠ” β€œλΆ„ λ‹¨μœ„λ‘œλ§Œ 자λ₯΄κΈ° λ•Œλ¬Έμ—β€ 20개λ₯Ό λͺ¨λ‘ ν—ˆμš©ν•΄λ²„λ¦°λ‹€.

  • 이게 λ°”λ‘œ Burst λ¬Έμ œμ΄λ‹€.

πŸ’₯ κ²°κ³Ό: μ„œλ²„ μž…μž₯μ—μ„œλŠ”, 즉 μ‹€μ§ˆμ μΈ 1λΆ„ λ™μ•ˆ 20개의 μš”μ²­μ„ λ°›κ²Œ λ˜μ–΄ μˆœκ°„μ μœΌλ‘œ κ³ΌλΆ€ν•˜κ°€ λ°œμƒν•  수 μžˆλ‹€.

μ΄λŸ¬ν•œ 경계 문제 λ•Œλ¬Έμ—, 이 μ•Œκ³ λ¦¬μ¦˜μ€ μ •λ°€ν•œ μ œμ–΄κ°€ ν•„μš” μ—†λŠ” κ°„λ‹¨ν•œ μƒν™©μ—μ„œ μ‚¬μš©λ˜κ±°λ‚˜, 더 μ •κ΅ν•œ Sliding Windowλ‚˜ Token Bucket μ•Œκ³ λ¦¬μ¦˜μ˜ κ°œλ…μ„ μ΄ν•΄ν•˜κΈ° μœ„ν•œ 기초둜 주둜 μ–ΈκΈ‰λœλ‹€.

Last updated