본문 바로가기

프로그래밍/JPA, Database7

관계형 데이터베이스의 데이터 무결성 얼마 전에 친구와 대화를 하다가 참조 무결성에 대한 이야기가 나왔는데, 개념을 어렴풋하게만 알고 있어 정리해볼 필요를 느꼈다. 이 글은 아래 내용에 대해 다룬다. 데이터 무결성이란 무엇인가? 데이터 무결성의 종류 데이터 무결성의 주요 요소와 예시 물론 정보통신기술용어해설에서 지적하듯, 데이터 무결성은 정보보호 분야나 전자회로 분야에서도 쓰이는 만큼 본문 이상의 의미를 내포하고 있다. 여기에서는 데이터 무결성의 의미를 관계형 데이터베이스의 경우로 한정짓는다. 데이터 무결성 데이터 무결성(Data Integrity)이란 무엇일까? 한국데이터산업진흥원에서는 데이터 무결성에 대해, 아래와 같이 정리하고 있다. 데이터베이스에서 무결성은 무엇으로부터의 무결성일까? 개발 환경일까, 데이터베이스 자체일까? 정답부터 말.. 2021. 10. 29.
[JPA] 비관적 락과 낙관적 락, 트랜잭션의 격리 수준 얼마 전 면접에서 질문을 받았지만 전혀 몰랐던 비관적 락과 낙관적 락 개념. 다행히 김영한님의 자바 ORM 표준 JPA 프로그래밍에서 관련 내용을 소개하고 있어, 참고하여 정리해 보았다. 이 글은 다음 내용을 다룬다. 트랜잭션의 격리에 대해 알아본다. 낙관적 락과 비관적 락에 대해 알아본다. 트랜잭션과 격리 수준 트랜잭션은 ACID라고 하는, 원자성, 일관성, 격리성, 지속성을 보장해야 한다. 그 중 격리성의 경우, 동시에 실행되는 트랜잭션들이 서로에게 영향을 끼치지 못하게 격리한다 라는 의미를 가진다. 사실 이를 제일 완벽히 구현하는 방법은 트랜잭션이 여러 개일때 순차적으로 실행하는 것이지만, 이는 성능에 너무 큰 영향을 준다는 점. 그래서 트랜잭션의 격리는 4단계로 나눠서 수행하게 된다. 이에 대해서.. 2021. 10. 15.
DB 커넥션 풀과 HikariCP 며칠 전에 면접을 봤는데, 거기서 커넥션 풀에 대한 질문이 나왔다. 그런데 대답을 잘 못해서 아쉽기도 했고, 면접 직후 찾아보니 HikariCP에 대한 이야기도 나오길래 어? 맨날 springboot 켜면 나오는 hikari가 커넥션 풀을 관리해주는 거였어? 하고 관심을 가지게 됐다. 그래서 이번 글은 커넥션 풀과 hikariCP에 대한 소개. DB 커넥션 풀 커넥션 풀은 데이터베이스와 연결된 커넥션을 미리 만들어 풀에서 관리하고, 필요시 이를 사용하고 반환하는 기법이다. 이는 데이터베이스 연결 수행 및 읽기/쓰기 작업에 관련된 오버헤드를 줄이는 것이 주 목적인 데이터 엑세스 패턴이다. 또한 이는, 가장 기본적인 수준의 DB 연결 캐시라고 할 수 있다. 이렇게만 들으면 감이 안올텐데, 일단 예시를 먼저 .. 2021. 10. 14.
H2로 SpringBoot 테스트 도중 SQL이 실행되지 않는 경우 대응법 이 글은 다음 상황에 대처한 경험을 작성한 글이다. MySQL, PostgreDB 등에서 사용하던 SQL이 H2 DB에서 실행되지 않는 경우를 확인한다. H2 모드를 조정하여 테스트 환경 등에서 쿼리가 정상 실행되도록 한다. 여러 환경에서의 DB 운영 현재 졸업 프로젝트를 진행하면서, 아래처럼 DB 환경을 나눠 구축하고 있다. application.yml에서 여러 yaml 파일을 import하여 관리한다. application-prod.yml에서 운영서버 실행 환경을 설정한다. DB는 MariaDB를 사용하며, flyway를 사용한다. application-local.yml에서 로컬 실행 환경을 설정한다. DB는 MySQL을 사용하며, flyway를 사용한다. application-test.yml에서 테.. 2021. 10. 8.
[JPA] findAll, findAllBy, findAllByIn AOP로 성능 테스트해보기 오늘 회사원 친구와 JPA 이야기를 하다가, 다음과 같은 질문을 받았다. 회사 코드를 보니까, Repository에서 findAll을 한 다음 stream으로 가공하는 코드가 있었다. 그런데 그 코드는, findAllByXXX로 바꾸면 해결되는 간단한 필터 연산 코드였다. findAll vs findAllByXXX의 시간 효율 차이가 얼마나 날까? 듣고 보니 궁금하기도 하고, 이런 걸 테스트해보고 싶어서 직접 코드를 짜봤다. 본 글에서 수행하는 내용은 다음과 같다. AOP로 타이머를 만들어서 서비스에 씌우고, SpringBootTest로 테스트를 실행한다. findAll, findAllBy, findAllByIn 세 가지를 사용할 때 쿼리가 어떻게 나오나 비교해 본다. 각각의 쿼리에 대한 서비스 차원의 .. 2021. 9. 2.
[JPA] Bean Validation과 Hibernate apply-to-ddl 이 글은 이전에 작성한 포스팅에 기반을 두고 있다. [JPA] nullable=false와 @NotNull 비교, Hibernate Validation 오늘은 다음의 고민 때문에 글을 작성하게 되었다. JPA에서 DDL을 자동으로 생성할 수 있는데, 이 때 not null 옵션은 어떻게 붙이나? JPA의 엔티티 객체에 @NotNull 검증 어노테이션을 주면 어떻게 되나 kafcamus.tistory.com 이전 글을 간단히 정리하면 다음과 같다. JPA에서는 DDL 자동 생성시, @NotNull 어노테이션을 쓴 컬럼을 not null로 설정해준다. 하지만 똑같이 null을 금지하는 @NotEmpty과 @NotBlank는 컬럼을 not null로 설정해 주지 않는다. 이것은 이상하다는 생각이 들었다. 이전.. 2021. 2. 22.
반응형