TIL - Spring Project에 h2 연결 중 오류

su·2024년 3월 29일
0

TIL

목록 보기
82/93
post-thumbnail

Spring - h2 연결

1. 문제

그래.. 오류가 안나면 이상하지 ..
Spring에 h2를 연결하는 과정에서 오류가 발생했다.
웬일로 잘 흘러가나 했지 나는 ..

java.lang.ClassNotFoundException: org.h2.driver
	at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641)
	at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
	at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:525)
	at java.base/java.lang.Class.forName0(Native Method)
	at java.base/java.lang.Class.forName(Class.java:467)
	at org.springframework.util.ClassUtils.forName(ClassUtils.java:304)
	at org.springframework.boot.autoconfigure.jdbc.DataSourceProperties.driverClassIsLoadable(DataSourceProperties.java:194)

해당 드라이버를 찾을 수 없다는 오류다.

2. 시도

당연히 ! 오류 내용을 검색해봤다.
혹시 나와 같은 오류를 경험한 경험자들의 조언을 얻을 수 있는지 궁금해서 ..
대부분 h2드라이버를 연결할 때 뭔가 잘못 작성했거나, 설정을 잘못 해서 해결하셨다.

  1. application.properties 파일 - driver-class-name
    해당 파일에 Driver 내용을 추가할 때, 뒤에 공백이 있으면 오류가 난다.
    바로 확인해봤는데, 나는 공백이 없었다.
  2. application.properties 파일 - url
    사용하는 h2의 url을 확인해봐야 한다.
    잘못 가져왔다면 수정해야 하는데, 나는 잘못 가져오지도 않았다.

3. 해결

정말 어이없는 실수.
클래스 이름을 잘못 주었던 것이었다 ...

~~~driver-class-name=org.h2.Driver

찾으신분 ..
Driver를 ... driver로 잘못 작성했다 ..
대소문자에도 영향을 받는 사항인지는 몰랐다 ..

4. 배운 점

강의를 보고 따라가고 있었는데,
명령어 하나하나를 더 주의깊게 봐야 한다.

~~url=사용하는본인의경로
~~driver-class-name=org.h2.Driver

대소문자도 주의하고, 명령어 의미를 잘 파악하자 !

Spring Test - Bean 등록 오류

1. 문제

java.lang.IllegalStateException: Failed to load ApplicationContext for
[WebMergedContextConfiguration@6dcd5639 testClass =
hello.hellospring.service.MemberServiceIntegrationTest, locations = [], 
classes = [hello.hellospring.HelloSpringApplication], 
contextInitializerClasses = [], activeProfiles = [], 
propertySourceDescriptors = [],
...

springConfig 파일을 생성하고 Test 코드를 작성하고 실행했더니,
이런 오류가 발생했다 ..
왜 ..? 나 시키는 대로 했는데 ,, 뭐가 문제니 ..

2. 시도

오류 내용을 이것저것 찾아봤는데,
뭘.. 잘못설정하거나 아니면 다른 .. 오타가 난다거나 .. 그런 사항이 있는지 다 뒤집어봤다.

하 .. Config 파일을 두 개를 만들어 놨다.
진짜 노답이다 .. 겨우 그걸 해결해놨더니 다른 오류가 발생했다 ..

org.h2.jdbc.JdbcSQLNonTransientConnectionException:
Database may be already in use: "/Users/사용자명/test.mv.db".
Possible solutions: close all other connection(s); use the server mode [90020-224]
	at org.h2.message.DbException.getJdbcSQLException
    (DbException.java:690) ~[h2-2.2.224.jar:2.2.224]

어디서 DB가 연결되어있다는 의미 같은데,
(찾아보니까 그렇기도 했다) 나는 그저 시키는 대로 했을 뿐이고,,
재부팅을 해보라는 내용이 있어서 바로 컴퓨터를 종료해보았다.

그리고 다시 h2 DB 연결을 하고, 프로그램을 구동하는 순간 !
이번에는 다른 오류를 마주쳤다 ^v^

org.h2.jdbc.JdbcSQLInvalidAuthorizationSpecException:
Wrong user name or password [28000-200]
 at org.h2.message.DbException.getJdbcSQLException(DbException.java:461)
 ~[h2-1.4.200.jar:1.4.200]
...

사용자 이름 혹은 비밀번호가 잘못되었다니 ..?

3. 해결

결국 .. h2 데이터베이스 연결할 때의 문제였다.
일단 처음에는 Config 파일의 오류가 맞았으나
그 이후에 또 발생했던 문제는 결국 h2의 오류 ..

application.properteis 파일에서 user 이름도 추가해주어야 한다고 한다.

나는 하단의 코드를 추가해 주었다.

~username=sa

4. 배운 점

지금 mac에서 프로젝트를 구동하고 있는데,

cd h2/bin
./h2.sh

h2 폴더로 이동해서 bin 폴더 내부의 h2.sh 파일을 실행하면 DB에 잘 연결된다.

그리고 application.properties 파일 내부에

~url=jdbc의 경로
~driver-class-name=org.h2.Driver
~username=sa

이렇게 세 가지 정보를 입력해주어야 제대로 실행이 된다 !

profile
(❁´◡`❁)

0개의 댓글