Spring/Spring boot 입문

[스프링 입문 강의] H2 DB 접근 오류 - Table "MEMBER" not found (this database is empty)

mopipi 2022. 8. 28. 02:42
반응형

인프런에서 스프링 입문 강좌를 수강하며 실습하던 중, 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:

와 같은 오류 메세지가 반복적으로 출력되며 조회가 아예 불가능 했음. 추가는 말할 것도 없고... 


해결 방법

<먼저 체크할 것>

  1. 접속 화면에서 JDBC URL 주소와 application.properties의 url 주소가 일치하는지 확인한다 (test / test2 / test1)
  2. 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로 수정안해서 중간에 또 한참을 헤맸다. 정신체리...)

 

부디 나와 같은 오류로 고통받는 사람들에게 조금이라도 도움이 되길 바라며 오늘 포스팅은 끝!

 

반응형