🍶 요구사항 (Requiredments)
Spring Boot를 이용한 프로젝트에서 JDBC 설정을 H2로 하려는데, 다음과 같이 에러가 발생합니다.
org.h2.jdbc.JdbcSQLNonTransientConnectionException: Database "mem:testdb" not found, either pre-create it or allow remote database creation (not recommended in secure environments) [90149-200] 90149/90149
위 빨간색 네모 칸을 클릭하면 상세 에러 내용을 확인할 수 있습니다.
[Help] 버튼을 클릭하면 90149 에러에 대한 간략한 내용을 볼 수 있습니다.
위 메시지는 Database를 찾을 수 없다는 내용입니다. H2 설정 확인 후, 변경하여 해결한 내용을 본 글에 담았습니다.
🥑 해결방안 (Solutions or Next step)
H2 관련 설정을 함께 확인해 봅시다.
1. @PropertySource 어노테이션에 JDBC 설정 위치 명시하기
@PropertySource 어노테이션에 JDBC의 설정 위치를 넣어서 properties에서 설정한 값이 주입되도록 설정해야 합니다. 하단의 내용은 참고용으로 만든 예시 코드입니다.
예시 코드
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;
@Component
@Slf4j
@SpringBootApplication
@PropertySource(value = {
"classpath:properties/common.properties",
"classpath:properties/jdbc.properties"
}, encoding = "UTF-8")
public class Application {
public static void main(String[] args) {
...
}
}
2. H2 관련 properties 혹은 yml 파일 설정 확인하기
H2를 사용할 때는 설정할 수 있는 종류가 다양합니다. 본 글에서는 제가 임의로 필수 설정과 선택 설정으로 나눴습니다. properties 파일을 기준으로 하단의 내용에 필수 설정과 선택 설정의 내용을 담았는데, 필수 설정에 해당하는 2가지 설정만 해줘도 JDBC 연결이 가능합니다. 필수 설정만 포함한다면, 선택 설정의 명시 여부는 JdbcSQLNonTransientConnectionException 발생 원인과 무관합니다.
필수 설정
spring.h2.console.enabled=true
spring.datasource.generate-unique-name=false
- spring.h2.console.enabled: H2 콘솔 사용 여부 (true, false)
- spring.datasource.generate-unique-name: 임의 명칭 생성 여부 (true-랜덤 생성, false-명칭 고정)
선택 설정 1
spring.h2.datasource.url=jdbc:h2:mem:testdb
spring.h2.datasource.driver-class-name=org.h2.Driver
spring.h2.datasource.username=sa
spring.h2.datasource.password=
선택 설정2
spring.session.store-type=jdbc
예시 코드
spring.h2.datasource.url=jdbc:h2:mem:testdb
spring.h2.datasource.driver-class-name=org.h2.Driver
spring.h2.datasource.username=sa
spring.h2.datasource.password=
spring.h2.console.enabled=true
spring.datasource.generate-unique-name=false
spring.session.store-type=jdbc
3. H2 database 연결 확인하기
[Test Connection] 버튼을 눌러서 "Test Successful"이 나오는지 확인해 주세요.
그런 다음, [Connect] 버튼을 눌렀을 때는 다음 화면이 나오게 됩니다.
H2 console이 정상 동작함을 확인할 수 있습니다.
🍋 회고 (Retrospective)
아무리 눈을 씻고 찾아봐도 어떤 부분이 틀렸는지 찾아내기 어려울 때가 있습니다. 그럴 때 든든한 지인분들 덕에 에러를 하나씩 해결해 나가는 것 같습니다. 본 글은 지난 주말에 있었던 삽질의 기록입니다.
에러 해결할 때 원인을 발견하고 나서 허탈웃음을 지을 수밖에 없었는데요. H2 설정 내용을 common.properties에서 jdbc.properties로 옮기면서, @PropertySource 어노테이션에 JDBC 설정 파일을 명시하지 않았었던 것을 뒤늦게 발견했습니다. 오랜만에 프로젝트를 구성하고, JDBC 설정을 H2 database를 사용하려다 보니 간과한 부분이 있었습니다. 똑같은 내용으로 삽질하지 않기 위해 본 글로 정리했습니다.
에러를 해결할 수 있도록 원인을 함께 발견해 주시고, 도움을 주신 강원준 님과 박찬오 님께 감사의 말씀을 드립니다.
🌱 참고자료 (References)
- H2 Database Engine, "ErrorCode", https://h2database.com/javadoc/org/h2/api/ErrorCode.html#c90149, (2021.12.04.)
- H2 Database Engine, "H2", https://www.h2database.com/html/main.html, (2021.12.04.)
- Spring, "Common Application Properties", https://docs.spring.io/spring-boot/docs/current/reference/html/application-properties.html, (2021.12.09.)
'Issues' 카테고리의 다른 글
Java | flatMap(Arrays::stream) 활용하기 (0) | 2021.12.14 |
---|---|
NGINX | htpasswd: command not found 해결 (2) | 2021.12.13 |
Java | JDK 8에서 JDK 11로 버전 변경하기 (0) | 2021.12.07 |
JavaScript/jQuery | show()와 hide()로 토글 기능 만들기 (0) | 2021.12.02 |
NGINX | HTTP Basic 인증으로 접근 제한하기 (0) | 2021.11.26 |
댓글