Actions
허드렛일 #965
완료됨알림 SSE 폴링 세션 취소 시 DB 커넥션 미반납 방지
허드렛일 #965:
알림 SSE 폴링 세션 취소 시 DB 커넥션 미반납 방지
시작일:
2026/07/06
완료일:
2026/07/06
진척도:
100%
추정시간:
설명
배경
- 2026-07-03 14:26:11 서버 로그에서 sqlalchemy.pool AsyncAdaptedQueuePool의 non-checked-in asyncpg connection GC 경고가 발생했다.
- 로그의 취소 주체가 sse_starlette EventSourceResponse cancel_on_finish로 표시되어 /notifications/stream SSE 연결 종료 시점 문제로 분석된다.
원인
- 알림 SSE는 초기 조회 후 요청 DB 세션을 닫지만, 이후 폴링 루프에서 새 AsyncSession을 열어 워터마크와 알림 목록을 조회한다.
- 클라이언트 disconnect/cancel이 폴링용 세션 정리 시점과 겹치면 SQLAlchemy 커넥션 close/반납 작업이 취소되어 풀에 반환되지 않을 수 있다.
작업 범위
- routers/notifications.py의 SSE 폴링 세션 종료를 취소로부터 보호한다.
- asyncio.CancelledError 또는 GeneratorExit 경로에서도 폴링용 세션 close가 안정적으로 수행되도록 한다.
- 기존 초기 세션 조기 반환 동작은 유지한다.
검증 기준
- 알림 SSE 취소 중 폴링용 세션 close가 호출되는 회귀 테스트를 추가한다.
- 관련 알림/커넥션 풀 테스트를 통과시킨다.
정인 김이(가) 하루 전에 변경
Commit reflected on master: https://git.ehyundai.com/projects/HDHSHCOD/repos/hcodex-api/commits/a5580f09c069535b7e86fc91bfbd7da524af6962
정인 김이(가) 하루 전에 변경
Commit rewritten and reflected on master: https://git.ehyundai.com/projects/HDHSHCOD/repos/hcodex-api/commits/af7035e9a70d5ccc32178c4c19e6b386fb33ea86
Actions