반응형

Database ( DB ) 128

MariaDB 10.4 대소문자 구분 설정하는 방법

Linux에서 MariaDB 설치한 후 query 시, 대소문자를 구분하는 문제가 있습니다. (Windows에 설치 할 경우 이런 문제가 없습니다.) 그 이유는 lower_case_table_names 옵션 때문인데요 이 옵션의 값은 아래와 같습니다. lower_case_table_names 옵션 값 lower_case_table_names=0 : 테이블 생성 및 조회 시 대/소문자 구분 lower_case_table_names=1 : 입력 값을 모두 소문자로 인식. 즉, 대소문자 구분하지 않음 lower_case_table_names=2 : 윈도우에서 대/소문자를 구분해서 테이블 생성 아까 Windows에서는 대소문자를 구분하지 않는다고 했는데, 그 이유는 OS별로 default value가 다르기 때..

Spring boot JPA에서 DB 예약어를 column으로 사용하는 방법

안녕하세요 노루아부지 입니다. 이번에 새로운 java 프로그램을 JPA로 개발하던 중, 예약어로 인해 에러가 발생했습니다. 저희 회사에서는 mssql, mariadb, oracle 이렇게 3개의 Database를 사용하는데요. 문제는 이전 담당자가 테이블의 칼럼명으로 "type"이라는 단어를 사용을 한 것이었습니다. 이 단어는 oracle의 예약어인데, 이미 고객사에 설치가 된 상황이어서 칼럼명을 이제 와서 바꿀 수 없는 상황이었습니다. (기존에는 Mybatis 사용) Spring boot JPA를 사용하며 Database 예약어를 column으로 사용하는 방법을 찾아보았습니다. (물론 예약어를 사용하지 않는 것이 제일 좋은 방법입니다.) 목차 1. Database 별 예약어 2. Spring boot ..

DBCP valicationQuery 설정

DB에 접속 중인 세션을 오랫동안 사용하지 않거나 네트워크에 문제가 발생하는 경우 DB 세션이 끊어질 수 있습니다. DB 세션이 끊어지는 경우 재접속 처리를 해야 다시 정상적인 서비스가 가능해집니다. 재접속 처리 방법 중에 autoReconnect=true 옵션이 있는데 이 옵션을 잘못 사용하는 경우 예상하지 못한 문제가 발생할 수 있습니다. autoReconnect 옵션은 쿼리를 수행한 다음 DB 세션에 문제가 있으면 단순히 SQLException을 발생한 후 재접속 처리를 합니다. 문제는 트랜잭션 구동 환경에서 수행 중이던 트랜잭션은 롤백이 되어야 하고, 남은 트랜잭션은 수행되지 않아야 하는데 autoReconnect옵션은 이런 처리를 하지 않기 때문입니다. 따라서 데이터 정확성이 깨질 수 있습니다...

CentOS 7] MariaDB(mysql) 외부 접속 가능하게 하는 방법

mysql과 mariadb는 기본 명령어가 같기 때문에 같은 명령어로 외부 접속이 가능하도록 할 수 있습니다. // mariadb 접속 # mysql -u root -p // database를 mysql로 변경 $ use mysql; $ select host, user from user; 위 이미지를 보면, host가 localhost로 되어 있습니다. 이는 user가 localhost에서만 접속할 수 있다는 뜻이기 때문에 변경을 해야 합니다. $ grant all privileges on *.* to 'root'@'%' identified by 'root의 비밀번호'; 위 명령어에서 *.*는 모든 DB 접근이고, '%'는 모든 IP에 대해 허용한다는 뜻입니다. 그리고 grant all 명령어를 적용하기..

utf8 vs utf8mb4

MySQL, MariaDB, PostgreSQL, MSSQL, Oracle 등의 Database를 사용하면서 보통 utf8로 설정합니다. 하지만 MariaDB, MySQL의 경우 최근 utf8mb4로 설정하는 경우가 많다고 합니다. 그 이유는 emoji 때문입니다. MySQL, MariaDB는 utf8로 설정하는 경우 emoji 문자가 입력되지 않는 문제를 해결하기 위해 utf8mb4라는 charset이 나오게 되었다고 합니다. emoji는 쉽게 이야기 하면 이모티콘인데요 바로 이런 이모티콘입니다. 😊 이런 문자를 MariaDB, MySQL에서 insert하려고 하면 utf8일 경우 에러가 발생합니다. 사실 일반적인 경우에는 utf8로 해도 상관 없으나, 게시판이나 채팅 내용을 저장하는 부분의 경우 ut..

CentOS 7에 MariaDB 설치

CentOS 7에서 MariaDB를 yum으로 설치하면 예전 버전이 설치됩니다. 그 이후 버전을 설치하기 위해서는 repo를 등록한 후 설치해야 합니다. 1. MariaDB yum repo 등록 # vi /etc/yum.repos.d/MariaDB.repo [mariadb] name = MariaDB baseurl = http://yum.mariadb.org/10.4/centos7-amd64 gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB gpgcheck=1 2. MariaDB 설치 및 확인 # yum install -y MariaDB # rpm -qa | grep MariaDB 3. MariaDB 실행 및 비밀번호 변경 // MariaDB 실행 # system..

Spring JPA selecting specific columns

JPA에서 기본으로 제공하는 findById(), findAll() 등을 사용하면 기본적으로 모든 컬럼을 select합니다. 만약, 특정 컬럼을 구하려고 할 경우 아래와 같이 하면 됩니다. 먼저, 아래와 같은 User Entity가 존재한다고 가정합니다. @Entity @Getter @Setter public class User { @Id private String userId; private String userName; private Integer age; } 1. nativeQuery 사용 import com.example.demo.domain.User; import org.springframework.data.jpa.repository.JpaRepository; import org.springfr..

No identifier specified for entity

nested exception is org.hibernate.AnnotationException: No identifier specified for entity: com.snowdeer.database.board.Member 만약 위와 같은 오류가 발생한다면 Entity 클래스의 @Id 어노테이션이 없거나, 잘못된 것입니다. import lombok.Getter; import lombok.Setter; import javax.persistence.Entity; import javax.persistence.Id; @Entity @Getter @Setter public class User { @Id private String userId; private String userName; private Integ..

jpa] @CreatedDate annotation이 동작하지 않는 경우

jpa에서 @CreateDate는 DB에 insert를 할 때 자동으로 현재 시간을 넣어주는 annotation입니다. 보통 이것을 사용할 때 아래와 같이 사용하는데요 @Getter @Setter @Entity @EntityListeners(AuditingEntityListener.class) public class User { /* 생략 */ @CreateDate private LocalDateTime createDate; } 이렇게 했는데 @CreateDate가 동작하지 않는다면 Configuration class에 @EnableJpaAuditing annotation을 추가하면 됩니다.

728x90
반응형
loading