[Mysql/MariaDB] Spring/Springboot 에서 밀리세컨드 저장이 안되는 문제

이동빈·2021년 8월 23일
0

밀리세컨드 저장이 안되는 근본적인 이유는 하나입니다. 

"데이터베이스 버전 문제"

MySQL은 5.6.4부터, 

MariaDB는 5.3부터

밀리세컨드/마이크로세컨드 단위를 지원합니다.

MariaDB의 경우, 호환성을 위해 10.1.2 버전부터 MySQL과 동일한 포맷 및 변수를 사용합니다.
mariadb.com/kb/en/server-system-variables/#mysql56_temporal_format

그러나, 버전이 지원함에도 불구하고 Spring boot 설정 문제로 인하여 밀리세컨드 저장이 안되는 경우가 있습니다.

이 경우에는, DB에 직접 쿼리를 실행하면 밀리세컨드가 저장 되지만,

JDBC를 통해서 저장하게되면 밀리세컨드가 저장되지 않는 아주 난감한 상황게 빠지게 되죠.

저장이 안되는 이유는 크게 2가지 입니다.

1. Dialect 설정 문제


잘못된 Dialect 설정으로 해당 기능을 사용하지 못하는 경우입니다.

예를들어, 데이터베이스 버전이 MySQL 8.0인데,

아래와 같이 MySQL5(5.5)로 설정하게되면 ORM에서 MySQL 5.5 버전을 기준으로 쿼리를 작성하게 됩니다.

spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5Dialect

5.5버전에서는 마이크로세컨드를 지원하지 않으니 당연히 저장이 안되겠죠

자세한 내용은 아래 글을 참고하시면 됩니다.

[Spring boot] JPA Dialect(방언) 설정에 관하여

2. Connector 문제


데이터베이스는 MariaDB인데 MySQL Connector 사용하는 경우입니다.

(MySQL을 사용하는데 MariaDB Connector를 사용하는 경우는 아마 없겠죠..?)

MySQL과 MariaDB는 서로 호환이 되기 때문에 Connector를 크게 신경쓰지 않는 분들이 계실텐데요.

실제로 동작시켜보면 MySQL Connector를 사용할 경우, MariaDB 10.4.7을 MySQL 5.5.5로 감지하게 됩니다.

3. 결론


초급 혹은 신입개발자가 혼자서 초기 프로젝트를 구성하다보면,

Spring boot 설정파일이나 pom 또는 gradle 코드를 구글링하여 그대로 쓰는 경우가 있습니다.

설정이나 라이브러리는 하나하나 공부해서 직접 설정하는것이 실력향상에 도움도되고

오류가 발생했을때 원인을 찾는것이 훨씬 쉬워질 것입니다.

[참고]

issues.alfresco.com/jira/browse/MNT-17613

mariadb.com/kb/en/changes-improvements-in-mariadb-53/

mariadb.com/kb/en/microseconds-in-mariadb/

profile
호기심 많은 개발자

0개의 댓글