-
[springboot] Datasource Proxy로 SQL query logging 하기Spring Boot/환경설정 2024. 1. 11. 21:17
1. Hibernate 기본 쿼리 로그
- 기본적으로 JPA를 사용하면 쿼리가 어떻게 찍히는지 확인이 필요하다.
- application.yml에 hibernate 옵션을 넣어주면 가독성 좋은 query를 찍어보며 개발할 수 있다.
아래는 쿼리찍히는 예시
2. Datasource Proxy
- 운영 환경에서 유용한 확장 기능을 제공하는 Datasource proxy(https://github.com/jdbc-observations/datasource-proxy)를 사용하면 더 풍부한 SQL query를 찍을 수 있다.
- [대표적으로 쓸만한 기능]
- slow query가 발생하면 INFO대신 WARN이나 ERROR로 로그를 찍수 있다.
- 쿼리 호출 앞뒤로 어떤 작업 하도록 설정 할 수 있다.
- hibernate에서는 ?표로 표시하는 파라미터를 로그로 기록할 수 있다.
- 대표적으로 비슷한 도구로 P6spy가 있으나, 2020년 이후 업데이트가 안되고 있고, 이슈가 쌓이고 있는 반면, 꾸준히 업데이트 중이다. (2024.1.9 기준)
설치 및 설정
- build.gradle
implementation 'net.ttddyy:datasource-proxy:1.10'
- application.yml
logging: level: net.ttddyy.dsproxy.listener: DEBUG
- Datasource 설정
@Configuration @EnableTransactionManagement public class DatabaseConfig { @Value("${spring.datasource.hikari.jdbc-url}") private String JDBC_URL; @Value("${spring.datasource.hikari.driver-class-name}") private String DRIVER_CLASS_NAME; @Value("${spring.datasource.hikari.username}") private String USERNAME; @Value("${spring.datasource.hikari.password}") private String PASSWORD; @Value("${spring.datasource.hikari.maximum-pool-size}") private int MAXIMUM_POOL_SIZE; @Bean(name = "dataSource") public DataSource dataSource() { Formatter formatter = FormatStyle.BASIC.getFormatter(); return ProxyDataSourceBuilder.create(buildDataSource( JDBC_URL, USERNAME, PASSWORD, DRIVER_CLASS_NAME, MAXIMUM_POOL_SIZE )) .logQueryBySlf4j(SLF4JLogLevel.DEBUG) .name("sendkite-query-log") .formatQuery(formatter::format) .multiline() .logSlowQueryBySlf4j(2, TimeUnit.MINUTES, SLF4JLogLevel.WARN) .buildProxy(); } private DataSource buildDataSource( String jdbcUrl, String username, String password, String driverClassName, int maximumPoolSize ) { HikariConfig config = new HikariConfig(); config.setJdbcUrl(jdbcUrl); config.setUsername(username); config.setPassword(password); config.setDriverClassName(driverClassName); config.setMaximumPoolSize(maximumPoolSize); return new HikariDataSource(config); } }
이제 쿼리를 호출하면
아래와 같이 표시된다.## Reference
https://vladmihalcea.com/log-sql-spring-boot/
https://github.com/gavlyukovskiy/spring-boot-data-source-decorator?tab=readme-ov-file반응형'Spring Boot > 환경설정' 카테고리의 다른 글
iterm2 설정하기 (1) 2024.11.12 artillery로 부하테스트 하기 (0) 2023.10.29 [docker] docker compose로 데이터베이스 한번에 N개 띄우기 (0) 2023.10.23 Springboot, 주입한 환경변수 사용하기 (0) 2023.06.30 [IntelliJ] Java Google Code Style 적용하기 (0) 2023.06.10