에러 내용
java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@6c951ada
testClass = review.data.repository.UserRepositoryTest, locations = [], ...
Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException:
Error creating bean with name 'myBatisUserRepository' defined in file ...
Caused by: org.springframework.beans.factory.BeanCreationException:
Error creating bean with name 'userMapper' defined in file ...
Caused by: org.springframework.beans.factory.BeanCreationException:
Error creating bean with name 'dataSourceScriptDatabaseInitializer' defined in ...
Caused by: org.springframework.jdbc.datasource.init.ScriptStatementFailedException:
Failed to execute SQL script statement #2 of file ...
Caused by: org.h2.jdbc.JdbcSQLSyntaxErrorException:
Syntax error in SQL statement "create table [*]user ( id bigint generated by default as identity, user_name varchar(10), phone_num varchar(25), primary key (id) )";
expected "identifier"; SQL statement: create table user ( id bigint generated by default as identity, user_name varchar(10), phone_num varchar(25), primary key (id) ) [42001-224]
java.lang.IllegalStateException: ApplicationContext failure threshold (1) exceeded:
skipping repeated attempt to load context for [WebMergedContextConfiguration@6c951ada ...
//(이하 생략)
테스트 하나만 실행했을 뿐인데 에러 코드가 진심 길었다. 지금까지 본 에러 중 가장 길었음...
너무나 에러 내용이 많아서 대체 뭐가 문젠가 계속 헤맸다. 😭
발생 상황 및 해결
H2 DB와 연동하여 MyBatis 관련 설정 및 CRUD 로직과 쿼리 작성, 테스트까지 실행 완료했으나
테스트를 Embeded Mode로 돌리기 위해 application.properties, schema.sql 등 설정을 추가적으로 하고
테스트를 재실행한 결과 위와 같은 에러가 발생했다.
처음엔 Embeded Mode로 실행하기 위해 해야 하는 설정을 빼먹었거나 경로 설정이 잘못됐나 해서 한참을 뒤졌지만 그건 아니었고
길고 긴 오류를 다시 한번 살펴봤는데 Syntax error in SQL statement가 눈에 띄었다.
결국 저 미친듯한 에러의 원인은 테이블명으로 사용한 "user"가 H2 데이터베이스의 예약어로 사용되기 때문이었다.
테이블명만 다른 걸로 수정하니 바로 해결이 되었다...
이 상황을 겪고 보니 예전에 오라클을 썼을 때도 이런 적이 있었던 게 생각났다. 난 그새 까먹었던 거다ㅠㅠ
아무리 테스트용이라도 DB 테이블명은 예약어와 겹치지 않도록 신경써야겠다.