본문 바로가기

JPA10

LocalDateTime 사용 시 주의할 몇몇 오류사례 오늘은 프로젝트를 진행하다가 당황스러운 실수를 해서, 블로그에 간단히 기록해보려고 한다. 요약하자면 다음과 같다. LocalDateTime.MIN / LocalDateTime.MAX 값이 얼마인지 미리 알아두자 MySQL의 timestamp의 범위를 미리 숙지하자 LocalDateTime의 MIN/MAX 전기차 충전소 정보 프로젝트를 진행하던 중, 문자열로 된 날짜/시간 정보를 받을 일이 생겼다. 전기차 충전기의 최근 충전 시간 정보였는데, LocalDateTime.parse로 파싱하다 보니 에러가 났다. 알고 보니 공공 API의 해당 필드에 빈 값이 들어가는 경우가 존재했던 것이다. 찜찜하지만 그렇다고 API를 바꿀 수는 없으니...임시변통으로 다음과 같은 방법을 취했다. (...) if(Objects.. 2021. 10. 27.
[JPA] 비관적 락과 낙관적 락, 트랜잭션의 격리 수준 얼마 전 면접에서 질문을 받았지만 전혀 몰랐던 비관적 락과 낙관적 락 개념. 다행히 김영한님의 자바 ORM 표준 JPA 프로그래밍에서 관련 내용을 소개하고 있어, 참고하여 정리해 보았다. 이 글은 다음 내용을 다룬다. 트랜잭션의 격리에 대해 알아본다. 낙관적 락과 비관적 락에 대해 알아본다. 트랜잭션과 격리 수준 트랜잭션은 ACID라고 하는, 원자성, 일관성, 격리성, 지속성을 보장해야 한다. 그 중 격리성의 경우, 동시에 실행되는 트랜잭션들이 서로에게 영향을 끼치지 못하게 격리한다 라는 의미를 가진다. 사실 이를 제일 완벽히 구현하는 방법은 트랜잭션이 여러 개일때 순차적으로 실행하는 것이지만, 이는 성능에 너무 큰 영향을 준다는 점. 그래서 트랜잭션의 격리는 4단계로 나눠서 수행하게 된다. 이에 대해서.. 2021. 10. 15.
[JPA] findAll, findAllBy, findAllByIn AOP로 성능 테스트해보기 오늘 회사원 친구와 JPA 이야기를 하다가, 다음과 같은 질문을 받았다. 회사 코드를 보니까, Repository에서 findAll을 한 다음 stream으로 가공하는 코드가 있었다. 그런데 그 코드는, findAllByXXX로 바꾸면 해결되는 간단한 필터 연산 코드였다. findAll vs findAllByXXX의 시간 효율 차이가 얼마나 날까? 듣고 보니 궁금하기도 하고, 이런 걸 테스트해보고 싶어서 직접 코드를 짜봤다. 본 글에서 수행하는 내용은 다음과 같다. AOP로 타이머를 만들어서 서비스에 씌우고, SpringBootTest로 테스트를 실행한다. findAll, findAllBy, findAllByIn 세 가지를 사용할 때 쿼리가 어떻게 나오나 비교해 본다. 각각의 쿼리에 대한 서비스 차원의 .. 2021. 9. 2.
@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.
반응형