본문 바로가기

전체 글5

Redis를 통한 Polling 구조 개선 : wait/notify 와 Lettuce Event Bus 활용기 Docker Image, Container 원격 배포 프로젝트를 진행하며 Redis와 Java의 wait/notify를 활용한 경험을 공유하려 합니다.( 해당 글에선 Lettuce나 Redis 사용방법이 없습니다. ) 컨테이너를 활용하는 시스템이라면 배포나 컨테이너 관리시에 Kubernetes나 Docker Swarm과 같은 오케스트레이션 툴이 대표적인 선택입니다. 하지만, 네트워크의 제약이 있는 상황이라면 이를 활용하기는 쉽지 않습니다. 제가 진행했던 프로젝트는 Out Bound-Only 네트워크 구조로, 일반적인 오케스트레이션 툴을 온전히 활용할 수 없는 상황이었습니다. 이로 인해 직접 배포 시스템을 설계 및 구현해야 했습니다. 이런 문제점을 해결하기 위해 가장 단순하게 떠올린 방식은 Polling.. 2025. 5. 28.
트랜잭셔널 메세지 PGMQ를 활용하며 사내 이기종 DB 데이터 처리 고도화 프로젝트를 진행하며 트랜잭셔널 메세지에 대해서 알아볼 수 있는 좋은 기회가 생겼다.기존에는 maria db에서 binary log 를 만들어내고 이를 읽고 처리해서 postgres (web application에서 사용하는 db) 로 데이터를 api로 전송하게 해줬다 이 방식은 트랜잭션 로그 테일링 패턴과 유사하지만 부족한 점이 많았음그러나, 최근 maria db 에서 postgres로의 migration을 진행했고 이에 따라 이기종 db 데이터 처리 프로젝트도 함께 변화해야 했다. 이 과정에서 트랜잭셔널 메세징 방식인 OutBox Pattern을 사용하고자 제안했고, 이를 더 간편하게 해주는 pgmq 라이브러리를 적용하게 됐는데 현재 포스팅에선 pgmq 라이브러리 .. 2025. 5. 9.
CompletableFuture 알아보기!! CompletableFuture최근 업무에서 Docker stats 정보를 수집해야 했는데 각 container 별 stats 정보를 가져오는 과정에서 병목 현상을 발견했다. 고작 10개의 container stats 정보 수집하는데 9초가 걸린 것.docker stats 수집 성능 최적화 과정에서 CompletableFuture를 알게 됐고 이를 통해 기존 9sec → 2sec 으로 성능 개선을 이뤄내게 됐다. (비동기 병렬 적용)completableFuture를 더 자세하게 정리해두면 추후 성능 개선에 유용하게 사용할 수 있을 것이라 생각하여 작성하게 됐다.비동기 처리특정 작업이 다른 작업과 독립적으로 동작 하도록 하여 다음 단계의 작업이 이전 작업의 완료를 기다리지 않고 동시에 실행할 수 있도록 하.. 2025. 3. 13.
Runtime Cron 변경 사내 프로젝트를 진행하면서 동적 cron탭을 구현해야 하게 됐다. 기존 스케줄링은 단순히 @Scheduled 어노테이션을 사용했었지만 스케줄링 시간이 변경될 때 마다 서버를 새로 올려야하는 번거로움이 많았다. 이를 해결하고자 api를 통해 관리자가 제어할 수 있도록 만들어 봤다. 스프링 스케줄러의 경우 @EnableScheduling, @Scheduled을 통해서 간단하게 스케줄링 작업을 지원해 준다. 그러나, 단순히 어노테이션 기반의 스케줄러를 사용하게 되면 한번 설정되어 있는 cron탭을 수정할 수 없다. 구글링을 해보면 ThreadPoolTaskScheduler를 구현하면 동적 크론탭을 가능하게 할 수 있다고 한다.간단하게 어떤 식으로 프로세스가 진행되는지 확인해 보며 ThreadPoolTaskSc.. 2025. 1. 17.