SQL 실행 로그 남기는 방법

백엔드&인프라 추종자·2025년 2월 16일

HikariCP 자체적으로 SQL 실행 로그를 기록하는 기능은 제공하지 않지만, JDBC 드라이버의 logger 설정 또는 P6Spy 같은 SQL 로깅 라이브러리를 활용하면 코드에서 SQL 실행 로그를 남길 수 있습니다.


1. HikariCP에서 JDBC 드라이버의 logger 설정 (MySQL, PostgreSQL 등)

일부 데이터베이스 드라이버(MySQL, PostgreSQL)는 자체적으로 SQL 실행 로그를 출력하는 기능을 제공합니다. 이를 활용하면 HikariCP를 사용하면서 SQL 실행 로그를 남길 수 있습니다.

MySQL의 경우

MySQL의 logger 설정을 HikariCP에 추가하면 SQL 실행 로그를 남길 수 있습니다.

HikariConfig config = new HikariConfig();
config.setJdbcUrl("jdbc:mysql://localhost:3306/your_db?logger=Slf4JLogger");
config.setUsername("your_user");
config.setPassword("your_password");

HikariDataSource dataSource = new HikariDataSource(config);

MySQL에서는 logger=Slf4JLogger를 설정하면 SQL 실행 로그가 SLF4J 로거에 기록됩니다.

PostgreSQL의 경우

PostgreSQL JDBC 드라이버는 loggerLevelloggerFile 옵션을 지원합니다.

HikariConfig config = new HikariConfig();
config.setJdbcUrl("jdbc:postgresql://localhost:5432/your_db?loggerLevel=TRACE");
config.setUsername("your_user");
config.setPassword("your_password");

HikariDataSource dataSource = new HikariDataSource(config);

이렇게 하면 PostgreSQL의 SQL 실행 로그가 TRACE 레벨로 출력됩니다.


2. P6Spy 사용 (모든 데이터베이스에 적용 가능)

SQL 실행 로그를 남기려면 P6Spy 라이브러리를 사용하는 것이 가장 확실한 방법입니다.

P6Spy 설정 방법

① P6Spy 라이브러리 추가

Maven:

<dependency>
    <groupId>p6spy</groupId>
    <artifactId>p6spy</artifactId>
    <version>3.9.1</version>
</dependency>

Gradle:

dependencies {
    implementation 'p6spy:p6spy:3.9.1'
}

② HikariCP에 P6Spy 적용

HikariCP의 JDBC URL을 P6Spy로 감싸면 SQL 실행 로그를 남길 수 있습니다.

HikariConfig config = new HikariConfig();
config.setJdbcUrl("jdbc:p6spy:mysql://localhost:3306/your_db");
config.setUsername("your_user");
config.setPassword("your_password");

HikariDataSource dataSource = new HikariDataSource(config);

여기서 jdbc:mysql://... 대신 jdbc:p6spy:mysql://... 를 사용해야 합니다.

spy.properties 설정 파일 추가 (로그 포맷 지정)

src/main/resources/spy.properties 파일을 생성하고 아래 내용을 추가합니다.

modulelist=com.p6spy.engine.spy.P6SpyFactory
logMessageFormat=com.p6spy.engine.logging.format.SimpleFormatter
appender=com.p6spy.engine.spy.appender.Slf4JLogger

이렇게 설정하면 SQL 실행 로그가 SLF4J 로거를 통해 출력됩니다.

④ 실행 결과 (로그 출력)

P6Spy가 SQL 실행 로그를 남기는 방식:

2025-02-16 12:00:00 [DEBUG] SELECT * FROM users WHERE id = 1

이제 모든 SQL 실행이 로그로 출력됩니다.


정리

방법지원 여부설정 방법
HikariCP 자체 SQL 로깅지원하지 않음
JDBC 드라이버 logger 설정⭕ (MySQL, PostgreSQL 등)?logger=Slf4JLogger 또는 ?loggerLevel=TRACE 추가
P6Spy 사용⭕ (모든 DB 가능)jdbc:p6spy:mysql://... 사용 및 spy.properties 설정

가장 쉬운 방법은 MySQL이나 PostgreSQL의 logger 옵션을 활용하는 것이고, 더 강력한 로깅이 필요하다면 P6Spy를 사용하는 것이 좋습니다.

어떤 방법을 적용할지 고민되신다면 데이터베이스 종류를 알려주시면 더 구체적인 방법을 안내해 드리겠습니다. 😊

profile
AI 답변 글을 주로 올립니다.

0개의 댓글