Design ChatGPT, 메시지는 저장되는데 실행 이벤트가 없으면, 응답을 시작하지 못한다
파일 크기, 앱 연결 권한, 메모리 정책에 따라 같은 메시지도 전혀 다르게
Introduction
ChatGPT의 비즈니스 본질은 단순한 모델 API 래퍼가 아닙니다. 사용자는 텍스트, 이미지, 파일, 음성으로 메시지를 보낼 수 있고, 프로젝트 안에서 대화와 파일을 묶어 문맥을 이어갈 수 있으며, 메모리 설정과 임시 대화 설정을 조정할 수 있습니다. 앱 연결이나 프로젝트 파일을 컨텍스트로 사용할 때는 사용자가 현재 접근 가능한 자료만 모델 입력에 들어가야 합니다. 캐시에 이전 검색 결과가 남아 있어도, 모델 입력에 넣기 직전에는 권한 기준 장부나 정책 서비스를 통해 현재 접근 가능 여부를 다시 확인해야 합니다.
메시지 실행을 단일 HTTP 요청 안에서 끝내려고 하면 파일 검색이나 코드 실행이 붙는 순간 처리 시간이 길어집니다. 클라이언트가 타임아웃 후 재시도하면 같은 메시지가 두 번 실행될 수 있습니다. 그래서 메시지를 전송하는 경로와 답변 이벤트를 구독하는 경로를 나눠야 합니다.
짧은 일반 대화와 파일 분석 요청을 같은 실행 경로에 넣는 선택도 문제가 됩니다. 파일 검색 대기 시간이 길어질 때 일반 메시지의 첫 이벤트 지연도 증가할 수 있기 때문입니다. 그래서 API 입구에서 요청의 무게를 나누고, 일반 응답과 무거운 도구 작업을 별도 worker pool로 분리해야 합니다.
토큰 단위 이벤트를 RDBMS에 모두 저장하는 것도 피해야 합니다. 최종 메시지는 나중에 다시 열어야 하는 장부성 데이터이고, 토큰 이벤트는 스트리밍 복구를 위해 짧은 시간 필요한 전송 상태입니다. 이 둘을 같은 RDBMS write path에 넣으면 긴 답변이 많은 시간대에 row insert 수가 급격히 늘고, 대화 목록 조회나 감사 이벤트 저장의 지연도 증가할 수 있습니다.


