Skip to content

Issue BI: [API] 성능 U6 — 프로젝트 개요가 전체 diff 를 로드, 목록 API 페이지네이션 부재 #341

Description

@Danto7632

목록 조회가 필요 없는 대형 컬럼까지 통째로 읽고, 사용 기간에 비례해 선형으로 무거워진다.

확정 사실

# 위치 문제
6-1 ChangeService.java:128-136 + ChangeEntity.java:50, 호출 ProjectQueryService.java:93,133 변경 목록이 diff_text MEDIUMTEXT(최대 1MB/행)를 전량 로드한다. 그런데 응답 ChangeResult 에 diff 가 없다 — 프로젝트 개요 1회에 그 프로젝트의 모든 diff 를 읽어 버린다
6-2 DeploymentQueryService.java:110,136,184 · DomainBindingCommandService.java:478 배포 이력 전체(28컬럼, TEXT 2개)를 무페이지 로드 후 메모리에서 그룹핑. :136/:184 는 version_label 있는 LIVE 만, :478 은 첫 LIVE 1건만 쓴다
6-3 ChatQueryService.java:57-64 · ChatController.java:132-139 대화 전체 메시지(content TEXT)를 무페이지
6-4 SpringDataChangeRepository.java:15 · SpringDataApprovalRepository.java:26 · 도메인·환경변수 목록 무제한
6-5 CloudConnectionEntity.java:57,61,68(MEDIUMTEXT 3 + @Convert(AesEncryptor)) · EnvironmentVariableEntity.java:48,90-97 · provisioned_databases 목록에서 비밀 컬럼을 행마다 AES 복호화한 뒤 응답에서 버린다
6-6 TaskStore.findActiveRuns plan_json LONGTEXT + TEXT 7개를 함께 로드
6-7 ChatQueryService.java:51-56, 118-141 휴지통 대화마다 프로젝트를 개별 조회(N+1)
6-8 ChatCommandService.java:73-82, 95-105 루프 안에서 단건 save/deleteById

방침 (계약 호환)

  • 6-1·6-2·6-5·6-6·6-7·6-8 은 응답 DTO 가 바뀌지 않는다 — 프로젝션·전용 쿼리로만 바꾼다. FE 영향 없음.
  • 6-3·6-4 페이지네이션은 옵션 파라미터로 추가한다(?limit=, ?after=). 파라미터가 없으면 기존 동작을 유지하되 상한(예 200)을 두고, 상한에 걸리면 응답에 다음 커서를 실어 준다. 이렇게 하면 FE 를 깨지 않고 무한 성장만 막는다. FE 채택은 별도 이슈로.

검증

프로젝션 전/후 응답 JSON 동일성 테스트 · api.md·docs/FRONTEND_API_GUIDE.md 갱신

계획 원문: .agent-team/00-plan/perf-cost-plan.md U6

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions