[ClassPath] gradle, maven 없이 JDBC Driver를 등록하는 과정에서
by 무자비한 낭만주먹2024. 2. 11.
[그림1]. 오늘도 감사한 공부 시작 ~
목차
1. 문제 발생 2. 시도 3. 해결 4. 결론
1. 문제 발생
a. 문제 발생 경위
[그림1]. 문제 발생
# 그냥 간단한 jdbc 관련 테스트 코드를 작성해보고 있던 중에 위 같은 문제가 발생했다. mysql의 jdbc driver 구현체를 직접 lib에 넣고 인텔리제이 시스템 설정에서 class path로 등록해줬었는데, 이 과정에 문제가 있었나 싶었다.
b. class path 문제 없는데?
[그림2]. class path regist
# class path 등록에 문제가 있나 싶어 확인해 봤는데 이것도 정상이였다. 그럼 뭐가 문제지 .. 고민에 빠졌다.
2. 시도
a. 버전 문제 검토
[그림3]. 버전 문제 검토
# mysql의 현재 최신 release 버전인 Connector/J 8.3 버전을 사용하고 있었는데, 내 mysql 버전과 호환 문제가 있나 싶어 확인해보니 MYSQL 5.7 이상부터 지원을 한다는 내용을 확인했다. 하지만 내 mysql은 8.0.17 버전이어서 사실 호환문제는 아님을 확인했다.
b. 에라 모르겠다 gradle 쓰자
[그림4]. gradle 적용시 정상 동작
# 일단 감이 안잡혀서 gradle로 `mysql-connector/J`를 받아봤는데 잘 적용이 되는게 아닌가 .. 도대체 뭐가 문젠지 또 고민에 빠졌다.
c. gradle과 직접 적용시의 의존 환경 비교
[그림5]. gradle import와 직접 import 했을 때의 프로젝트 세팅 차이
# 그래서 '일단 되는 놈과 안되는 놈을 비교해보자!'라는 생각으로 둘을 비교해봤는데, 사실 sources 관련 내용이 classPath에 등록된 거 말고는 별 차이가 없었다. 그리고 sources 자체도 사실 디버깅 용도로 활용되는 것이어서 크게 다를게 없었다. 문제는 점점 미궁으로 빠지기 시작했다.
3. 해결
a. 문제 발견
[그림6]. 문제 발견
# classPath 등록할 때 저렇게 적용 모듈 경로를 지정할 수 있는데 나는 최상위 경로를 지정하면 알아서 하위 경로를 찾아줄 줄 알았다. 근데 이게 왠 걸 막상 최상위 경로 지정후에 Dependencies에 들어가서 확인해보면 main에선 확인할 수 없음을 확인했다.
b. module 설정을 내가 현재 사용하고 있는 main으로
[그림7]. 모듈 설정시 main을 선택해 위 처럼 main에서 확인할 수 있도록
# 위 처럼 main에 적용토록 세팅해주면 된다. gradle 세팅 시에도 위 처럼 정의된다.
4. 결론
# 직접 의존성을 등록하기 위해 인텔리제이 설정이나 모듈 개념을 잘 이해해야 할 것 같다.