『가상면접 사례로 배우는 대규모 시스템 설계 기초』의 처리율 제한기를 실제 배포 가능한 Spring Boot 스타터 라이브러리로 구현. 어노테이션 한 줄로 5가지 알고리즘을 선언적으로 적용. 2인 공동 개발 — AOP 진입점·SpEL 키 해석·분산 락·Auto Configuration을 담당.
알고리즘 5종 전략 패턴, AOP 선언적 적용, 분산 락까지 — 재사용 가능한 라이브러리 설계의 핵심 과제 해결
Token Bucket · Leaky Bucket · Fixed Window Counter · Sliding Window Logging · Sliding Window Counter를 Handler 전략으로 격리. 설정값 한 줄로 알고리즘 교체.
AOP 어드바이스가 비즈니스 로직 밖에서 제한을 처리. 메서드에 어노테이션 하나만 붙이면 키 해석 → 락 획득 → 알고리즘 판정 → 헤더 세팅까지 자동.
"#userId" 같은 표현식으로 요청별 키를 동적 생성. executeCondition으로 "프리미엄 사용자는 제한 제외" 같은 조건부 Rate Limiting 지원.
멀티 인스턴스 환경에서 카운터 갱신 경합을 분산 락으로 제어. waitTime·leaseTime 설정 가능, 단일 서버는 ConcurrentHashMap 락으로 스왑.
제한 초과 시 지정한 대체 메서드로 우아하게 응답. X-RateLimit-Remaining / Limit / Retry-After 표준 헤더를 자동 세팅해 클라이언트 백오프 지원.
스타터 의존성 추가만으로 동작. spring.factories 기반 자동 구성으로 캐시(Redis/로컬)·락·알고리즘을 프로퍼티로 조립.
핵심 로직(rate-limiter)과 Spring Boot 자동 구성(autoconfigure), 사용 예제(example)를 모듈로 분리. 라이브러리 소비자는 스타터 의존성만 추가.
core · autoconfigure · example어노테이션 감지 → SpEL 키 해석 → 락 획득 → 알고리즘 핸들러 판정 → 응답 헤더 세팅. 각 단계가 인터페이스로 분리되어 구현 교체 가능.
@RateLimiting → RateLimitAop → Handler실제 Redis 컨테이너로 알고리즘·자동구성·분산 락을 통합 테스트. docs/에 아키텍처·알고리즘 비교·성능 튜닝·부하테스트 문서화.
Testcontainers · docs/load-testCI 워크플로 4종, 이슈·PR 템플릿, CONTRIBUTING 가이드까지 갖춘 라이브러리 운영. 2인 협업으로 리뷰 기반 개발.
GitHub Actions ×4 · PR templatesRate Limiting은 어떤 서비스에나 필요한 횡단 관심사. 애플리케이션에 박아넣는 대신 Auto Configuration을 갖춘 스타터로 만들어, 의존성 추가와 프로퍼티 설정만으로 어느 서비스든 재사용하도록 설계.
알고리즘마다 정확성·메모리·버스트 허용의 트레이드오프가 다름. Handler 인터페이스 뒤로 5종을 격리해 설정값으로 교체하고, 새 알고리즘은 Handler 구현 추가만으로 확장.
멀티 인스턴스에서 같은 키의 카운터를 동시에 갱신하면 초과 허용이 발생. Redisson 락으로 갱신을 직렬화하되, 락·캐시를 각각 추상화해 단일 서버는 로컬 자료구조로 동작하도록 이원화.
2인 공동 개발. AOP 진입점(RateLimitAop·SpEL 파서)과 분산 락 모듈, Auto Configuration을 직접 설계·구현했고(해당 디렉토리 커밋 대부분 담당), 알고리즘별 핸들러 구현은 팀원과 분담.