데이터 탐색기를 사용하던 중 'Include query plan’이 어떤 용도인지 궁금해졌습니다. 그래서 활성화해 보았지만, 어떤 변화가 있는지 알아차리지 못했습니다.
그래서 지난 몇 년간 많은 것을 배운 분께 여쭤보았는데, 해당 기능이 정상적으로 작동할 때의 스크린샷을 공유해 주셨습니다. 왜 작동하지 않는지 궁금해서 확인해 보니, 요청에 explain: true가 포함되었지만[1], 응답에는 포함되지 않는 것을 발견했습니다[2]. 그래서 어디서 유실되었는지 이해하려고 노력했습니다. 다음에 어디를 봐야 할지 확신이 서지 않아 어느 시점에는 ChatGPT에게 도움을 청했습니다. 매우 유용했고, 전체 디버깅 과정을 함께해 주었습니다. explain: opts[:explain]을 추가한 후 수정 사항을 시도해 보니 쿼리 플랜이 표시되었습니다. 다만, 제가 무엇을 하고 있는지 막연한 정도밖에 이해하지 못하고 있다는 점은 인정해야 합니다. 그래서 버그 리포트용 발견 사항 요약을 ChatGPT에게 작성해 달라고 요청했습니다[3]:
버그 요약 – 쿼리 결과에서 `explain` 누락 (Discourse Data Explorer) AI
문제:
요청에 explain=true가 전달되었음에도 불구하고, Data Explorer의 /run 엔드포인트 JSON 응답에 explain 필드가 포함되지 않았습니다. 그 결과 Postgres가 쿼리 플랜을 올바르게 반환했음에도 프론트엔드 UI에서 쿼리 플랜을 볼 수 없었습니다.
원인:
백엔드는 쿼리 실행 로직에 opts[:explain] = true를 올바르게 전달했고 result[:explain] 값도 존재했지만, 이 값이 ResultFormatConverter로 전달되지 않았습니다. ResultFormatConverter의 to_json 메서드는 opts[:explain] == true일 때만 explain 키를 포함합니다. 그러나 이 옵션이 convert 호출에 포함되지 않았습니다.
수정 방법:
다음과 같이 ResultFormatConverter.convert 호출에 explain: opts[:explain]을 추가하십시오:
render json:
ResultFormatConverter.convert(
:json,
result,
query_params: query_params,
download: params[:download],
+ explain: opts[:explain]
)
결과:
올바르게 전달되면 explain 필드가 JSON 응답에 포함되고 프론트엔드 UI에 올바르게 렌더링됩니다.


