Skip to content

[feat] 대화방 종료 주체를 기록해 백오피스의 직접 종료를 확정한다 #216

Description

@theminjunchoi

작업 내용

대화방이 누가 종료했는지를 남긴다.

  • conversationsended_by 컬럼 추가 (USER | AUTO_BATCH, 아직 종료 안 된 방은 NULL)
  • 사용자 종료 경로와 ConversationService.endForAutoBatch 가 각각 자기 값을 남기도록 한다. 지금은 둘 다 같은 Conversation.end() 를 부르고 status 만 바꾼다.
  • 백오피스 '대화방별 사용량' 응답에 실어 보내고, 표의 직접 종료 추정직접 종료(확인된 사실)로 승격한다.
  • 값이 없는 과거 방은 백필이 불가능하므로 알 수 없음 같은 별도 표시로 둔다. 직접 종료 로 넘기지 않는다.

작업이 필요한 이유

백오피스 표는 지금 "리마인더 기록이 없고 방이 종료돼 있다" 를 보고 사용자가 직접 종료했다고 되짚는다. 이 추측이 틀리는 경로가 네 가지 있다.

1. 배치와 알림 기록의 도입 시차 (영향이 가장 크다)

그 사이 약 2주치 방들은 배치가 자동 종료시켰는데도 알림 기록이 없다. status = ENDED + reminderNotification = null 이 그대로 성립해서, 지금 판정으로는 전부 "사용자가 직접 종료한 방" 으로 보인다.

2. 리마인더 루프가 중간에 끊긴 회차

UnfinishedConversationReminder 는 회원마다 따로 보내면서 예외를 삼키지 않는다. 중간 한 회원에서 터지면 뒤쪽 회원들의 기록이 통째로 빠지고, 그 방들은 30분 뒤 배치가 종료시킨다.

3. 기록 저장만 실패한 경우

NotificationLogRecorder 는 저장 실패를 runCatching 으로 삼키고 로그만 남긴다. 알림은 나갔는데 기록만 없는 방이 생길 수 있다.

4. 스케줄러가 돌지 않은 회차

배포나 재시작으로 04:30 을 건너뛰면 그 회차 기록이 통째로 없다.

네 경우 모두 근본 원인이 같다. Conversation 에 종료 주체가 없어서, DB 만 봐서는 사용자 종료와 배치 종료가 원리적으로 구분되지 않는다. 알림 기록의 부재를 근거로 삼는 한 이 추측은 계속 틀릴 수 있고, 표를 보는 사람은 그게 사실인지 추정인지 알 수 없다.

종료 주체를 남기면 위 네 구멍이 한 번에 닫힌다. 알림 기록이 빠졌든 배치가 안 돌았든 상관없어지기 때문이다.

참고

  • [chore] 백오피스 새벽 알림 결과에서 대상 아님과 기기 없음을 구분 #214 리뷰에서 나온 이야기다. 그 PR 에서는 라벨을 직접 종료 추정 으로 두어 추측임을 드러내는 선까지만 처리했다.
  • 카드 생성 주체도 같은 문제를 갖는다. 표의 직접 생성 추정 역시 "카드는 있는데 배치 기록이 없다" 를 보고 되짚는 값이다. 이번 범위에 함께 넣을지는 작업 착수할 때 정한다.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions