2022. 12. 23. 20:53ㆍ기록/TIL
[TIL] Today I Lerned - 221223
221223 기록
알고리즘
[Python] 프로그래머스 lv2 - [1차] 캐시 (tistory.com)
프로젝트 오류
- 기존 학습용 프로젝트에서 spring security 사용 시 MySQL에서는 어떤 방식으로 지원하는지 찾을 수 없었다.
- 진행을 위해 H2 데이터 베이스로 코드 변경
runtimeOnly 'com.h2database:h2'
# H2데이터베이스 설정
spring.datasource.url=jdbc:h2:~/test
spring.datasource.driver-class-name=org.h2.Driver
# 콘솔에 Sql출력 여부
spring.jpa.show-sql=true
# 데이터베이스에 접속을 하기위한 정보
spring.datasource.username=sa
spring.datasource.password =
# hibernate 설정
spring.jpa.hibernate.ddl-auto=create
이전에 작성했던 H2 - MySQL 변경하는 과정에서 적었던 글을 참고하여 변경
[Spring] Spring boot와 Mysql 연동 (Gradle) (tistory.com)
코드를 변경하고 실행하는 과정에서 오류가 발생
- Caused by: org.h2.mvstore.MVStoreException: The file is locked: C:/Users/skyriv/test.mv.db [2.1.214/7]
- Caused by: org.h2.mvstore.MVStoreException: The file is locked: C:/Users/skyriv/test.mv.db [2.1.214/7]
- Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]
- Caused by: org.hibernate.HibernateException: Access to DialectResolutionInfo cannot be null when 'hibernate.dialect' not set
caused 키워드로 검색해서 발견한 에러 사항들.
일단 발견된 문제점으로는 해당 h2데이터베이스를 이용할 때 썼던 해당 test.mv.db의 파일이 잠겨있다는 점이 눈에 띄어서 해당 부분으로 접근 시작
검색 결과 해당 오류는 이미 해당 H2 데이터 베이스를 여러 프로세스에서 접근 시 발생하는 오류,
H2 데이터베이스의 경우 값들을 로컬 스토리지에서 저장을 하기에 경로를 새로 지정하여 실행
spring.datasource.url=jdbc:h2:~/test2
실행완료로 해당 오류는 해결
H2 데이터베이스 오류를 해결하기 위해 시도했던 방법들
- H2 데이터베이스 서버 재설치
- 새로운 데이터베이스 - test2 생성
- . h2.server.properties 파일 재작성
#H2 Server Properties
#Fri Dec 23 20:21:42 KST 2022
0=Generic JNDI Data Source|javax.naming.InitialContext|java\:comp/env/jdbc/Test|sa
1=Generic Teradata|com.teradata.jdbc.TeraDriver|jdbc\:teradata\://whomooz/|
10=Generic DB2|com.ibm.db2.jcc.DB2Driver|jdbc\:db2\://localhost/test|
11=Generic Oracle|oracle.jdbc.driver.OracleDriver|jdbc\:oracle\:thin\:@localhost\:1521\:XE|sa
12=Generic MS SQL Server |||
13=Generic MS SQL Server 2005|com.microsoft.sqlserver.jdbc.SQLServerDriver|jdbc\:sqlserver\://localhost;DatabaseName\=test|sa
14=Generic PostgreSQL|org.postgresql.Driver|jdbc\:postgresql\:test|
15=Generic MySQL|com.mysql.jdbc.Driver|jdbc\:mysql\://localhost\:3306/test|
16=Generic HSQLDB|org.hsqldb.jdbcDriver|jdbc\:hsqldb\:test;hsqldb.default_table_type\=cached|sa
17=Generic Derby (Server)|org.apache.derby.jdbc.ClientDriver|jdbc\:derby\://localhost\:1527/test;create\=true|sa
18=Generic Derby (Embedded)|org.apache.derby.jdbc.EmbeddedDriver|jdbc\:derby\:test;create\=true|sa
19=Generic H2 (Server)|org.h2.Driver|jdbc\:h2\:tcp\://localhost/~/test|sa
2=Generic Snowflake|com.snowflake.client.jdbc.SnowflakeDriver|jdbc\:snowflake\://accountName.snowflakecomputing.com|
20=Generic H2 (Embedded)|org.h2.Driver|jdbc\:h2\:mem\:db|sa
3=Generic Redshift|com.amazon.redshift.jdbc42.Driver|jdbc\:redshift\://endpoint\:5439/database|
4=Generic Impala|org.cloudera.impala.jdbc41.Driver|jdbc\:impala\://clustername\:21050/default|
5=Generic Hive 2|org.apache.hive.jdbc.HiveDriver|jdbc\:hive2\://clustername\:10000/default|
6=Generic Hive|org.apache.hadoop.hive.jdbc.HiveDriver|jdbc\:hive\://clustername\:10000/default|
7=Generic Azure SQL|com.microsoft.sqlserver.jdbc.SQLServerDriver|jdbc\:sqlserver\://name.database.windows.net\:1433|
8=Generic Firebird Server|org.firebirdsql.jdbc.FBDriver|jdbc\:firebirdsql\:localhost\:c\:/temp/firebird/test|sysdba
9=Generic SQLite|org.sqlite.JDBC|jdbc\:sqlite\:test|sa
webAllowOthers=false
webPort=8082
webSSL=false
서버의 데이터베이스 연결 오류를 해결하고 페이지를 새로 고침을 하니 다음 에러가 등장하였다
데이터베이스 h2를 들어가 보니 해당 오류가 발생하였다고 한다... 데이터베이스를 변경하는데 이리 많은 오류가 등장하는지..
Database may be already in use: null. Possible solutions: close all other connection(s); use the server mode [90020-199] 90020/90020 (도움말)
org.h2.jdbc.JdbcSQLNonTransientConnectionException: Database may be already in use: null. Possible solutions: close all other connection(s); use the server mode [90020-199]
해당 오류가 지속적으로 발생이 되어 이번에는 기존 h2 sever 쪽이 아닌 in-memory 방식으로 접근 → 튜터님 도움
spring.datasource.url= jdbc:h2:mem:db;MODE=MYSQL;
spring.datasource.driver-class-name=org.h2.Driver
# ??????? ??? ???? ??
spring.datasource.username=sa
spring.datasource.password =
이 경우에도 시큐리티 부분의 WebSecurityConfig에서
@Bean
public WebSecurityCustomizer webSecurityCustomizer() {
// h2-console 사용 및 resources 접근 허용 설정
return (web) -> web.ignoring()
.requestMatchers(PathRequest.toH2Console())
.requestMatchers(PathRequest.toStaticResources().atCommonLocations());
}
해당 코드의. requestMatcher(PathRequest.toH2 Console())에서 H2부분 오류 발생
org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'org.springframework.boot.autoconfigure.h2.H2 ConsoleProperties' available
이때 해당 H2부분을 주석처리 후 돌려보면 화면이 정상적으로 작동한다. 그럼 H2부분의 문제였다는 것으로 범위는 좁혀졌다.
다른 사람들도 오류가 발생하지 않았는데 어디서 오류가 생겼는지 계속 고민하고 검색했다. 그러다가 application.properties에 해당 문구가 빠져있는 것을 발견
spring.h2.console.enabled=true
해당 코드를 작성해주고 localhost:8080/h2-console로 접근하면 올바르게 작동이 된다...
applicaiton.properties의 환경설정인 부분도 자세하게 살펴야겠다는 것을 되새긴 날.
jdbc:h2:~/test2에서 ~은 TCP/IP 통신 연결의 축약어
jdbc:h2:mem:db에서 mem은 내장 메모리를 사용한다는 의미
pathvariable, pathRequest 등 path의 접두사 부분은 URI와 관련이 된 부분이란 것
요즘따라 환경설정에 관여하는 부분에 대해 계속 실수를 하여 시간이 잡아먹힌다. 조심한다고 생각을 하지만 아직 더 조심하고 세심하게 살펴야겠다는 생각을 했다.
'기록 > TIL' 카테고리의 다른 글
[TIL] Today I Lerned - 221227 (0) | 2022.12.27 |
---|---|
[TIL] Today I Lerned - 221226 (0) | 2022.12.26 |
[TIL] Today I Lerned - 221222 (0) | 2022.12.22 |
[TIL] Today I Lerned - 221221 (0) | 2022.12.21 |
[TIL] Today I Lerned - 221220 (0) | 2022.12.20 |