기술블로그
-
트러블슈팅: queryDSL 중복집계, 비정상적으로 큰 count 문제(with only_full_group_by)
MySQL의 ONLY_FULL_GROUP_BY모드와(디폴트 설정),JPA/QueryDSL에서 아이템별 집계를 구현할 때 발생한 문제(groupby 중복 행, count 합계 뻥튀기)해결 과정을 정리한 문서입니다. 1. 문제 상황JPQLQuery query = queryFactory .select(new QMarketListResponseDto( market.item.id, market.item.name, JPAExpressions .select(market.amount.sum().coalesce(0)) .from(market) .where(market.item.id.eq(item.id)), ..
2025.02.02
-
Spring WebFlux를 활용한 HTTP메서드 처리 확장과 성능 테스트
로드밸런서 공부를 할 때 사용했던 코드를 가져와서 사이드 프로젝트를 만들고 있는데,현재 로드밸런서는 요청값을 처리하는 데에 한계가 있다.컨트롤러는 @GetMapping을 통해 오직 GET요청만 처리하도록 설계되어 있고,RequestProcessor는 내부적으로 HTTP요청을 처리하며 POST방식만을 사용하여, POST요청만 전송 가능하다. 다양한 HTTP메서드를 처리하려면 요청에 따라 다른 로직을 처리하는 추가 설계가 필요하다. 설계 방향성 잡기: 사용자 편의성을 고려하자!직관적으로 생각해봤을때, 클라이언트는 로드밸런서의 존재를 알지 못한다.사용자가 api를 호출할 때 마다 request에다 method도 입력해서 보내는 것 보다, api자체를 여러 개로 나누어 관리하는 것이 유저 입장에서 편리할 것이..
2025.01.26
-
apache jmeter로 부하테스트 해보기
2025.01.23 - [개인 공부용 프로젝트/loadbalancer.project] - 로드밸런서의 동시성 문제 해결을 위한 각종 플랜ㄴ이 글에서 이어집니다 이전 부하테스트가 왜 실패했는가를 생각해보았는데 그건 부하테스트가 아니었다초당 100건으로 부하테스트라니 내가 생각해도 웃기긴 하다그래서 오늘 상당한 과부하를 일으킬거기 때문에 내 노트북에서 테스트할 순 없고 이놈이 희생해야겠다도커에다 로드밸런서를 올리고,도커내부의 같은 네트워크 안에서 실행되기에 서버 주소도 로컬호스트에서 도커내부의 주소로 바꿔주었다인식이 잘 된다 바로 부하테스트를 진행해보자 오늘은 모두 같은 플랜으로 하기보다는, 부하를 점점 늘려서 한계치를 테스트 해볼 계획이다.우선 우리 도커가 튼튼하리라 믿고 초당 10만의 사용자를 보내보자1..
2025.01.25
-
로드밸런서의 동시성 문제 해결을 위한 각종 플랜
2025.01.17 - [개인 공부용 프로젝트/loadbalancer.project] - 직접 만든 로드밸런서로 다중인스턴스 관리하기지난 로드밸런서 글에서, synchronized와 atomic변수의 차이를 개념적으로 알아보았다면이번에는 concurrentHashMap과 threadLocal을 이용한 전략도 추가하고, 부하테스트를 진행해서 4가지 방법의 차이를 몸소 느껴보자 synchronizedpublic class RoundRobinSynchronized implements LoadBalancerStrategy { private int currentIndex = 0; @Override public synchronized String getNextServer(List healthySe..
2025.01.23
-
내 애기 로드밸런서가 드디어 숨을 쉬어요
https://github.com/roqkfchqh/loadbalancer GitHub - roqkfchqh/loadbalancerContribute to roqkfchqh/loadbalancer development by creating an account on GitHub.github.com10시간 걸렸다대충 깡통 스프링부트 프로젝트를 생성하고 헬스체킹용 컨트롤러 클래스 메서드를 추가한다근데 깡통으로 하는데 왜 10시간 걸렸냐면 아웃소싱 프로젝트로 실험하겠다고 욕심부렸다가 8시간날렸다리눅스놋북으로 환경이 바뀌어서 db쪽에서 계속 에러나서(알고보니까 이것도 ㅋ sql ddl auto설정 안 했었음 멍청이)깔끔히 포기하고 로드밸런서만 확인하는쪽으로 틀었다services: app1: containe..
2025.01.21
-
직접 만든 로드밸런서로 다중인스턴스 관리하기
로드밸런싱은 서버에 가해지는 부하(로드)를 분산(밸런싱) 해주는 기술이다. 클라이언트와 서버 풀 사이에 위치하며, 한 대의 서버로 부하가 집중되지 않도록 트래픽을 관리해서 각각의 서버가 최적의 퍼포먼스를 보일 수 있도록 해준다. ELB로 그냥 사용하면 되지만 어떻게 모르고 사용할 수 있겠는가 싶어서(사실 튜터님한테 과제받음 ㅋ) 직접 구현해보고, 어떤 식으로 흘러가는지 알아보도록 하자. 내가 구현할 로드밸런서는 모듈화된 단 하나의 로드밸런서고, 어떤 프로젝트에든 적용해볼수있는걸로 만들어보자.@Slf4j@Componentpublic class LoadBalancer { private final HealthCheckService healthCheckService; private int curren..
2025.01.20