[BE 입문] Spring Boot 세팅 - mariaDB 의존성 인식 오류 해결

Hong Day·2025년 7월 30일
0

BE_study

목록 보기
3/3

문제상황

SpringBoot 환경 세팅을 하면서 의존성들을 추가하기 위해 pom.xml 파일을 설정하던 중에 문제가 발생했다.

분명히 pom.xml 파일에 MariaDB 관련 의존성을 명확히 추가했고, 버전도 호환되는 버전을 설치했음에도 불구하고 나의 프로젝트 내에서 mariadb 파일을 인식하지 못하는 문제이다.

정확히말하면, 아래 코드가 모두 오류가 뜬다. 'Cannot resolve .mariadb in org' 뭐 이런종류의..

import org.mariadb.jdbc.Driver 
// 그냥 모든 이 org 경로 관련 코드에서, org 뒤가 빨간줄이 뜸

그래서 application.properties 파일에서도 오류가 뜨고, 빌드 자체가 안되는 문제가 발생한다.
image1

//컴파일 시 (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라고 뜬다.

시도했지만 의미없었던 방식들

모두 시도해보았지만 이 케이스는 해결하지 못했음, 이 케이스를 해결한 방법은 뒤에 나옵니다

1. 'mvn clean install'

터미널 ‘mvn clean install’ 명령어로 maven을 통해 모든 의존성 삭제 후 재설치 하기 ⇒ 여러 의존성이나 버전들이 꼬여있거나, 아직 install 되지 않은 의존성이 있는 경우 해결됨

2. 'sync project', 'reload all project'

pom.xml 파일에서 ‘sync project’ 혹은 maven project에서 ‘reload all project’ 하기 ⇒ pom.xml에서 정의한 의존성 정보가 프로젝트 전체에 아직 반영이 되지 않았거나, 기존 캐시가 남아있어 새로운 의존성이 적용이 되지 않은 경우에 해결됨

3. pom.xml에서 의존성 scope를 runtime으로 변경

pom.xml의 dependency에서 <scope>를 compile이 아니라 runtime으로 지정하는 방법 ⇒ 해당 의존성을 컴파일 할때의 오류는 무시하고, run할 때만 사용하면 되는 경우에 해결됨 (classPath 자체는 정상이고, IDE인덱싱이 문제라면 이 방법으로는 해결될 수도 있음)

하지만,

  • 확인결과, Java 버전과 MariaDB 버전이 호환이 되지 않는 버전인것도 아니고,
  • Maven이 의존성을 인식하지 못해서 생긴 이유도 아니고
  • Maven이 설치한 mariadb 의존성 라이브러리가 없는 것도 아님. (본인 로컬의 의존성 경로에 maven이 install 하면서 다운받은 mariadb 의존성 파일 존재)

⇒ maven의 인식 혹은 의존성 미설치 문제라면, ‘mvn clean install’ 명령어 실행이나, sync project, reload project 시 해결되어야 함. 심지어 설치되어있는 것도 확인함.

그렇다면,

IntelliJ IDE가 classPath 를 제대로 인식하지 못하는 문제임.

  • 이유1) maven은 정상적으로 의존성을 인식하여 해당 경로에 잘 설치했으나, Project structure - modules - dependency 에서 ‘Library Maven: org.mariadb.jdbc:mariadb-java-client:(버전) is broken Path’ 라는 오류문이 떠있음. classPath를 인식하지 못한 문제
  • 이유2) ‘mvn dependency:tree’ 실행결과에는 mariadb가 포함되어 있지만, IntelliJ 프로젝트의 External Libraries에서는 mariadb가 포함되어있지 않음. classPath를 maven이 설치한 경로로 맞게 설정해주어도 여전히 오류가 뜸. IDE자체의 classPath 인식문제.

또한, org.mariadb.jdbc:mariadb-java-client 의존성은 일부 IntelliJ 버전에서 자동 indexing에 문제가 보고된 적도 있다고 한다 (특히 특정 macOS + ARM 조합에서)

해결방법 3가지

이경우 해결방법은 세가지를 시도해봤음. (앞서 말한 pom.xml 싱크 문제나 전체프로젝트 reload, maven 전체 삭제 및 재설치 등으로는 해결할 수 없음)

1. IntelliJ 상의 classPath 새로 설정

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) 파일을, 다른 경로로 옮긴 후에, 해당 경로로 다시 입력해주는 방법이다.

2. maven으로 실행하기.

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 해주는 방법도 해결은 해주지만 다른방법도 있다.

3. 다운받아서 직접 지정해주기

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의 이런 의존성 문제도 조금 덜 헤매고 찾을 수 있었던 것 같기도 하다.

profile
🫵 안녕하세요, 백엔드 공부하는 초보개발자 홍대의 입니다!

0개의 댓글