프로젝트

일반

사용자정보

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가 호출되는 회귀 테스트를 추가한다.
  • 관련 알림/커넥션 풀 테스트를 통과시킨다.

정인 김이(가) 하루 전에 변경 Actions #1

  • 상태을(를) 신규에서 진행(으)로 변경되었습니다.

작업 시작: 알림 SSE 폴링 세션 취소 시 DB 커넥션 반납 누락 방지 패치를 진행합니다.

정인 김이(가) 하루 전에 변경 Actions #3

  • 완료일을(를) 2026/07/06(으)로 지정되었습니다.
  • 상태을(를) 진행에서 완료(으)로 변경되었습니다.
  • 진척도을(를) 0에서 100(으)로 변경되었습니다.
Actions

내보내기 PDF Atom