Pingu
영차영차! Backend

설문조사용 폼 서비스에 임시저장 기능을 개발하며, MongoDB의 NoSQL 기반 대량 JSON 데이터 관리 방식이 고속·고빈도 데이터 송수신 요구사항에 적합하지 않음을 발견했습니다. 이 글에서는 이를 해결하기 위한 설계 과정과 아키텍처를 소개합니다.

2026. 1. 21.
7개 태그
읽기
임시저장
SQLite
MongoDB
Nestjs
아키텍처
데이터베이스
Better-SQLite3

SQLite 임시 저장소에 데이터를 저장하기 위해 TypeORM, Sequelize, Drizzle ORM과 RAW 쿼리 방식을 비교 검토한 후, 유지보수성과 성능을 고려해 Drizzle ORM을 선택한 과정을 소개합니다.

2026. 1. 21.
8개 태그
읽기
임시저장
ORM
TypeORM
Drizzle ORM
SQLite
데이터베이스
Better-SQLite3
RAW 쿼리

HTTP 통신의 반복적 요청 부하를 해결하기 위해 WebSocket을 활용한 실시간 임시저장 기능을 구현했습니다. NestJS Gateway, Kubernetes 다중 Pod 환경에서의 세션 관리, Redis를 활용한 중앙 집중식 세션 저장 전략을 소개합니다.

2026. 1. 21.
8개 태그
읽기
임시저장
WebSocket
Socket.io
Nestjs
Kubernetes
Pod
네임스페이스
Gateway

휘발성 임시 저장 데이터의 일관성을 보장하기 위해 BullMQ의 repeatable job을 활용한 주기적 백업, 소켓 연결 해제 시 즉시 백업, Kubernetes Pod 종료 시 Graceful Shutdown을 통한 데이터 보존 전략을 구현했습니다.

2026. 1. 21.
7개 태그
읽기
임시저장
Cron Job
백업
Bull Queue
Nestjs
반복 작업
Graceful Shutdown

임시저장 기능 고도화 연재의 마지막 글입니다. SQLite 임시 저장소, WebSocket 실시간 통신, Redis 세션 관리, MongoDB 영구 저장소, 백업 전략을 포함한 전체 아키텍처를 정리합니다.

2026. 1. 21.
3개 태그
읽기
임시저장
마무리
아키텍처

운영 중인 애플리케이션의 성능과 지표를 제대로 측정하지 않았던 문제를 인식하고, Grafana와 Elastic APM을 활용해 메모리, CPU, 네트워크, 이벤트 루프 지연 등을 분석한 결과를 공유합니다.

2026. 1. 21.
6개 태그
읽기
모니터링
성능 측정
메모리
CPU
Node.js
APM

비동기 큐를 활용한 배치 작업이 메모리 누수의 주요 원인임을 확인했습니다. 배치 방식과 즉시 적재 방식을 시뮬레이션하여 각각의 장단점을 분석하고, 스케줄러 제거와 Redis 버퍼 최적화를 통한 하이브리드 접근 방식을 제안합니다.

2026. 1. 21.
6개 태그
읽기
모니터링
배치 처리
Google Sheets
데이터 수집
Queue
스케줄링

스케줄러를 제거하고 이벤트 기반 큐 시스템으로 전환했습니다. Redis 버퍼에 ID만 저장하는 방식으로 메모리를 최적화하고, BullMQ를 활용한 배치 처리, 슬라이딩 윈도우 rate limiter, Dead Letter Queue를 통한 에러 처리까지 포함한 전체 설계를 소개합니다.

2026. 1. 21.
4개 태그
읽기
모니터링
성능 분석
데이터 분석
대시보드

큐 시스템 개선의 임팩트를 메모리, CPU, 네트워크, 이벤트 루프 지표로 측정하고 분석했습니다. 또한 기술 코드/설계, 기술 운영, 제품, 커뮤니케이션 관점에서 프로젝트를 회고하며 개발자로서의 성장을 점검합니다.

2026. 1. 21.
5개 태그
읽기
모니터링
성능 최적화
Node.js
이벤트 루프
메모리 최적화