목록2024/06 (3)
Lewis's Tech Keep
java 21 로 버전업하면서 Spring kafka consumer도 virtual threads 로 사용하고 싶었기에 ListenerContainerFactory 빈을 등록할 때 링크 를 참고해서 AsyncTaskExecutor와 virtualThread 옵션을 활성화 시켜봤다.그러나 운영 배포 후 rebalancing 이 계속 발생하면서 파드가 떨어지기 시작했다.왜 그런가 했더니 설정 시 asyncTaskExecutor.setConcurrencyLimit(SimpleAsyncTaskExecutor.UNBOUNDED_CONCURRENCY);아래와 같이 TaskExecutor ConcurrenyLimit 정책을 UNBOUNDED_CONCURRENCY로 가져갔더니 쓰레드를 무한히 생성하였고 이로 인하여..
Spring Hibernate Envers 사용 시 아무것도 설정하지 않고 사용 시 revisionId와 revision timestamp를 저장하는 revinfo라는 테이블이 있는데, 해당 테이블의 revisionId 값은 integer로 저장된다.Dev 환경이라면 괜찮지만 Production 환경에서 Envers를 사용하고 있고 자주 기록하는 서버라면 Integer MAX값인 21억을 넘는 것은 현실이 될 수도 있다.이런 경우 테이블이 이미 생성되어 있는 경우 마이그레이션과 함께아래와 같이 CustomRevisionEntity를 준비해서 변경해주는 것이 좋다.-- table seq type 변경ALTER TABLE revinfo ALTER COLUMN rev TYPE BIGINT USING rev::..

배경설명어느 날이었다.저녁 시간 대 쯤 갑자기 모니터링 보드에서 급격한 hps 증가를 보았다.예제 그림너무 급격하게 오른 요청 수로 인하여 요청들이 쓰레드를 모두 차지하여 혼잡 상태에 들어가게 되고,이로 인해 파드가 무한 재시작하는 상황이 발생했다.판단증가 폭이 빨라도 너무 빨랐다.재배포나 일반적 플로우에서의 일시적 혼잡 상태라면 어느정도 피크를 달성한 이후에 정상화되어야 하고 유저의 일반적 재요청일 경우의 그래프라고 하기 어려울 만큼 해당 그래프는 급격한 증가세에 있었다.진행이로 인하여 플로우 상 진행되지 않는 서버가 존재하자 비즈니스적 타격을 받게 되었다.기존에 RateLimiter가 존재했지만 해당 RateLimiter는 결국 어플리케이션 레벨에 있는 라이브러리였기 때문에 쓰레드 워커가 일을 할 수..