문제를 분석하는 과정

[ClassPath] gradle, maven 없이 JDBC Driver를 등록하는 과정에서

무자비한 낭만주먹 2024. 2. 11. 20:03

[그림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. 결론

 

# 직접 의존성을 등록하기 위해 인텔리제이 설정이나 모듈 개념을 잘 이해해야 할 것 같다.

 

 

오늘 하루도 공부할 수 있어 크게 감사합니다

2024-02-11 개발자 최찬혁