본문 바로가기

DATABASE6

[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.
@Transactional 어노테이션의 다양한 옵션 활용 본 글은 아래의 글에서 이어지는 글이다. https://kafcamus.tistory.com/30 @Transactional 어노테이션의 이해 나는 보통 서비스 코드에 @Transactional 어노테이션을 활용해준다. 그런데 사실 뜻도 잘 모르고 좋다고 그래서 쓴거라...지나고 보니 정확히 설명하기가 어려웠다. 그런고로, 해당 어노테이션의 작 kafcamus.tistory.com 앞서 @Transactional 어노테이션을 사용할 경우 어떻게 트랜잭션이 구현되는지를 간단히 다뤘다. 그런데, 막상 @Transactional 어노테이션을 써보려고 하니 Isolation이나 propagation과 같은 parameter에 대해 잘 몰라서 난감한 마음이다. 그런 이유로, 이번 글은 @Transactional .. 2021. 6. 17.
@Transactional과 Lazy Loading 본 글은 아래의 글에서 이어지는 글이다. https://kafcamus.tistory.com/30 @Transactional 어노테이션의 이해 나는 보통 서비스 코드에 @Transactional 어노테이션을 활용해준다. 그런데 사실 뜻도 잘 모르고 좋다고 그래서 쓴거라...지나고 보니 정확히 설명하기가 어려웠다. 그런고로, 해당 어노테이션의 작 kafcamus.tistory.com 앞서 @Transactional 어노테이션을 사용할 경우 어떻게 트랜잭션이 구현되는지를 간단히 다뤘다. 그런데, 이렇게 트랜잭션을 구현할 경우, 예상치 않게 문제가 생길 수 있다. 이제 어떤 문제가 발생할 수 있는지 다뤄보고, 이를 어떻게 해결할지 고민해보자. @Transactional 사용과 영속성 컨텍스트 앞선 게시물에서,.. 2021. 6. 15.
@Transactional 어노테이션의 이해 나는 보통 서비스 코드에 @Transactional 어노테이션을 활용해준다. 그런데 사실 뜻도 잘 모르고 좋다고 그래서 쓴거라...지나고 보니 정확히 설명하기가 어려웠다. 그런고로, 해당 어노테이션의 작동 원리부터 사용 예까지 조금 정리해보려고 한다. 내가 이해하려고 쓴 글인지라 많이 엉성하다. 이해가 가지 않거나 빠진 내용이 보이거나 한다면, 꼭 댓글 부탁드립니다. 트랜잭션이란? 데이터베이스 트랜잭션은 데이터베이스 관리 시스템 또는 유사한 시스템에서 상호작용의 단위이다. 여기서 단위라는 말을 사용했는데, 쉽게 말하면 더 이상 쪼개질 수 없는 최소의 연산이라는 의미가 된다. 예를 들어보자. 만약 내가 쇼핑 앱을 켜서 상품을 구매하려고 한다. 그런데 내가 결제를 하는 짧은 시간 사이에 아래와 같은 일이 벌.. 2021. 6. 15.
반응형