[TROUBLE_SHOOTING] Maria DB 쿼리 로그가 보이지 않았던 이유
발생상황
Redis 에 저장된 정보를 DB 에한번에 저장할 필요가 있었다. 한개 한개씩 저장하는 쿼리를 날리면, 그 한개 한개마다 DB 에 연결하고 연결을 끊는 작업이 반복된다. 그래서 방법을 찾다가 하이버네이트 배치를 이용한 벌크성 쿼리 저장 방식을 찾았다. 아래글은 벌크성 쿼리 저장할 수 있는 관련글이다.
https://techblog.woowahan.com/2695/
위에 방법을 사용해서 저장하는 방식을 좋았으나, 해당 방식을 써서 제대로 적용되어있는지 확인하기 위해서는 하이버네이트 쿼리가 아닌, DB 쿼리 로그를 찍을 필요가 있었다. 나는 MariaDB 를 쓰고있어서 아래와 같이 설정을 해주었었다.
1
2
3
4
5
datasource:
url: jdbc:mariadb://localhost:3307/ootdzip?&profileSQL=true&maxQuerySizeToLog=0
username: #username
password: #password
driver-class-name: org.mariadb.jdbc.Driver
profileSQL=true
를 설정하여 DB 쿼리로그를 찍는다는 뜻이고, maxQuerySizeToLog=0
은 최대로 로그 찍는수를 무한으로 설정한다는 뜻이다. 더 자세한것은 Maria DB 드라이버홈페이지 를 참고하면 된다. 블로그에서 명시된대로 했지만 로그가 안찍여서 문제가 발생했다.
발생 원인
여러가지 방법을 시도했지만 안됐어서 드라이버 홈페이지 한번 더 확인해봤다.
확인해보면 3.0.0 버전이후로 삭제됐다고 한다. 그래서 build.gradle 에서 의존성을 확인해봤더니
1
2
3
4
5
dependencies {
...
runtimeOnly 'org.mariadb.jdbc:mariadb-java-client'
...
}
위와 같이 설정이 되어있었는데 이렇게하면 알아서 최신버전으로 설정해버린다. 최신버전에서는 profileSQL
를 지원하지 않아 로그가 찍히지 않은것이다.
해결
최신버전이 아닌 3.0 미만 버전으로 다운그레이드해서 설정해주어서 해결이 가능했다.
1
2
3
4
5
dependencies {
...
runtimeOnly 'org.mariadb.jdbc:mariadb-java-client:2.7.10'
...
}
똑같이 했는데도 안되면 설정환경/버전을 확인해보자! 참고로 다운그레이드 하지않고 로그를 찍고싶다면, 좀 더 복잡한방법으로 로그를 찍어야된다. 이후에 로그를 관리하는 포스트도 할려고한다.