JPA 5

Spring Data JPA 고급 기능 - Specification, Projection, Auditing

들어가며Spring Data JPA는 기본 CRUD 외에도 강력한 고급 기능들을 제공합니다. 동적 쿼리를 위한 Specification, 필요한 컬럼만 조회하는 Projection, 생성/수정 시간을 자동 관리하는 Auditing 등을 제대로 활용하면 코드 품질과 생산성을 크게 높일 수 있습니다. 이 글에서는 실무에서 바로 적용 가능한 수준으로 각 기능을 다루겠습니다.1. JpaSpecificationExecutor - 동적 쿼리 구현검색 조건이 동적으로 변하는 경우(관리자 검색 화면 등), QueryDSL 없이 Specification만으로도 깔끔하게 동적 쿼리를 구현할 수 있습니다.Repository에 JpaSpecificationExecutor 추가public interface ProductRepo..

JPA 2026.04.03

JPA 성능 최적화 실전 - 벌크 연산부터 2차 캐시까지

들어가며JPA는 생산성 높은 ORM이지만, 제대로 된 최적화 없이 사용하면 심각한 성능 문제가 발생합니다. N+1 문제, 불필요한 더티 체킹, 비효율적인 벌크 처리 등은 실무에서 빈번히 마주치는 이슈입니다. 이 글에서는 JPA 성능 최적화의 핵심 기법들을 Before/After 비교와 함께 실전 수준으로 정리합니다.1. JPQL 벌크 연산 (UPDATE/DELETE)엔티티를 하나씩 수정하면 변경 감지(dirty checking)가 각각 발생하여 UPDATE 쿼리가 N번 실행됩니다. 벌크 연산을 사용하면 단일 쿼리로 처리할 수 있습니다.Before: 엔티티 하나씩 수정 (N번의 UPDATE)@Transactionalpublic void deactivateInactiveUsers(LocalDateTime t..

JPA 2026.04.02

QueryDSL 실전 가이드 - 동적 쿼리부터 페이징까지

왜 QueryDSL인가?Spring Data JPA는 간단한 CRUD 쿼리에는 매우 강력하지만, 복잡한 동적 쿼리를 작성하기에는 한계가 있습니다. JPQL은 문자열 기반이라 컴파일 시점에 오류를 잡을 수 없고, Criteria API는 코드가 너무 복잡해 가독성이 떨어집니다. QueryDSL은 타입 안전한 자바 코드로 쿼리를 작성할 수 있게 해주며, 특히 동적 쿼리 작성에 탁월한 성능을 발휘합니다.1. QueryDSL 설정 (Spring Boot 3.x 기준)Spring Boot 3.x(Jakarta EE) 기준으로 QueryDSL 설정 방법을 안내합니다.Gradle 설정 (build.gradle)plugins { id 'java' id 'org.springframework.boot' vers..

JPA 2026.03.26

JPA 영속성 컨텍스트 완벽 이해 - 1차 캐시부터 변경 감지까지

영속성 컨텍스트란?JPA에서 가장 핵심적이면서도 이해하기 어려운 개념이 바로 영속성 컨텍스트(Persistence Context)입니다. 영속성 컨텍스트는 엔티티를 영구 저장하는 환경이라는 뜻으로, 애플리케이션과 데이터베이스 사이에서 엔티티 객체를 관리하는 논리적인 공간입니다. EntityManager를 통해 엔티티를 영속성 컨텍스트에 저장하거나 조회하면, JPA는 다양한 최적화 기법을 자동으로 적용합니다.// EntityManager를 통해 영속성 컨텍스트에 접근@PersistenceContextprivate EntityManager em;// 엔티티를 영속성 컨텍스트에 저장em.persist(member);// 영속성 컨텍스트에서 조회Member findMember = em.find(Member.cl..

JPA 2026.03.26

JPA N+1 문제 완벽 정리 - 원인부터 해결까지 실무 가이드

들어가며JPA를 사용하는 백엔드 개발자라면 한 번쯤은 마주치게 되는 문제가 있습니다. 바로 N+1 문제입니다. 분명 하나의 쿼리로 끝날 것 같았는데, 콘솔 로그를 열어보면 수십, 수백 개의 쿼리가 쏟아지는 경험을 해보셨을 겁니다. 이 글에서는 N+1 문제의 원인을 정확히 이해하고, 실무에서 바로 적용할 수 있는 해결법을 정리하겠습니다.1. N+1 문제란 무엇인가N+1 문제는 연관 관계가 설정된 엔티티를 조회할 때, 1번의 쿼리로 N개의 엔티티를 가져온 뒤, 각 엔티티의 연관된 데이터를 가져오기 위해 추가로 N번의 쿼리가 실행되는 현상입니다. 총 1 + N번의 쿼리가 발생하기 때문에 N+1 문제라고 부릅니다.간단한 예시로 이해하기팀(Team)과 회원(Member)이 일대다 관계라고 가정하겠습니다.@Enti..

JPA 2026.03.24