Files
llm-wiki/raw/official-docs/datasource-proxy-slow-query-official.md
T

6.1 KiB

title, source_type, url, archive_url, status, confidence, tags, related_branches, related_projects, created, last_reviewed
title source_type url archive_url status confidence tags related_branches related_projects created last_reviewed
official-doc / datasource-proxy — Slow Query Listener & ParameterTransformer (net.ttddyy) official-doc https://jdbc-observations.github.io/datasource-proxy/docs/snapshot/user-guide/index.html raw high
backend
db
jdbc
proxy
slow-query
observability
datasource-proxy
feature-database-connection-pool-contract
2026-06-09 2026-06-09

datasource-proxy — Slow Query Listener & ParameterTransformer

Layer: raw/ — 외부 자료(공식 문서)의 원문 발췌·출처 기록.

Parent / 활용 branch

Branch 이 자료가 정당화하는 결정
raw/branch-notes/feature-database-connection-pool-contract JDBC 프록시 계층에서 파라미터를 노출하지 않고 슬로우 쿼리를 탐지하는 datasource-proxy 방식의 가능성과 설정 방법 근거

출처 / Source

왜 저장했는지 / Why archived

feature-database-connection-pool-contract 브랜치에서 JDBC 프록시 계층 기반 슬로우 쿼리 탐지 방식으로 datasource-proxy를 검토. 핵심 질문: ParameterTransformer 를 통해 파라미터 값을 로그에서 제거할 수 있는가? 프로젝트 "SQL/파라미터 로그 금지" 하드 룰과의 호환성 검토.

핵심 인용 / Key quotes (verbatim)

"logSlowQueryByCommons(threshold, TimeUnit), logSlowQueryBySlf4j(threshold, TimeUnit), logSlowQueryByJUL(threshold, TimeUnit), logSlowQueryToSysOut(threshold, TimeUnit)"

— datasource-proxy user guide (slow query listener API)

"ProxyDataSourceBuilder.create(actualDataSource).logSlowQueryBySlf4j(1, TimeUnit.SECONDS).multiline().build();"

— user guide, ProxyDataSourceBuilder example

"QueryTransformer and ParameterTransformer allows you to modify executing query and parameters right before calling the database."

— spring-boot-data-source-decorator README

"decorator.datasource.datasource-proxy.slow-query.enable-logging=true" "decorator.datasource.datasource-proxy.slow-query.threshold=300"

— spring-boot-data-source-decorator README (Spring Boot application.properties 설정)

"@Bean public ParameterTransformer parameterTransformer() { return new MyParameterTransformer(); }"

— spring-boot-data-source-decorator README (custom bean 등록 패턴)

Claims Extracted / 추출된 주장

Claim ID Claim (이 자료가 직접 말하는 것) Evidence quote Strength Applies to Does not prove
C1 datasource-proxy 는 logSlowQueryBySlf4j(threshold, TimeUnit) 으로 임계값 기반 슬로우 쿼리 로깅을 제공한다 "logSlowQueryBySlf4j(threshold, TimeUnit)" official-vendor-doc datasource-proxy 모든 버전 자동으로 파라미터가 마스킹된다는 주장 반증
C2 ParameterTransformer 인터페이스를 Bean 으로 등록하면 datasource-proxy 가 파라미터 처리 전에 이를 호출한다 "@Bean public ParameterTransformer parameterTransformer() { return new MyParameterTransformer(); }" official-vendor-doc spring-boot-data-source-decorator 사용 환경 빌트인 마스킹 기능이 존재한다는 주장 반증 — 커스텀 구현 필요
C3 Spring Boot application.properties 로 슬로우 쿼리 임계값을 초 단위로 설정할 수 있다 (기본값 300초) "decorator.datasource.datasource-proxy.slow-query.threshold=300" official-vendor-doc spring-boot-data-source-decorator 1.12.1 (Spring Boot 3.x) 밀리초 단위 설정이 기본 지원된다는 주장 반증 (초 단위)
C4 슬로우 쿼리 기본 로그 출력에 파라미터 값이 포함되는지 여부는 공식 문서에 명시되지 않았다 — ParameterTransformer 없이는 포함될 가능성 있음 "QueryTransformer and ParameterTransformer allows you to modify executing query and parameters" official-vendor-doc datasource-proxy 사용 환경 자동으로 파라미터가 마스킹된다는 주장 반증
C5 Spring Boot 통합 라이브러리는 Spring Boot 3.x 를 지원한다 (버전 1.12.1) "Spring Boot 3.x — Version 1.12.1" official-vendor-doc Spring Boot 3.x 환경

Usage Boundaries / 적용 경계

  • 이 자료가 직접 증명하는 것:
    • C1: datasource-proxy 에 슬로우 쿼리 탐지 기능이 있음
    • C2: ParameterTransformer 를 통해 파라미터를 변환(마스킹 포함)할 수 있음 — 단 커스텀 구현 필요
    • C3: Spring Boot application.properties 로 설정 가능
  • 이 자료가 증명하지 않는 것:
    • 파라미터 마스킹을 위한 빌트인 기능이 존재한다는 주장
    • 슬로우 쿼리 로그 기본 출력에 파라미터가 포함/미포함된다는 확정적 주장
    • production 환경에서의 성능 오버헤드 (모든 JDBC 호출 인터셉트)
  • 내 프로젝트에 적용하려면 추가 확인이 필요한 것:
    • ParameterTransformer 구현으로 모든 파라미터를 [REDACTED] 로 치환하는 것이 슬로우 쿼리 로그 출력에도 반영되는지 테스트 필요
    • logSlowQueryBySlf4j 의 기본 메시지 형식 확인 — 파라미터 포함 여부
    • 임계값이 초 단위인지 밀리초 단위인지 재확인 (공식 문서는 "seconds")

메모 / Notes

  • ParameterTransformer 는 쿼리 실행 전 파라미터를 변환하는 Hook이므로, 마스킹 전 실제 값이 DB 로 전달됨 — 이는 로그 보안을 위한 변환이지 DB 쿼리 자체를 변경하는 것이 아님
  • multiline() 옵션은 쿼리 로그를 여러 줄로 출력하는 포맷 설정
  • HikariCP 와 함께 사용 시 HikariCP 가 내부적으로 사용하는 DataSource 를 ProxyDataSource 로 감싸야 함