Maria DB를 로컬에 생성한 후, Datagrip을 통해 Data Source를 연결하는 과정에서 문제가 발생하였습니다.
Test Connection을 통해 정상적으로 연결되는 것을 확인하였습니다.
OK를 눌러 Data Source 연결을 적용하려고 하니, 우측 하단에 다음과 같은 경고 문구가 떴습니다.
Data Source를 연결할 때, 디폴트 값으로 설정된 fetch size에 문제가 있나 싶었습니다.
해당 Data Source의 속성 설정에 들어가 defaultFetchSize 값을 늘려서 연결해보았지만 실패했습니다.
관련해서 구글링을 해보다가 Jetbrains YouTrack에 동일한 이슈에 대해서 다루고 있었고, 해답을 찾게 되었습니다.
JDBC 드라이버의 버전 문제였고, 버전을 낮춰주니 간단하게 해결되었습니다.
좀 더 정확한 원인이 궁금했고, 단순 호환성 문제인지 더 찾아보게 되었습니다.
MySQL Connector는 JDBC 스펙을 따르지 않고 fetch size를 처리합니다. JDBC 스펙에 따르면, Statement.setFetchSize(int) 메서드는 '데이터베이스 접근 오류가 발생하거나, 닫힌 Statement에서 호출되거나, 조건 rows >= 0이 만족되지 않으면 SQLException을 던져야 한다'고 명시하고 있습니다. MySQL은 일반적으로 잘못된 값인 Integer.MIN_VALUE만 허용하며, 이 경우 fetch size를 1로 설정합니다. MariaDB 2.7 및 3.0 Connector는 fetch size를 올바르게 처리합니다(예: fetch size가 1000이면 실제로 1000개의 행을 가져옵니다). MariaDB 2.7은 Integer.MIN_VALUE를 지원했지만, 완전히 새롭게 작성된 3.0에서는 오직 JDBC 스펙만 따릅니다.
위 글과 개인적인 생각으로 요약해보자면, MariaDB 3.0 커넥터는 JDBC 스펙을 엄격하게 준수하여 특정 상황에서 invalid fetch size 오류를 일으킬 수 있는 반면, 이전 버전에서는 이러한 엄격한 체크를 하지 않기 때문에 다운그레이드를 통해서 해당 이슈를 해결할 수 있다는 결론을 짓게 되었습니다.
최신 버전이 스펙을 더 잘 준수하지만, 일부 기존 코드나 설정과 호환되지 않을 수 있어 다운그레이드로 문제가 해결될 수 있다.
다음과 같은 방법으로 Maria DB 드라이버 버전을 낮추고 정상적으로 Connection이 되는 것을 확인했습니다.
에러 해결에 있어서 Jetbrains YouTrack을 활용하면 금방 해결될 수 있을 것 같아 앞으로도 자주 들여다볼 것 같습니다.
'Develop > Trouble Shooting' 카테고리의 다른 글
Java 에러 - Exception in thread "main" java.util.regex.PatternSyntaxException (0) | 2023.03.20 |
---|---|
Spring Boot Configuration Annotation Processor not configured (0) | 2023.01.27 |
BeanCreationException 에러 (0) | 2023.01.10 |
GitHub Actions .yml 파일 추가 후, 빌드 진행 시 발생한 에러 (0) | 2022.12.08 |
클라이언트 배포 시, AWS S3 호스팅 과정 중 에러 (0) | 2022.12.08 |