Spring

"이벤트 있다" 사이드 프로젝트는 지역 기반 커뮤니티 플랫폼으로, 사용자들이 게시글이나 모임을 작성할 때 지역을 선택해야 합니다.한국의 행정구역 데이터는 다음과 같은 특징이 있습니다. 계층 구조: 시/도 -> 시/군/구 -> 읍/면/동 (3단계)데이터 크기: 총 18,695개의 지역 (시/도 16개 + 시/군/구 264개 + 읍/면/동 18,695개)변경 빈도: 연 1~2회 (행정구역 개편 시에만)조회 빈도: 매우 높음 (모든 게시글/모임 작성 시)Region Entity 설계 🔽더보기더보기더보기더보기@Entity@Table(name = "regions")@Getter@NoArgsConstructor@AllArgsConstructor@Builderpublic class Region { @Id ..
Fixed Window, Sliding Window Log, Sliding Window Counter 방식의 처리율 제한 알고리즘을 구현해보았습니다.이번에는 토큰 버킷(Token Bucket) 방식을 실제 구현 코드와 함께 정리해보겠습니다.Token Bucket Rate Limiter는 뭘까?토큰 버킷은 일정한 속도로 토큰을 버킷에 충전하고, 각 요청마다 토큰을 소모하는 방식입니다.버킷이 가득 찰 때까지 토큰이 축적되므로 일시적인 과도한 트래픽을 허용하면서, 장기적인 평균 처리율을 보장하는 특징이 있습니다.17:00 [5개] -> 3개 요청 -> [2개] 남음17:01 [2개] -> 1개 충전 -> [3개] -> 2개 요청 -> [1개]17:02 [1개] -> 1개 충전 -> [2개] -> 5개 요청 -..
이 글에서는 Fixed Window Rate Limiter의 동작 원리와 마주칠 수 있는 3가지 핵심 문제점을 정리해두려고 합니다. Fixed Window Rate Limiter가 뭘까?한글 말 뜻으로는 고정된 윈도우 처리율 제한 입니다. 이해하기 쉬울 정도의 예상된 동작을 유추할 수 있습니다. 5분 간격의 윈도우했다고 가정00시 00분 ~ 00시 04분 59초 -> 윈도우 100시 05분 ~ 00시 09분 59초 -> 윈도우 2~.. 동작 원리사이드 프로젝트에서 사용한 케이스는개발에서 개발자가 만든 런타임 예외를 설정하고, 이 예외가 발생한다면 슬랙으로 알림이 올 수 있도록 설정할 때, 같은 예외 같은 로깅 레벨의 예외가 발생했을 경우에 중복으로 알림을 발송하지 않도록 제한을 걸어둘 때 사용하였습니다...
지난 글에 Rate Limiter 성능 문제를 해결하기 위해 Caffeine 캐시를 도입했습니다.처리율 제한 시스템을 설계했을 때 어떤 알고리즘이 있으며, 어떤 이유로 선택했는지 정리하려고 합니다. 1. 왜 Rate Limiter를 직접 구현하게 되었는지?평소에 하던 업무에서 다음과 같은 부분을 중점으로 설계하고 구현한 적이 없어서 따로 고민해보지는 않았었습니다.다만, 사이드 프로젝트에서 슬랙 알림 연동을 마치고 예외나 배치 스케줄러가 종료했을 때 알림이 중복으로 발송되는 것에 대해 생각을 해보았습니다. 그래서 ConcurrentHashMap 형식으로 알림 발송 현황을 저장하는 방식을 선택해보았습니다. 처음 구현 코드에서는"고정윈도우 + 슬라이딩 요소"를 담았습니다. 고정 윈도우적 특성각 키별로 첫 ..
예외가 발생했을 때 알림을 슬랙과 연동하는 기능을 구현하면서, 처리율 제한(Rate Limiter) 을 도입하였습니다.https://medium.com/@anil.goyal0057/rate-limiter-sliding-window-logs-algorithm-using-deque-58831661b9eehttps://www.codereliant.io/p/rate-limiting-deep-dive?utm_sourcehttps://medium.com/%40shivammishra20121999/rate-limiter-696870cb99a2 이번 글에서는 현재 개발중인 RateLimiter의 성능 병목점을 분석하고, 이를 개선하기 위한 여러 방안을 비교해보겠습니다. 현재 구현의 문제점매 요청마다 전체 맵을 순회현재..
젠킨스와 nginx를 통해서 배포 자동화를 구현해보려고 하였습니다.여기에 관련해서 시행착오가 많았는데 정리하려고 합니다. 일단 구조는 다음과 같습니다. 1. aws ec2 instance jenkins 설치2. docker compose 로 nginx, postgresql, certbot, spring 이미지 빌드 후 실행 이상하다고 생각할 수 있는데, 맞습니다.  1번 방법을 먼저 수행해봤고, 2번 방법으로 나중에 도입했기 때문에 보통은 jenkins도 docker compose로 띄워야 네트워크 이슈도 적고, 관리도 편하다는 것을 나중에 깨달았습니다. AWS EC2 프리티어 기준입니다. 1. SWAP 메모리 설정관련해서 이전에 포스팅을 한 적이 있습니다.https://iii.ad/67bfb72. Do..
솜사탕코튼
'Spring' 태그의 글 목록