피드로 돌아가기
Building VS — 2026-06-23
Dev.toDev.to
Backend

Cron 기반 리마인더 전환으로 API 지연시간 60% 감소

Building VS — 2026-06-23

Roberto Luna2026년 6월 24일6intermediate

Context

예약 생성 시 알림 발송을 동기적으로 처리하여 외부 SMS 게이트웨이의 ETIMEDOUT 및 메인 스레드 블로킹 발생. 알림 조회 엔드포인트의 무거운 Join 쿼리로 인해 200ms 이상의 높은 응답 지연 및 UI 프리징 현상 노출.

Technical Solution

  • 요청 생명주기에서 알림 로직을 완전히 분리하여 30분 주기 Cron Job으로 전환한 비동기 처리 구조 설계
  • booking-reminders.service.ts 내에 24시간 및 1시간 전 전송 대상자를 정밀하게 필터링하는 Two-tier 스케줄링 로직 구현
  • BullMQ 도입 시 발생하는 Redis 관리 오버헤드와 Dead-letter Queue 복잡성을 배제하고 단순 Cron 기반의 상태 기반 쿼리로 대체
  • 무거운 Aggregation 쿼리를 Materialized View로 전환하여 조회 성능 최적화 및 컨트롤러 코드 52% 축소
  • JWT 기반의 Tokenized Confirmation Flow를 도입하여 예약 확정 상태 변경의 무결성 확보
  • Frontend의 NotificationBell 컴포넌트에 효율적인 폴링 메커니즘을 적용하여 불필요한 전수 조회를 방지

1. 외부 API 연동 로직이 Request-Response 사이클을 블로킹하는지 확인

2. 실시간성이 절대적이지 않은 알림은 상태 필드(e.g., reminder_sent)를 활용한 배치 처리 검토

3. 복잡한 Join이 반복되는 조회 엔드포인트에 Materialized View 적용 가능성 분석

4. 인프라 복잡도 증가(Redis 등) 대비 실제 성능 이득의 Trade-off 정밀 측정

원문 읽기