Skip to content

Vector Projection points 조회 SQL ORDER BY 조립 오류 #384

@donghyuck

Description

@donghyuck

Issue

Type

  • Feature
  • Bug
  • Refactor
  • Docs
  • Chore

Size

  • Small (1): 단순 수정 / 단일 파일
  • Medium (2): 기능 단위 변경 / 다중 파일
  • Large (3): 구조 변경 / 복수 모듈

Summary

Background

  • 프론트엔드 /services/ai/vector-visualization에서 COMPLETED Projection을 선택하면 points 조회가 실행됩니다.
  • Projection 자체는 정상 생성되어 COMPLETED · 122건으로 표시됩니다.
  • 하지만 GET /api/mgmt/ai/vectors/projections/{projectionId}/points?limit=2000&offset=0 호출이 500으로 실패합니다.
  • 브라우저 재시도와 서버 로그 확인 결과, 클라이언트 요청 파라미터 문제가 아니라 서버 SQL 조립 문제로 보입니다.

Scope

  • JdbcVectorProjectionPointRepository.findPage()의 points 조회 SQL 조립 수정
  • ORDER BY 앞뒤 공백 보장
  • JdbcVectorProjectionSql.orderByDisplayOrder(postgres) 결과가 WHERE 절과 붙지 않도록 보정
  • 동일 SQL 조립 패턴이 search-visualization 경로에서도 재사용되는지 확인

Acceptance Criteria

  • GET /api/mgmt/ai/vectors/projections/{projectionId}/points?limit=2000&offset=0 호출이 200으로 응답한다.
  • 응답에 items[].x, items[].y, items[].vectorItemId, items[].targetType이 포함된다.
  • POST /api/mgmt/ai/vectors/search-visualization 호출이 200으로 응답한다.
  • Vector Map 화면에서 산점도와 Top-K 결과가 렌더링된다.
  • targetType/objectType 필터가 없을 때도 전체 RAG chunk 대상으로 정상 조회된다.

Validation Plan

  • build
  • test
  • smoke / manual check
  • analysis only (no code change)

AI-Assisted

  • Yes
  • No

AI Usage

  • Usage type: 브라우저 재검증, 서버 로그 분석, 이슈 작성
  • Subagent used: No
  • Delegated scope: N/A
  • Main author validation: /services/ai/vector-visualization에서 Projection 선택 후 points 조회, 검색 시각화, 점 클릭 상세 조회까지 확인합니다.

Notes

  • 재현 Projection: proj-20260430044829-105b3fa0
  • 화면 상태: RAG Vector Map 2026. 4. 30. 오후 1:48:29 · PCA · COMPLETED · 122건
  • 재현 API: GET /api/mgmt/ai/vectors/projections/proj-20260430044829-105b3fa0/points?limit=2000&offset=0
  • 서버 로그 핵심:
org.postgresql.util.PSQLException: ERROR: syntax error at or near "BYp"
PreparedStatementCallback; bad SQL grammar [SELECT p.vector_item_id, c.object_type, c.object_id, c.text, c.metadata,
       p.x, p.y, p.cluster_id
  FROM tb_ai_vector_projection_point p
  JOIN tb_ai_document_chunk c
    ON p.vector_item_id = COALESCE(NULLIF(c.metadata ->> 'chunkId',''), 'row-' || c.id)
 WHERE p.projection_id = ?
 ORDER BY ...]
  • log4jdbc 출력에서는 ORDER BYp.display_order... 형태로 공백이 누락된 것으로 보입니다.
  • 의심 위치: JdbcVectorProjectionPointRepository.findPage()의 text block + 문자열 concat 경계.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions