LLM 호출 중에 DB 연결을 유지하면 안 되는 이유
AI 지연 시간(latency)은 단순히 모델이 추론하는 시간만을 의미하지 않습니다. 데이터베이스 연결을 어떻게 관리하느냐도 포함됩니다.
LLM이나 임베딩 API의 응답을 기다리는 동안 DB 연결을 유지하면 커넥션 풀(connection pool)이 고갈될 수 있습니다. 느린 외부 호출은 세션을 필요 이상으로 오랫동안 열어두게 만듭니다.
Honcho 저장소를 살펴보며 그들이 어떻게 해결했는지 확인했습니다. 그들은 하나의 긴 세션 대신 짧고 작업별로 특화된 세션을 사용하도록 변경했습니다.
기존 패턴
- DB 세션 열기
- 사용자 설정 읽기
- LLM 호출 (느림)
- 임베딩 API 호출 (느림)
- 결과 저장
- DB 세션 닫기
새로운 패턴
- 사전 점검을 위해 DB 세션 열기
- 필요한 값을 변수에 담기
- DB 세션 닫기
- LLM 및 임베딩 API 호출 (DB 연결을 유지하지 않음)
- 결과를 저장하기 위해 짧은 새 DB 세션 열기
- DB 세션 닫기
목표는 데이터베이스를 포기하는 것이 아니라, 트랜잭션 일관성을 네트워크 대기 시간으로부터 분리하는 것입니다.
연결 관리를 위한 5단계
- 일관성 경계를 정의합니다.
- 외부 API를 호출하기 전에 필요한 모든 값을 변수에 담습니다.
- 데이터베이스 스코프(scope)를 닫습니다.
- 느린 외부 작업을 수행합니다.
- 최종 결과를 저장하기 위해 짧은 쓰기 스코프를 새로 엽니다.
참고: pgvector를 사용하는 경우 검색이 데이터베이스 내부에서 실행되므로, 해당 작업 동안에는 세션을 열어두어야 합니다.
세션 수명을 단축하면 확장성(scaling)이 향상되지만, ORM에서 detached-object 에러가 발생하지 않는지 주의하고 트랜잭션 스냅샷 전반에 걸쳐 데이터 일관성이 유지되는지 확인해야 합니다.
Source: https://dev.to/junhyun-dev/neurin-llm-hocul-jung-db-connectioneul-jabji-anhneun-iyu-3abg
Optional learning community: https://t.me/GyaanSetuAi
