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

94 lines
6.1 KiB
Markdown

---
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 요약: (미생성)