728x90

문제사항 제시

나는 테스트 환경에서 h2 in-memory db를 사용하고 있었다. 통합 테스트를 하려고 했는데 에러가 몇시간 동안 발목을 잡았다.

 

ddl-auto: validate를 해놓은 상태이고 엔티티와 디비가 맞는지만 확인했다.

 

그런데 Flyway가 실제 디비에 어떻게 적용시켰는지를 알아야 엔티티를 디비에 맞추든, 디비를 엔티티에 맞추든 할 수 있었다.

(사실 엔티티를 디비에 맞추면 OCP 위반이기 때문에 엔티티를 디비에 맞추어야했다.)

 

그렇게 하려면 디비의 상황을 알아야 했는데 아무리 h2.console.enabled=true 로 해놓아도 http://localhost:8080/h2 가 열리지 않았다.

 

 

해결책 모색

애초에 나는 application-test.yml, application.yml을 나눠놓았다.

 

그래서 application.yml 에서

 

spring:
  profiles:
    active: test

 

를 하고 애플리케이션을 실행시켜서 h2 console에 들어갈 수 있었다.

 

그 결과, 실제 어떻게 Flyway가 디비에 적용시켰는지, 왜 jpa가 매핑을 못시키고 있었는지 원인을 알 수 있었다.

 

 

원인

테이블들이 기본적으로 uppercase로 적용 되어 있었다.

 

적용

원인을 해결하기 위해 

 

datasource:
  url: jdbc:h2:mem:skka-for-test;MODE=MYSQL;DB_CLOSE_DELAY=-1;DATABASE_TO_LOWER=TRUE

 

결과

 

맨 뒤에

;DATABASE_TO_LOWER=TRUE

을 추가 해주니까 됐다.

+ Recent posts