[원인]
프로덕션 백엔드가 uvicorn 워커 2개(--workers 2)로 운영되던 것이 원인입니다.
알림 스케줄러(APScheduler)가 프로세스 내장 방식이라 워커마다 1개씩, 총 2개가 떠 있었음
매일 09:00 정기 알림(결재 대기 초과, 미처리 결재 안내 등)이 두 워커에서 동시에 실행되어 같은 알림이 2건씩 생성됨
같은 날짜 중복 알림을 막는 로직은 있었으나, 두 워커가 동시에 실행되면서 중복 체크를 통과하는 레이스 컨디션 발생
프로덕션 로그로 확인 완료: 스케줄러 기동 로그 2회, 동일 사용자 대상 알림 생성 로그 2회씩 기록
로컬(개발 환경)은 단일 워커라 재현되지 않았음
[수정 내용]
스케줄러 단일 실행 보장 (37bca33) — 워커가 몇 개든 리더 워커 1개만 스케줄러를 실행하도록 리더 선출 lock 추가. 서버 시작 시 1회성 작업(휴가 자동 부여 보정 등)도 동일하게 적용. 회귀 테스트 추가, 전체 테스트 527건 통과.
프로덕션 워커 수 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) 전달이 간헐적으로 유실되는 문제도 함께 해소. 임베딩 모델 중복 로드가 사라져 서버 메모리도 절감.
메모리도 절감된다고 하니 아주 좋은 발견이었습니다... ㅎㅎ 굿입니다👍👍👍
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
제보 정보
발생 환경
에러 증상 / 화면 문구
AI 어시스턴트의 알림 탭에서 동일한 알림이 2개씩 생깁니다.
스크린샷
🤖 Cutshion 베타 에러 리포트 (Tally → n8n → Gitea)
[원인]
프로덕션 백엔드가 uvicorn 워커 2개(--workers 2)로 운영되던 것이 원인입니다.
[수정 내용]
메모리도 절감된다고 하니 아주 좋은 발견이었습니다... ㅎㅎ 굿입니다👍👍👍
나중에 테스트 후 잘 반영된 게 확인되면 클로즈 하겠습니다!
하나씩 추가 되는 걸 확인하였으므로 닫겠습니다.