반응형

Database ( DB ) 128

springboot에 flyway 사용

개발환경 OS: windows 10 java version: openjdk-1.8 Gradle version: 7.0 Springboot Version: 2.3.5 flyway version: 6.4.2 Database: MariaDB 1.5.6 Flyway란? Flyway는 Open Source Migration Tool 입니다. Java나 c++같은 프로그램의 소스 코드는 svn/git 과 같은 형상관리 툴로 쉽게 관리할 수 있지만, Database는 위와 같은 툴로 변경이력을 관리할 수 없습니다. Spring Boot에서 Flyway 사용하기 의존성 추가 - maven이나 gradle에 아래와 같이 의존성을 추가합니다. 1) maven org.flywaydb flyway-core 2) gradle ..

HikariCP Dead lock

API 개발 후 jMeter를 이용하여 성능테스트를 하던 중 아래와 같은 오류 메시지가 발생했습니다. ​ hikari-pool-1 - Connection is not available, request timed out after 30000ms. 장애의 원인 장애의 원인을 분석하던 중 아래 3가지 항목 간 상관관계가 있다는 것을 알았습니다. HikariCP maximum pool size DB에 insert하고자 하는 전체 Thread Count 하나의 Task에서 동시에 필요한 Connection 수 부하 상황에서 Thread간 Connection을 차지 하기 위한 Race Condition(경쟁 상태)가 발생합니다. Thread가 DB를 사용해야 할 때 사용 가능한 Connection이 없으면 사용가능..

HikariCP 소개

HikariCP란? HikariCP는 Brett Wooldridge 가 2012년 경 개발한 매우 가볍고 빠르고 안정적인 JDBC Connection Pool 입니다. 심지어 HikariCP는"zero-overhead"라고 홍보를 하고 있습니다. 또한 신뢰감을 높이기 위해 아래와 같은 벤치마크 결과도 보여주고 있습니다. - HikariCP는 Spring boot 2.0부터 default JDBC connection pool 입니다. HikariCP가 해주는 역할을 간단히 말하면 Database connection pool을 관리해준다는 것입니다. connection pool을 관리하는 것이 중요한 이유는 성능에 큰 영향을 미치기 때문입니다. 실제로 connection을 맺는 과정은 상당히 복잡할 뿐만 아..

Spring boot Data JPA 2.0에서 auto_increment 문제 해결

기존에는 회사에서 프로젝트를 진행할 때 mybatis를 사용했는데 신규 프로젝트는 JPA 2.0을 사용하게 되었습니다. ​ PK로 sequence를 사용하는 신규 테이블의 경우 요즘 대세인 테이블 전략을 사용하여 구성했습니다. 하지만, Login History는 같은 테이블을 사용하게 되면서 문제가 발생했습니다. 먼저, 기본키 자동 생성 전략에 대해 알아보면 아래와 같습니다. - IDENTITY : 기본 키 생성을 데이터베이스에 위임하는 방법(데이터베이스에 의존적) > 주로 MySQL, PostgresSQL, SQL Server, DB2에서 사용 - SEQUENCE : 데이터베이스 시퀀스를 사용해서 기본 키를 할당하는 방법(데이터베이스에 의존적) > 주로 Oracle, PostgreSQL, DB2, H2..

SQL Server JDBC Driver(MSSQL)에서의 NVARCHAR, VARCHAR

SELECT * FROM TB_USER WHERE USER_NAME = '홍길동'; MSSQL은 DataType에 대한 우선순위가 있습니다. nvarchar가 varchar보다 우선순위가 높기 때문에 index가 있는 varchar 컬럼에 nvarchar parameter가 mapping 된 경우, 우선순위에 따라 varchar 컬럼이 모두 nvarchar로 형변환이 일어난 후 조건을 비교하게 됩니다. 따라서 index가 무시됩니다. ​ 예를 들어 아래와 같은 query가 있다고 가정합니다. CREATE TABLE TB_USER ( USER_ID varchar(64), USER_NAME varchar(64) ); 이 경우 WHERE 절을 만들기 위한 string 타입의 parameter는 SQL Serv..

MSSQL 오류: 'xxx'은(는) 열 'xxx'에 종속되어 있습니다.

특정 컬럼을 수정/삭제할 때 아래와 같은 메시지가 발생할 수 있습니다. 메시지 5074, 수준 16, 상태 1, 줄 4 개체 'DF__TB_CONFIG_P__DESC__0D84EF7E'은(는) 열 'DESC'에 종속되어 있습니다. 메시지 4922, 수준 16, 상태 9, 줄 4 하나 이상의 개체가 이 열에 액세스하므로 ALTER TABLE ALTER COLUMN DESC이(가) 실패했습니다. 위 오류 메시지는 컬럼에 기본키(Primary key)가 설정되어 있거나, 기본값 또는 바인딩 또는 그 외 제약조건이 설정되어 있는 경우 입니다. 위 오류 메시지를 해결하기 위해 해당 컬럼에 적용된 제약조건을 제거하고 컬럼 속성을 변경 또는 삭제하면 됩니다. 위 오류 메시지에서는 DF__TB_CONFIG_P__DES..

[mssql ] DB 백업 후 다른 DB로 복원

작업 환경 Microsoft SQL Server Management Studio 17 Microsoft SQL Server 2016 SP2 백업 1. 백업파일을 생성할 DB를 우클릭하여 [태스크 > 백업] 메뉴를 클릭합니다. 2. 백업할 경로를 추가/변경 후 "확인" 버튼클 클릭합니다.(그림2) [참고] 백업 경로 및 파일이름은 기본적으로 지정이 되어 있습니다. [중요] 명령어를 실행할 PC에 파일이 생기는 것이 아니라, MSSQL이 설치된 서버의 경로에 백업 파일이 생성됩니다. 복원 1. 복원하고자 하는 다른 DB를 연결 및 선택하고 마우스 오른쪽 클릭 후 [태스크 > 복원 > 데이터베이스] 를 선택합니다. 2. 데이터베이스 복원 창에서 "장치"를 선택한 후 "..." 버튼을 클릭합니다. 3. 백업 장..

[ibatis]JavaBeansDataExchange could not instantiate result class

ibatis에서 객체를 초기화 할 때 생기는 예외입니다. 저같은 경우는 xml에서 select문을 사용할 때 resultClass="java.util.Map" 으로 사용했는데 아래와 같이 Cause가 발생했습니다. Cause: java.lang.RuntimeException: JavaBeansDataExchange could not instantiate result class. Cause: java.lang.InstantiationException: java.util.Map 이 경우 resultClass="java.util.HashMap" 으로 변경해주면 해결됩니다. 인터페이스 자체를 사용하기 위해서는 그 자체를 구현해주는 클래스로 선언을 해야 하는데 Map은 인터페이스이기 때문에 Map으로 선언해버리면..

[Oracle] Create a Schema ( 오라클 스키마 생성 )

-- Step 1. Create tablespace ( 테이블스페이스 생성 ) CREATE TABLESPACE [table space name] datafile 'table space file path' size 500M; ex) CREATE TABLESPACE docs_test datafile 'docs_test.dbf' size 500M; -- Step2. Create Schema ( 스키마 생성 ) CREATE USER [schema name] identified by [password] DEFAULT TABLESPACE [table space name]; ex) CREATE USER docs_test identified by 1234 DEFAULT TABLESPACE docs_test; -- St..

[oracle] .sql 파일을 직접 실행 ( 대용량 insert )

xxx.sql 파일이 있습니다. 일반적으로 파일을 열어서 그냥 실행하면 되지만, 용량이 너무 큰 경우에는 제대로 열리지 않는 경우가 있습니다. 그래서 별도의 editor로 open 한 후에 복사, 붙여넣기를 하려고 해도 클립보드의 크기를 넘어서 한번에 복사가 안되서 나눠서 실행해야 하는 번거로움이 있습니다. 이 경우 아래와 같이 파일경로 앞에 @를 붙여서 실행하면 됩니다. @/locationofyourfile/yourfile.sql

728x90
반응형
loading