본문 바로가기

허브 살리기 프로젝트24

버전 충돌 의문점SDK를 개발하는 상황에서 왜 특정 프레임 워크에 의존하는 것이 좋지 않을까? 이에 대한 답은 보통 프레임 워크의 버전에 영향을 받기 때문이라고 한다. 조금 애매하게 알았던 탓인지, 다른 버전의 의존성을 같이 패키징 하는데 다른 버전이어도 상관 없지 않나? 라는 생각을 했었다. 그렇다면 여러 버전의 의존성이 있는 상황에는 어떤 일이 발생할까? 나는 JVM쪽 언어를 사용하기 때문에 해당 언어에 초점을 맞춰서 확인했다. 클래스로더와 버전 충돌단순하게 생각해보면, 버전이 다른 경우에도 동일한 패키지명과 이름을 갖는 클래스들이 존재할 것이다.그렇다면 버전만 다른데 동일한 클래스가 존재하면 어떤 클래스가 사용되는 걸까? 오라클 자바 문서 에 따르면 이미 클래스가 로드되어 있다면 해당 클래스를 사용한다는 것을.. 2024. 10. 24.
TopN 구하기 (3) 지난 글에 이어서 서비스에서 TopN을 구하는 다른 방식을 이야기 해보고자 한다. 지난 글에서 생각했던 범위를 확장하 초당 10만 건의 요청이 오는데 TopN을 사용자에게 보여 줘야 하는 요구사항이 있다면 어떻게 해결해야 할까? Redis의 한계우선 지난 글에서 사용했던 Redis의 자료구조를 활용하는 부분은 요구사항을 맞추는데 어려워 보인다. 가장 먼저 단일 Redis가 처리할 수 있는 연산이 초당 8만건 정도라고 하는데 Sorted Set은 하나의 키를 사용해서 연산을 진행 하는 것 이므로 클러스터 모드를 통한 접근은 의미가 없으며, write 성능이 요구사항을 따라가지 못한다. 또한 동기화를 위한 집계 성능 또한 초당 10만 건을 처리하는 것은 무리가 있다. 따라서 기존과는 다른 접근이 필요하다. .. 2024. 10. 23.
Feign Client Retry AWS의 ALB가 서비스의 앞에 붙어있는 경우 다른 서비스에서 해당 서비스에 연동을 할 때 ALB는 내부적으로 트래픽이 줄게 되면 scale in 을 진행한다. 해당 과정에서 제거 된 ALB의 커넥션으로 요청이 가는 경우 502 Bad Gateway를 응답하게 된다. 이런 외부 서비스 연동에서의 외적인 예외 상황은 어플리케이션에서 직접 핸들링 할 수 없기 때문에 어쩔 수 없는 부분이다. 그래서 개발자들은 어플리케이션에서 이런 외부 서비스 연동중 예외 상황에서 재시도를 하여 처리 하게 된다. 관련하여 코드레벨에서 고민하고, 경험했던 사항을 공유 하고 싶어 Spring을 사용하는 환경에 한정하여 Feign Client를 사용하여 외부 서비스 연동시 어떻게 재시도 처리를 할 수 있을지 삽질했던 내용을 공유하려.. 2024. 8. 30.
Redis로 Rate Limit 구현 Rate Limit 특정 API 호출을 제한하고싶거나(계산량이 많거나 병목으로 이어질 수 있는 API) 사용자별로 호출 횟수 제한등 특정 처리량을 일정하게 유지하싶을 때 Rate Limit을 사용한다. 단어 그대로 비율을 제한하는 기능이다. 어디에 사용하는지는 이미 많은 사례들이 있으니 이 글에서는 Redis를 사용한 구현 방법 및 사용 이유에 관해서 초점을 맞추려고 한다. Why Redis?먼저 전제 조건은 어느정도 요청을 받는 어플리케이션이라고 가정을한다. 작은 어플리케이션에서는 rate limite을 bucket4j와 같은 프로세스 내부에서 특정 알고리즘을 사용하여 제한하는 방식으로 처리할 수 있다. 하지만 프로세스 측면이 아닌 서비스의 관점에서 특정 요청을 제한하고 싶을 때 재배포를 하거나 부하를.. 2024. 6. 23.