‼️h2 in-memory-db Table not found (this database is empty) 해결방법
h2 데이터베이스를 정말 오랜만에 써본다. 한창 JPA 배울 때는 많이 썼었는데, 한동안 안쓰다보니, 업데이트 된 버전을 오랜만에 쓰는데 바뀐 부분이 좀 많았다. 물론 문서를 통해서 더 깊게 알아볼 예정이지만, 일단은 문제 해결한 부분까지만 기억하고자 글을 남긴다.
1. spec
현재 나의 프로젝트 및 h2 데이터베이스 스펙이다.
SpringBoot 3.0.2
h2 database : 2.1.214
2. 문제상황
기억나는대로 application.yml 을 설정한 뒤, 아주 기본적으로 구현한 UserRepository 를 테스트하려고 하는데, 자꾸 에러가 났다. 여러가지 문제들을 만났는데 그 중 한가지는 아래와 같다.
user 키워드는 SQL 표준에서 예약어이기 때문에 user 라는 이름의 테이블을 생성할 수 없다.
(분명 예전에는 언젠가 user 라는 테이블을 생성했던 것 같은데... 흠)
3. 해결방법
아래와 같이 두 가지 방법으로 해결할 수 있다.
user 테이블 이름을 변경하거나
application.yml 의 datasource url 에서 user 키워드 해제 설정을 추가하거나.
나는 테스트용으로 간단히 만든 것이어서 user 테이블의 이름을 users 로 지정해주는 방식으로 풀었다.
4. 결과
5. 주의!
이 분 블로그를 참고하여 문제를 해결하였는데, h2 database 2.1.212 버전부터 user 가 키워드로 지정되어 user 라는 이름의 테이블을 생성할 수 없다고 설명해주신 내용이 있었다.
그래서 그런가보다 하고 넘어가려다가 왠지 두 눈으로 확인하지 않으면 찝찝하길래 공식문서의 changelog 을 둘러보니, 어디에도 그런 내용은 찾아볼 수 없었다.
그래서 Advanced 문서의 keywords 파트 내용을 보니, 이미 1992 년부터 user 는 키워드로 SQL 표준으로 지정된 상태였고, H2 에서도 이를 이미 적용한 것으로 나왔다.
물론 SQL 표준에 있지만 H2 에는 적용되고 있지 않다가 나중에 적용되었을 수도 있다!
그래서 이러니 저러니해도 역시 키워드는 괜히 우회하는 방향으로 사용하지 말고, 처음부터 피하는게 낫겠다는 생각을 했다.
이 부분에 대해서는 블로그 글쓴이 분께 댓글을 통해 자료를 요청드려놓은 상태이다. 어디서 볼 수 있을까, 이런 자료는...! (change log에도 없는데...!!!)
5. 참고
Last updated