답변이 끝나도 부수 분석 작업은 들어가지 않을 수 있다

AI Tutor의 답변 완료 hook은 조건에 맞는 질문·답변을 후속 분류 큐에 넣는다. 튜터 여부, 과목과 메시지 ID, 활성화 옵션을 확인하고 queue.add를 호출한다. 분석 적재의 오류는 답변 스트림에 전파하지 않고 warning으로 남긴다. 답변을 받은 사용자에게는 분석 실패가 드러나지 않는다.

질문 분석 기능의 큐 생산자에 적용한 변경이다. 제품 통합 전의 기능 구현이다. 당시 custom jobId는 turn:질문ID였는데, 콜론을 허용하지 않는 BullMQ 계약 때문에 add가 throw했다. 실패 격리 자체는 의도한 동작이지만 잘못된 ID도 같은 warning 경로로 끝났다.

한 글자 변경은 큐 경계의 계약을 고친다

수정은 구분자를 하이픈으로 바꾸는 것이다. 다음은 실제 옵션을 발췌한 코드다.

{
	jobId: `turn-${input.questionMessageId}`,
}

같은 질문 ID에는 같은 잡 ID를 사용해 큐 안의 중복을 막는다. 큐에서 작업 기록이 제거된 뒤까지 영구적으로 한 번만 실행된다는 보장은 아니다.

생산자 테스트는 mock add에 전달한 ID, 대상 조건과 옵션 오류의 skip, Redis 오류를 답변에 전파하지 않는 동작을 확인한다. mock은 BullMQ의 ID 검증을 실행하지 않아서 이전의 잘못된 문자열도 기대값과 일치하면 통과할 수 있었다. 호출 인자를 확인하는 검사와 의존 라이브러리가 그 인자를 받아들이는 검사는 다르다. 이 경로에서는 사용자에게 전달되지 않는 실패를 warning에서 확인할 책임도 남는다.