SpringBoot 환경 세팅을 하면서 의존성들을 추가하기 위해 pom.xml
파일을 설정하던 중에 문제가 발생했다.
분명히 pom.xml
파일에 MariaDB 관련 의존성을 명확히 추가했고, 버전도 호환되는 버전을 설치했음에도 불구하고 나의 프로젝트 내에서 mariadb 파일을 인식하지 못하는 문제이다.
정확히말하면, 아래 코드가 모두 오류가 뜬다. 'Cannot resolve .mariadb in org' 뭐 이런종류의..
import org.mariadb.jdbc.Driver
// 그냥 모든 이 org 경로 관련 코드에서, org 뒤가 빨간줄이 뜸
그래서 application.properties
파일에서도 오류가 뜨고, 빌드 자체가 안되는 문제가 발생한다.
//컴파일 시 (Application파일 실행 시) 오류문
Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled.
2025-07-30T16:18:38.117+09:00 ERROR 13593 --- [comentoStatistic] [ restartedMain] o.s.boot.SpringApplication : Application run failed
Caused by: java.lang.IllegalStateException: Cannot load driver class: org.mariadb.jdbc.Driver
at org.springframework.util.Assert.state(Assert.java:101) ~[spring-core-6.2.9.jar:6.2.9]
at org.springframework.boot.autoconfigure.jdbc.DataSourceProperties.findDriverClassName(DataSourceProperties.java:184) ~[spring-boot-autoconfigure-3.5.4.jar:3.5.4]
at org.springframework.boot.autoconfigure.jdbc.DataSourceProperties.determineDriverClassName(DataSourceProperties.java:174) ~[spring-boot-autoconfigure-3.5.4.jar:3.5.4]
at org.springframework.boot.autoconfigure.jdbc.PropertiesJdbcConnectionDetails.getDriverClassName(PropertiesJdbcConnectionDetails.java:49) ~[spring-boot-autoconfigure-3.5.4.jar:3.5.4]
at org.springframework.boot.autoconfigure.jdbc.DataSourceConfiguration.createDataSource(DataSourceConfiguration.java:62) ~[spring-boot-autoconfigure-3.5.4.jar:3.5.4]
at org.springframework.boot.autoconfigure.jdbc.DataSourceConfiguration$Hikari.dataSource(DataSourceConfiguration.java:127) ~[spring-boot-autoconfigure-3.5.4.jar:3.5.4]
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Method.java:580) ~[na:na]
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.lambda$instantiate$0(SimpleInstantiationStrategy.java:172) ~[spring-beans-6.2.9.jar:6.2.9]
... 78 common frames omitted
IDE인식 오류인것 같다.
classPath를 인식하지 못해서 코드상에 ‘cannot resolve’ 오류가 뜨고, project structure - modules - dependencies 에서도 sources 경로가 broken path라고 뜬다.
모두 시도해보았지만 이 케이스는 해결하지 못했음, 이 케이스를 해결한 방법은 뒤에 나옵니다
터미널 ‘mvn clean install’ 명령어로 maven을 통해 모든 의존성 삭제 후 재설치 하기 ⇒ 여러 의존성이나 버전들이 꼬여있거나, 아직 install 되지 않은 의존성이 있는 경우 해결됨
pom.xml 파일에서 ‘sync project’ 혹은 maven project에서 ‘reload all project’ 하기 ⇒ pom.xml에서 정의한 의존성 정보가 프로젝트 전체에 아직 반영이 되지 않았거나, 기존 캐시가 남아있어 새로운 의존성이 적용이 되지 않은 경우에 해결됨
pom.xml의 dependency에서 <scope>를 compile이 아니라 runtime으로 지정하는 방법 ⇒ 해당 의존성을 컴파일 할때의 오류는 무시하고, run할 때만 사용하면 되는 경우에 해결됨 (classPath 자체는 정상이고, IDE인덱싱이 문제라면 이 방법으로는 해결될 수도 있음)
⇒ maven의 인식 혹은 의존성 미설치 문제라면, ‘mvn clean install’ 명령어 실행이나, sync project, reload project 시 해결되어야 함. 심지어 설치되어있는 것도 확인함.
IntelliJ IDE가 classPath 를 제대로 인식하지 못하는 문제임.
또한, org.mariadb.jdbc:mariadb-java-client
의존성은 일부 IntelliJ 버전에서 자동 indexing에 문제가 보고된 적도 있다고 한다 (특히 특정 macOS + ARM 조합에서)
이경우 해결방법은 세가지를 시도해봤음. (앞서 말한 pom.xml 싱크 문제나 전체프로젝트 reload, maven 전체 삭제 및 재설치 등으로는 해결할 수 없음)
maven 이 install한 경로에 있는 mariadb의 의존성 파일을, 다른 경로로 옮긴 후에 IntelliJ상에서 classPath를 새로 설정하는 방법이다.
IntelliJ IDEA - File - Project Structure - modules - Dependencies
에 보면, Maven: org.mariadb.jdbc:mariadb-java-client:(버전명)
의 의존성이 있는것을 확인할 수 있다. 클릭해서 들어가보면 class의 경로가 뜬다.
필자의 경우,
/Users/(유저명)/.m2/respository/org/mariadb/jdbc/mariadb-java-client/(버전명)/(클래스 파일.jar)
경로에 존재한다.
(* 참고로, mariadb-java-client 경로 내에 버전이 여러개가 존재하는 경우에도 오류가 발생할 수 있으므로, 만약 버전에 여러개가 있었다면 버전을 다 삭제한 후에 ‘mvn clean install’로 전체삭제후 재설치 해보는 방법도 추천한다.)
해당 클래스 파일 (mariadb-java-client-버전.jar) 파일을, 다른 경로로 옮긴 후에, 해당 경로로 다시 입력해주는 방법이다.
running configuration을 Spring boot 가 아닌, maven으로 바꿔주는 방법이다.
아까 확인했다시피, maven은 의존성 클래스를 정확히 다운로드 받았고, IDE가 이 경로를 인식하지 못해 생긴 문제이다. IntelliJ의 IDE에서 Spring boot로 실행시키는 것이 아니라, ‘maven’ 으로 직접 실행시키면 해결할 수 있다.
우선 아래 명령어로 maven으로 직접실행시켰을 때는 빌드 문제없이 제대로 실행되는지를 확인하자. 실행된다면, run configuration을 바꿔주자.
./mvnw spring-boot:run
이렇게하면 해결할 수 있긴 하지만, 뭔가 Spring boot의 장점을 못살리는 거긴 하다. 원래 SpringBoot에서는 Application 파일을 그냥 java로 실행하는것 만으로 모든 컨트롤러들과 연결스택들이 자동으로 java에서 빌드되서 실행되는게 장점이니깐.. maven을 통해서 수동으로 spring-boot:run 해주는 방법도 해결은 해주지만 다른방법도 있다.
1번과 유사한 방법이지만, 조금 더 근본적인 해결방법이다. 인터넷에서 직접 의존성파일을 다운받은 후, 그 위치로 classPath를 다시 설정해주는 방법이다.
MariaDB의 JDBC 공식 사이트 : https://downloads.mariadb.org/connector-java/ 에서 mariadb-java-client-(버전).jar 파일을 다운로드한 후, 해당 파일이 위치한 경로로 ClassPath를 재설정 해주면 된다.
ClassPath 재설정하는 방법 :
File - Project Structure - modules - Dependencies
에서 기존에 broken Path 오류가 떴던 의존성 경로를 아예 지우고, 내가 다운로드한 버전에 맞는 이름으로 다시 새롭게 추가한다.
ex) Maven: org.mariadb.jdbc:mariadb-java-client:3.1.4
그 후, classes에 파일 경로를 추가한다.
혹은, 기존에 classes 경로만 새로 다운로드 받은 경로로 바꿔줘도 된다.
Spring Boot는 세팅 자동화로 세팅이 훨씬더 빠르고 편리해야하는데, 이런 로컬환경?의 IntelliJ 프로그램의 예기치 못한 오류 때문에 몇시간을 날린 것 같다... ㅠㅠ 그래도 이 문제 해결하면서 이것저것 알아보고 지식은 좀 는 것 같다...ㅎㅎ
저번에 Spring MVC를 먼저 공부해봤기 때문에 오류가 나는 위치를 정확히 찾아서 SpringBoot의 이런 의존성 문제도 조금 덜 헤매고 찾을 수 있었던 것 같기도 하다.