본문 바로가기
반응형

backend31

BullMQ에서의 Pub/Sub BullMQ에서는 job을 Queue에 추가 → BullMQ가 Redis에 저장 → Worker가 Job을 꺼내 실행 → 상태 관리까지 자동처리위 프로세스로 동작하게 된다. 여기서 어떻게 worker가 job이 쌓인걸 알게 되는지 문득 궁금해졌다.BullMQ에서 Worker는 Pub/Sub 메커니즘을 통해 새로운 Job이 Queue에 추가된 것을 알게 된다. 동작 과정을 보게 되면Job 추가 (Producer): Producer(Job을 생성하는 주체)가 queue.add() 메서드를 호출하여 새로운 Job을 Queue에 추가한다.Redis에 저장 및 알림 (BullMQ)이 때 BullMQ는 이 Job을 JSON 형태로 직렬화하여 Redis의 리스트(list)에 RPUSH 명령어를 사용하여 추가한다. 큐.. 2026. 3. 12.
자바 웹 애플리케이션에서 스레드 풀을 사용하는 이유 컨텍스트 스위칭 비용이 줄어든다.요청마다 새 스레드를 만들면, 운영체제는 각 스레드마다 스택, 레지스터 상태, 메모리 정보 등을 관리해야 한다. 이게 많아지게 되면커널이 레지스터와 메모리 상태 저장/복원하는데 오버헤드 발생스레드 수가 많아질수록 CPU 캐시 미스 증가스케줄러가 많은 스레드 중에서 어떤 걸 실행시킬지 결정하는 비용 증가반면 스레드 풀은 제한된 개수의 스레드만을 재사용하기 때문에스레드 수 자체가 제한됨 → 스위칭 횟수도 줄고, 캐시 효율도 올라감idle 상태의 스레드 재사용 → 새로 만들고 파괴하는 비용이 없음GC 부담이 낮음 - 스레드 객체는 GC 대상이기 때문에예측 가능성스레드 풀 방식은 제한된 리소스 내에서 동작해서 예측 가능성이 높지만 요청마다 스레드를 생성하는 방식은 요청 폭주 시 .. 2026. 3. 12.
Replica Lag이 무엇인지, 그리고 개선! 새로 이직한 회사에서 replica lag 문제를 개선하라는 테스크를 받게 되었다. 이 과정에서 분석 내용과 어떻게 해결 했는지를 공유하고자 한다. Replica Lag이란?우선 replica lag이 무엇인지 알아보자. 레플리카 렉이란 데이터 베이르 Replication 환경에서 마스터 서버의 데이터 변경 사항이 slave 또는 replica 서버에 반영되는데 걸리는 시간 지연을 의미한다.복제는 즉시 (real-time)으로 이루어지지 않고 항상 약간의 시간 지연이 발생할 수 있다. 랙이 발생하는 원인은 보통 다음과 같다.네트워크 지연레플리카 처리 지연 읽기 부하 : 레플리카 서버에 과도한 읽기 쿼리가 몰려 마스터로부터 받은 변경 사항을 적용하는 작업 (SQL Thread)이 지연될 수 있다. 하드.. 2025. 10. 1.
[NestJS] TypeError: Do not know how to serialize a BigInt 문제 해결 개발을 진행하던 도중 만난 에러. 이 api를 호출했을 때 에러도 뱉어내지 않고 계속해서 응답이 오지 않는 상황이 벌어졌다. 서비스 단에서의 문제인가 봤더니 문제가 없었고 리턴 값에 console.log를 찍어봐도 잘 나오는데 리턴만 안됐다. gpt한테 바로 물어보니... 라길래 바로 json으로 강제로 직렬해보았다. 그랬더니 발생한 에러 TypeError: Do not know how to serialize a BigInt 이는 응답 데이터를 Nestjs에서는 JSON.stringify()로 직렬화할 때 BigInt 타입이 포함되어 있으면 발생하는 에러이다. 데이터가 많아질 거 같아 한 테이블의 pk 타입을 bigint로 설정했더니 이런 문제가 발생한 것이였다. 가장 안전하고 간단한 방법은 모든 Bi.. 2025. 5. 29.
반응형