java

지난 글에 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의 성능 병목점을 분석하고, 이를 개선하기 위한 여러 방안을 비교해보겠습니다. 현재 구현의 문제점매 요청마다 전체 맵을 순회현재..
1편 - 예외 알림 슬랙 연동으로 가볍게 운영하기https://buly.kr/9tBJYQC 들어가며지난 글에서는 Slack 알림 시스템을 만들고, 동일한 예외가 반복해서 발생하더라도 알림이 중복으로 발생하지 않도록 처리율 제한 클래스를 만들었습니다. (SimpleRateLimiter) 단일 서버 환경에서는 기대한 대로 잘 작동했습니다. 근데 배포 전에 한번 더 생각해볼 점이 있다고 생각했습니다. 잠재적 문제점들에 대해서 분석한 점을 정리해보겠습니다. 어떤 문제가 예상될까?서버별 독립 동작private final ConcurrentHashMap alerts = new ConcurrentHashMap();ConcurrentHashMap이 서버 간 데이터 동기화가 불가능하다는 직접적인 공식 문서는 없지만, J..
목표와 범위목표: 운영 상에서 발생한 예외를 "채널명"으로 실시간 알림이 오게 하고 싶었습니다.범위: 비즈니스 로직 상에서 선언한 커스텀 예외를 타겟으로 잡았습니다.스크린샷 ↓ 파일 구조⏺ src/main/java/com/eventitta/common/notification/ ├── config/ │ └── SlackProperties.java ├── domain/ │ ├── AlertLevel.java │ ├── SlackAttachment.java │ ├── SlackField.java │ └── SlackMessage.java ├── exception/ │ ├── AlertErrorCode.java │ └── SlackNotificationException..
Stack 두개를 이용하여 Queue구현하기 자바 import java.util.Stack; class Queue { Stack inStack; Stack outStack; public Queue() { this.inStack = new Stack(); this.outStack = new Stack(); } public void enqueue(T value) { inStack.add(value); } public T dequeue() { if (!inStack.isEmpty()) { while(!inStack.isEmpty()) { outStack.add(inStack.pop()); } } return outStack.pop(); } @Override public String toString() { re..
https://school.programmers.co.kr/learn/courses/30/lessons/49993#fn1 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; class Solution { public int solution(String skill, String[] skill_trees) { int answer = 0; char[] chars = skill.t..
솜사탕코튼
'java' 태그의 글 목록 (2 Page)