20년이 지나도 멈추지 않는 삽질 이야기.
WARN: This connection is using TLSv1 which is now deprecated and will be removed in a future release of Connector/J
warning 은 신호등에 비유하면 주황색과 같다. 가도 그만 멈추어도 그만인데 난 될수 있으면 멈추는 스타일이다. 그 바람에 또 소중한 시간들을 낭비한다. 위 경고는 TLSv1 / TLSv1.1 이 deprecated 되었으며, 이 프로토콜을 사용한 연결시 MySQL Connector/J Version 8.0.26 버전부터 발생하는 메시지다.
참고: https://docs.oracle.com/cd/E17952_01/connector-j-8.0-relnotes-en/news-8-0-26.html
해결은 간단하다. 난 8.0.27 버전을 사용중이었지만 8.0.26 아래 버전으로 다운그레이드 하면 되는데... 이제부터 삽질 시작이다.
Intellij 에서 gradle + java 프로젝트.
모듈은 두개. DB 와 API.
// DB module : build.gradle
dependencies {
...
runtimeOnly 'mysql:mysql-connector-java:8.0.25'
...
}
// API module : build.gradle
dependencies {
implementation project(':DB')
}
간단하다. DB 모듈에서 MySQL Connector/J 8.0.25 를 정의하고, API 모듈에서 그걸 가져다 썼다. 하지만 경고는 계속해서 나타났다. External Libraries 를 확인해보니 8.0.25 / 8.0.27 두 개 버전이 모두 import 되어 있었다. cache 문제겠거니 하고 기본적인 캐시 삭제 작업들을 시작했다.
- Invalidate Caches -> Invalidate and Restart
- Project Settings -> Libraries -> MySQL Connector/J 8.0.27 버전 삭제
- $USER\.gradle\caches 디렉토리 삭제
하지만 이 짓들을 다 해도 MySQL Connector/J 8.0.27 는 계속해서 살아났고 경고가 콘솔에 도배됐다. Find Usages 에서 확인해보니 API 모듈에서 사용중이란다. DB 모듈에서는 8.0.25 를 불러오는데, API 모듈에서 그걸 불러오면 8.0.27 로 변신한다니 이게 대체 무슨...
혹시라도 다른 라이브러리에 중복되어 있는지 dependency tree 도 확인해 봤다.
(DB) mysql:mysql-connector-java:8.0.25
(API) mysql:mysql-connector-java:8.0.25 -> 8.0.27
다른 곳에서 정의 되어 있는건 한개도 없는데 그냥 바뀌어 버린다.ㅋㅋ
한참을 삽질한 끝에 밝혀낸 원인은...
gradle 에 정의한 두개의 플러그인 간에 의존성들이 달라 발생한 문제였다.
결국 재정의 했다...
dependencies {
runtimeOnly 'mysql:mysql-connector-java:8.0.25'
implementation project(':DB')
}
WRITTEN BY
- 손가락귀신
정신 못차리면, 벌 받는다.