[JPA] JPA vs MySQL vs JDBC vs JPQL vs QueryDSL
·
Spring/JPA
JPA vs MyBatis vs JDBC vs QueryDSL vs JPQL 비교 및 분석 Spring 환경에서 데이터베이스를 다룰 때 사용되는 대표적인 기술로 JPA, MyBatis, JDBC, QueryDSL, JPQL 등이 있다.각 기술은 특징, 장점, 단점, 사용 방식이 다르며 프로젝트 요구 사항에 따라 적절한 기술을 선택해야 한다. 1. JDBC (Java Database Connectivity) 특징 • Java의 표준 데이터베이스 API. • SQL을 직접 작성하여 데이터베이스와 통신. • Connection, Statement, ResultSet 등을 사용하여 데이터 처리. 장점 직접적인 SQL 사용 → 데이터베이스의 모든 기능 활용 가능.가장 빠른 성능 → 별도의 프레임워크 없이 최소한의..
[JPA, Kafka] @Transactional과 Kafka 메세지 전송 시점
·
Spring/JPA
카프카와 트랜잭션의 수행 시점Kafka와 JPA를 함께 사용하면 수행되는 시점에서 차이가 있다. 우선 @Transactional을 적용한 경우 어떤 시점에 트랜잭션이 생성되고 수행되는지 확인해야 한다.그림을 통해 먼저 확인해보자. 유저의 요청이 들어오면 Controller 에서 요청을 받아 Service Layer에서 request에서 받은 요청 또는 조회해서 반환할 내용을 DB에서 가져오게된다. 데이터의 변화가 발생했다면 @Transactional은 영속성 컨텍스트에 있는 1차 캐시(한 번 이미 조회하여 데이터가 있다고 가정)와 Snapshot을 비교하게 되는데 이때 더티체킹을 하여 변화가 있다면 Update 구문을 발생하게 된다. 이 쿼리는 메서드가 끝나는 시점에 트랜잭션이 수행되고 DB에 커밋되게 ..
[JPA] @Transaction을 붙이지 않았을 때 생기는 문제, JPA Proxy, LazyLoading과 EagerLoading N+1 문제
·
Spring/JPA
오늘부터 리팩토링 또는 트러블 슈팅위주로 포스팅하려고 한다. 오늘 해결했던 문제LazyLoading으로 설정한 엔티티가 가져와지지 않는 문제2025-02-21T21:31:27.016+09:00 WARN 5521 --- [nio-8080-exec-6] .m.m.a.ExceptionHandlerExceptionResolver : Resolved [org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: com.server.delivery.model.store.entity.Store.operatingHours: could not initialize proxy - no Session]위 warn 로그의..
[JPA] Soft Delete 개발 방법(Hard Delete과의 차이)
·
Spring/JPA
Soft Delete란?이름 그대로 부드러운 삭제이다. Hard Delete는 데이터베이스 내의 데이터를 실제로(물리적) 삭제를 해버린다.Soft Delete는 논리적으로 삭제를 표기하는 방법이다. 현업에서는 데이터를 몇 년간 보존해야 하는 규정이 존재할수도 있기에 몇 년간 데이터를 보관해두다가 Batch 작업을 통해 일괄적으로 데이터를 처리하기도 한다.또한 잘못 삭제했을 경우 백업이 가능하기에 사용하기도 한다.Soft Delete의 단점?데이터베이스에 계속해서 데이터가 쌓이므로 데이터베이스의 용량이 커질 수 밖에 없다. 이후 배치작업을 통해 데이터를 삭제하는 과정이 필요하다.SELECT조회 시 불필요한 검색 조건을 추가해야 한다.Where을 통한 필터링이 꼭 추가되어야 한다.기존의 Soft Delete..
[개념 정리]Spring Boot에서 JPA의 Soft Delete와 Cascade 연관관계
·
Spring/JPA
JPA를 사용하다 보면 데이터 삭제 시 완전 삭제(Hard Delete)가 아닌 Soft Delete를 고려해야 하는 경우가 있습니다. Soft Delete는 데이터를 물리적으로 삭제하지 않고 특정 컬럼 값을 변경하여 삭제 상태를 표시하는 방식으로, 데이터를 보존하면서 삭제 여부를 관리할 수 있습니다. 이 글에서는 Soft Delete를 구현하는 방법과 Soft Delete 적용 시 Cascade 연관관계에서 발생할 수 있는 문제 및 해결 방법을 살펴보겠습니다.Soft Delete란?Soft Delete는 데이터베이스에서 데이터를 물리적으로 삭제하지 않고, "삭제됨" 상태를 표시하기 위해 추가적인 컬럼(e.g., deleted 또는 deletedAt)을 활용하는 방법입니다. 이를 통해 다음과 같은 장점을..
save the transient instance before flushing
·
Spring/JPA
트랜잭션 문제중 맞닥뜨렸던 내용을 다시 찾아보지 않기 위해 기록한다...아래는 내가 겪은 예외내용이다. TransientPropertyValueException 예외에 대한 내용이며 영속성 컨텍스트에 퐇마되지 않은 상태의 데이터를 사용하려 하니 발생하는 문제였다.org.springframework.dao.InvalidDataAccessApiUsageException: org.hibernate.TransientPropertyValueException: object references an unsaved transient instance - save the transient instance before flushing : com.mentit.mento.global.authToken.entity.SocialA..