[스프링 입문 강의] H2 DB 접근 오류 - Table "MEMBER" not found (this database is empty)
인프런에서 스프링 입문 강좌를 수강하며 실습하던 중, H2를 스프링과 연결하는 과정에서 발생한 오류이다.
분명히 강좌에서 나온대로 따라 했는데 오류가 났고...(ㅠㅠ) 구글링을 해도 마땅한 해결 방법이 나오지 않아 더더욱 당황스러웠던 것 같다.
혹시 나와 같은 문제를 겪는 사람이 있다면 도움이 될까해서 작성한다.
문제 배경
- 강의 중 순수 JDBC 챕터를 듣던 과정에서 발생한 문제이다.
- H2 DB를 스프링과 연결해 주기 위해 build.gradle, application.properties, SpringConfig 파일을 수정해주었고, JdbcMemberRepository를 MemberRepository의 구현체로 추가해주었다.
- cmd 창을 통해 h2.bat을 실행 시켰고, 이걸 통해 뜬 h2 웹 브라우저는 정상적으로 동작하며 MEMBER 테이블이 정상적으로 생성, 조회가 가능했다. (테이블 안엔 튜플이 2개 존재했음)
- 서버와 h2 를 연동시켜준 다음, 웹 페이지를 통해 회원목록을 조회하려 하니 오류가 발생함.
오류 상황
...org.h2.jdbc.JdbcSQLSyntaxErrorException: Table "MEMBER" not found (this database is empty); SQL statement:
와 같은 오류 메세지가 반복적으로 출력되며 조회가 아예 불가능 했음. 추가는 말할 것도 없고...
해결 방법
<먼저 체크할 것>
- 접속 화면에서 JDBC URL 주소와 application.properties의 url 주소가 일치하는지 확인한다 (test / test2 / test1)
- application.properties 에서 아래 코드에 추가적으로 들어간 space 나 빠진 문자가 없는지 확인한다.
spring.datasource.url=jdbc:h2:tcp://localhost/~/test
spring.datasource.driver-class-name=org.h2.Driver
spring.datasource.username=sa
<만약 다 만족하는데도 계속 오류가 발생한다면>
1. 테이블 재생성 후 아래와 같이 application.properties 수정 (url 주소 주의) 후 다시 시도
spring.datasource.url=jdbc:h2:tcp://localhost/~/test
spring.datasource.driver-class-name=org.h2.Driver
spring.datasource.username=sa
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=none
2. (위의 경우에도 안된다면) test.mv.db를 삭제하고, test2.mv.db를 생성
→ 새로 테이블을 만들어주고 다시 시도
1) test.mv파일 삭제 → 새 txt 파일 생성 후 다른이름으로 저장 → 이름 test2.mv.db로 수정, 파일 형식 = 모든파일로 저장
2) cmd 창 켜서 h2.bat 다시 실행
3) 브라우저 jdbc url에 test2 로 뒷부분 수정 (jdbc:h2:tcp://localhost/~/test2) 후 재접속
4) 만약 접속한 웹 사이트의 URL의 앞부분이 ip로 뜨는 경우 localhost:~로 수정하기
5) MEMBER 테이블 생성 쿼리 날린 후 서버 리프레시 후 확인해보기
나는 1번으로도 해결되지 않아 2번까지 진행했더니 오류를 해결할 수 있었다. member 테이블 자체를 못찾는 오류이다보니 아무래도 데이터 베이스 자체에 연결 문제가 있었던 것 같다. 대체 뭐가 문제였던걸까... 밀어버리고 새로 만드니 속이 시원하군^^;;
(그와중에 url을 localhost로 수정안해서 중간에 또 한참을 헤맸다. 정신체리...)
부디 나와 같은 오류로 고통받는 사람들에게 조금이라도 도움이 되길 바라며 오늘 포스팅은 끝!