사용자 화면(:1880)에서 CORS request did not succeed (null) 다발 → 실제론 CORS가 아니라 백엔드 :3001 크래시 루프.
USER app으로 실행되나 WORKDIR /app 디렉토리가 root 소유로 남음 → schedule.js의 winston File({filename:'~/server.log'})가 /app/~ mkdir 시도 → EACCES → exit 1 → :3001 재시작 루프 → 배포 헬스체크 4/5 실패.해결 — 컨테이너 표준대로 stdout(Console) 단독 로깅으로 전환(파일로그 제거). 전 앱 fs-write 전수 스캔으로 이 1곳이 유일 지뢰임 확인. PR #10 머지·배포 성공
DB엔 알림(검사일정) 44건이 있는데 어드민 화면엔 10건만 노출.
notifications/dao.js는 pageCount=ceil(total/limit)(=페이지 수)를 반환하는데 공유 PaginationComponent가 다시 ceil(pageCount/pageSize)로 나눔 → 버튼 1개만 생성. fee·frequency·institute dao는 모두 pageCount=total(행수)라 정상 → notifications만 규약 위반.해결 — notifications dao를 pageCount=totalCount로 통일(공유 컴포넌트 무수정), web 알림 dao는 INNER→LEFT JOIN(방어적). PR #11 머지·배포 성공
| 구분 | 테이블 | 건수 |
|---|---|---|
| 현행 SSOT | inspection_schedules_management | 44 |
| └ D-7 발송완료 | 26 | |
| └ D-3 발송완료 | 27 | |
| └ D-1 발송완료 | 27 | |
| └ 검사예정일 미래 | 15 | |
| 구 아키텍처 잔존 | tbl_notifications | 132 |
| (코드 미참조) | tbl_notification_users | 70 |
| (코드 미참조) | tbl_notification_products | 104 |
daejeon-food-inspection (8컨테이너)pm2-ec2-user.service stop+disable, 데몬 kill, ~/.pm2 삭제~/app 디렉토리 — 464MB tar 백업 후 삭제qcbot 20테이블 적재 완료, 마이그레이션 불필요tbl_notification* 3테이블(132/70/104) — orphan, 삭제 검토(승인 필요)users·faq, web institute — 페이지네이션 미구현(전량 SELECT)ifnull(?, col) → (? IS NULL OR col LIKE ?) NULL-safe 하드닝