LLM 호출 중에 DB 연결을 유지하면 안 되는 이유

AI 지연 시간(latency)은 단순히 모델이 추론하는 시간만을 의미하지 않습니다. 데이터베이스 연결을 어떻게 관리하느냐도 포함됩니다.

LLM이나 임베딩 API의 응답을 기다리는 동안 DB 연결을 유지하면 커넥션 풀(connection pool)이 고갈될 수 있습니다. 느린 외부 호출은 세션을 필요 이상으로 오랫동안 열어두게 만듭니다.

Honcho 저장소를 살펴보며 그들이 어떻게 해결했는지 확인했습니다. 그들은 하나의 긴 세션 대신 짧고 작업별로 특화된 세션을 사용하도록 변경했습니다.

기존 패턴

  • DB 세션 열기
  • 사용자 설정 읽기
  • LLM 호출 (느림)
  • 임베딩 API 호출 (느림)
  • 결과 저장
  • DB 세션 닫기

새로운 패턴

  • 사전 점검을 위해 DB 세션 열기
  • 필요한 값을 변수에 담기
  • DB 세션 닫기
  • LLM 및 임베딩 API 호출 (DB 연결을 유지하지 않음)
  • 결과를 저장하기 위해 짧은 새 DB 세션 열기
  • DB 세션 닫기

목표는 데이터베이스를 포기하는 것이 아니라, 트랜잭션 일관성을 네트워크 대기 시간으로부터 분리하는 것입니다.

연결 관리를 위한 5단계

  1. 일관성 경계를 정의합니다.
  2. 외부 API를 호출하기 전에 필요한 모든 값을 변수에 담습니다.
  3. 데이터베이스 스코프(scope)를 닫습니다.
  4. 느린 외부 작업을 수행합니다.
  5. 최종 결과를 저장하기 위해 짧은 쓰기 스코프를 새로 엽니다.

참고: 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