[Low][UI] AI 어시스턴트 알림이 두개씩 생깁니다 #16

Closed
opened 2026-07-29 10:24:19 +09:00 by jhkim · 3 comments
Owner

제보 정보

  • ID: ERR-20260729-102419
  • 제보자: 장준희
  • 제출일시: 2026-07-29T10:24:19+09:00
  • 우선순위: P2

발생 환경

  • 페이지: AI 어시스턴트
  • 브라우저: 크롬

에러 증상 / 화면 문구

AI 어시스턴트의 알림 탭에서 동일한 알림이 2개씩 생깁니다.

스크린샷

screenshot


🤖 Cutshion 베타 에러 리포트 (Tally → n8n → Gitea)

## 제보 정보 - **ID**: ERR-20260729-102419 - **제보자**: 장준희 - **제출일시**: 2026-07-29T10:24:19+09:00 - **우선순위**: P2 ## 발생 환경 - **페이지**: AI 어시스턴트 - **브라우저**: 크롬 ## 에러 증상 / 화면 문구 AI 어시스턴트의 알림 탭에서 동일한 알림이 2개씩 생깁니다. ## 스크린샷 ![screenshot](https://s3.minio.gomcook.com/bug-reports/issue-16/1785288259994-1.png) --- 🤖 Cutshion 베타 에러 리포트 (Tally → n8n → Gitea)
jhkim added the category:UIseverity:Lowsource:betastatus:triage labels 2026-07-29 10:24:19 +09:00
LEEDASOM self-assigned this 2026-07-29 10:36:23 +09:00
Owner

[원인]
프로덕션 백엔드가 uvicorn 워커 2개(--workers 2)로 운영되던 것이 원인입니다.

  • 알림 스케줄러(APScheduler)가 프로세스 내장 방식이라 워커마다 1개씩, 총 2개가 떠 있었음
  • 매일 09:00 정기 알림(결재 대기 초과, 미처리 결재 안내 등)이 두 워커에서 동시에 실행되어 같은 알림이 2건씩 생성됨
  • 같은 날짜 중복 알림을 막는 로직은 있었으나, 두 워커가 동시에 실행되면서 중복 체크를 통과하는 레이스 컨디션 발생
  • 프로덕션 로그로 확인 완료: 스케줄러 기동 로그 2회, 동일 사용자 대상 알림 생성 로그 2회씩 기록
  • 로컬(개발 환경)은 단일 워커라 재현되지 않았음

[수정 내용]

  1. 스케줄러 단일 실행 보장 (37bca33) — 워커가 몇 개든 리더 워커 1개만 스케줄러를 실행하도록 리더 선출 lock 추가. 서버 시작 시 1회성 작업(휴가 자동 부여 보정 등)도 동일하게 적용. 회귀 테스트 추가, 전체 테스트 527건 통과.
  2. 프로덕션 워커 수 2→1 축소 (99c666b) — async 서버라 단일 워커로 충분하며, 멀티 워커 시 실시간 알림(SSE) 전달이 간헐적으로 유실되는 문제도 함께 해소. 임베딩 모델 중복 로드가 사라져 서버 메모리도 절감.

메모리도 절감된다고 하니 아주 좋은 발견이었습니다... ㅎㅎ 굿입니다👍👍👍

[원인] 프로덕션 백엔드가 uvicorn 워커 2개(--workers 2)로 운영되던 것이 원인입니다. - 알림 스케줄러(APScheduler)가 프로세스 내장 방식이라 워커마다 1개씩, 총 2개가 떠 있었음 - 매일 09:00 정기 알림(결재 대기 초과, 미처리 결재 안내 등)이 두 워커에서 동시에 실행되어 같은 알림이 2건씩 생성됨 - 같은 날짜 중복 알림을 막는 로직은 있었으나, 두 워커가 동시에 실행되면서 중복 체크를 통과하는 레이스 컨디션 발생 - 프로덕션 로그로 확인 완료: 스케줄러 기동 로그 2회, 동일 사용자 대상 알림 생성 로그 2회씩 기록 - 로컬(개발 환경)은 단일 워커라 재현되지 않았음 [수정 내용] 1. 스케줄러 단일 실행 보장 (37bca33) — 워커가 몇 개든 리더 워커 1개만 스케줄러를 실행하도록 리더 선출 lock 추가. 서버 시작 시 1회성 작업(휴가 자동 부여 보정 등)도 동일하게 적용. 회귀 테스트 추가, 전체 테스트 527건 통과. 2. 프로덕션 워커 수 2→1 축소 (99c666b) — async 서버라 단일 워커로 충분하며, 멀티 워커 시 실시간 알림(SSE) 전달이 간헐적으로 유실되는 문제도 함께 해소. 임베딩 모델 중복 로드가 사라져 서버 메모리도 절감. 메모리도 절감된다고 하니 아주 좋은 발견이었습니다... ㅎㅎ 굿입니다👍👍👍
Owner

나중에 테스트 후 잘 반영된 게 확인되면 클로즈 하겠습니다!

나중에 테스트 후 잘 반영된 게 확인되면 클로즈 하겠습니다!
Owner

하나씩 추가 되는 걸 확인하였으므로 닫겠습니다.

하나씩 추가 되는 걸 확인하였으므로 닫겠습니다.
Sign in to join this conversation.