--- title: official-doc / datasource-proxy — Slow Query Listener & ParameterTransformer (net.ttddyy) source_type: official-doc url: https://jdbc-observations.github.io/datasource-proxy/docs/snapshot/user-guide/index.html archive_url: status: raw confidence: high tags: [backend, db, jdbc, proxy, slow-query, observability, datasource-proxy] related_branches: [feature-database-connection-pool-contract] related_projects: [] created: 2026-06-09 last_reviewed: 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 - 원본 URL: https://jdbc-observations.github.io/datasource-proxy/docs/snapshot/user-guide/index.html - 보조 URL: https://github.com/gavlyukovskiy/spring-boot-data-source-decorator/blob/master/README.md - 저자 / 조직: Tadaya Tsuyukubo (net.ttddyy), gavlyukovskiy (Spring Boot 통합) - 마지막 확인일: 2026-06-09 ## 왜 저장했는지 / 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 로 감싸야 함 ## Related / 관련 - [[raw/official-docs/hibernate-slow-query-log-official]] - 이 자료를 인용한 wiki 요약: (미생성)