jpa

Develop/Spring

[Spring Boot/JPA] @Transactional을 썼는데도 Dirty Checking에 실패한다면? (feat. clearAutomatically = true)

개요 최근, 이전에 개발했던 사이드 프로젝트를 리팩토링하고 있다. 이것저것 다양한 시도를 해보면서 생각보다 코드가 많이 바뀌었는데, 그 과정에서 멀쩡히 돌아가던 기능이 갑자기 실패하는 이슈가 발생했다 😇 🔫 다른 방법으로 해결할 수도 있었지만 그러면 진 느낌이 들어서 붙잡고 끙끙댔던 코드.. 겨우 찾은 원인은 생각보다 간단했지만, 내가 사용한 어노테이션과 영속성 컨텍스트 동작 원리를 모르면 또 제대로 이해하기 어려운 이슈라고 생각되어 포스팅해본다. (지금도 분해서 앓고 있음) 문제의 코드 코드를 보기 전에 간단히 도메인 컨텍스트를 설명하면 다음과 같다. 카테고리는 하위에 여러 개의 북마크를 가질 수 있고, 북마크는 무조건 하나의 카테고리에 속해야 한다. (즉 일대다 관계) 카테고리를 삭제하면 하위 북마크..

Develop/Spring

[JPA] 영속성 전이 (CASCADE)와 고아 객체에 대하여

개요 나는 Spring을 배운 이래로 항상 JPA를 사용해서 프로젝트를 진행했다. 이력서나 자기소개에도 JPA을 쓸 줄 안다~고 쓰고 다녔고. 그런데 요즈음, 내가 JPA를 잘 이해해서 100% 활용하기보단 관습적인 코드를 죽어라 쓰고 있는 것 같다고 느꼈다 🤔 예를 들자. cascade를 들으면 제일 먼저 생각나는 건 DBMS의 on update, on delete cascade 옵션이다. 하지만 JPA의 cascade가 이들과 동일한 개념이라고 생각하면 아주 곤란해진다. 엄밀하게는 달라! 😇 고런고로 이번 기회에 JPA 영속성 전이 개념을 좀 더 확실히 정리해보려 한다. 영속성 컨텍스트 (persistence context) 이 포스트를 읽으시는 분들 중 영속성 개념이 아직 생소한 분들도 계실 것 같..

Develop/Spring

[Spring Boot] count를 구현하는 5가지 방법

개요 프로젝트를 하다보면 count를 자주 사용하게 된다. 게시글의 수, 댓글의 수, 친구 수, 알림 수, 통계 처리 등 아주 다양한 count 요구사항이 존재한다. Spring JPA를 사용하면 count 키워드 (쿼리 메소드)를 이용해 아주 쉽게 해당 기능을 구현할 수 있다. 하지만 우리가 무심코 사용하는 count 쿼리, 과연 데이터 수가 많을 때에도, 그리고 request 수가 (또는 TPS) 많을 때에도 잘 작동할까? count 를 구현하는 5가지 방법들과, 각각의 장단점을 알아보자. 개발 환경 1. Framework : Spring Boot 2.6 2. Programming Language : Java 11 3. DataBase : MySQL 8 4. OS : macOS Ventura 13.2..

스껄한우디
'jpa' 태그의 글 목록