목록 조회가 필요 없는 대형 컬럼까지 통째로 읽고, 사용 기간에 비례해 선형으로 무거워진다.
확정 사실
| # |
위치 |
문제 |
| 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
목록 조회가 필요 없는 대형 컬럼까지 통째로 읽고, 사용 기간에 비례해 선형으로 무거워진다.
확정 사실
ChangeService.java:128-136+ChangeEntity.java:50, 호출ProjectQueryService.java:93,133diff_text MEDIUMTEXT(최대 1MB/행)를 전량 로드한다. 그런데 응답ChangeResult에 diff 가 없다 — 프로젝트 개요 1회에 그 프로젝트의 모든 diff 를 읽어 버린다DeploymentQueryService.java:110,136,184·DomainBindingCommandService.java:478:136/:184는 version_label 있는 LIVE 만,:478은 첫 LIVE 1건만 쓴다ChatQueryService.java:57-64·ChatController.java:132-139content TEXT)를 무페이지SpringDataChangeRepository.java:15·SpringDataApprovalRepository.java:26· 도메인·환경변수 목록CloudConnectionEntity.java:57,61,68(MEDIUMTEXT 3 +@Convert(AesEncryptor)) ·EnvironmentVariableEntity.java:48,90-97·provisioned_databasesTaskStore.findActiveRunsplan_json LONGTEXT+ TEXT 7개를 함께 로드ChatQueryService.java:51-56, 118-141ChatCommandService.java:73-82, 95-105방침 (계약 호환)
?limit=,?after=). 파라미터가 없으면 기존 동작을 유지하되 상한(예 200)을 두고, 상한에 걸리면 응답에 다음 커서를 실어 준다. 이렇게 하면 FE 를 깨지 않고 무한 성장만 막는다. FE 채택은 별도 이슈로.검증
프로젝션 전/후 응답 JSON 동일성 테스트 ·
api.md·docs/FRONTEND_API_GUIDE.md갱신계획 원문:
.agent-team/00-plan/perf-cost-plan.mdU6