FetchType과 N+1 문제
1. 즉시 로딩(EAGER)과 지연 로딩(LAZY) 📌 FetchType 기본값 정리 JPA 연관관계 어노테이션의 기본 FetchType은 다음과 같다. 어노테이션 기본 FetchType @ManyToOne EAGER @OneToOne EAGER @OneToMany LAZY @ManyToMany LAZY @ManyToOne과 @OneToOne의 기본값...
1. 즉시 로딩(EAGER)과 지연 로딩(LAZY) 📌 FetchType 기본값 정리 JPA 연관관계 어노테이션의 기본 FetchType은 다음과 같다. 어노테이션 기본 FetchType @ManyToOne EAGER @OneToOne EAGER @OneToMany LAZY @ManyToMany LAZY @ManyToOne과 @OneToOne의 기본값...
1. JPQL 기초 📌 SQL vs JPQL JPQL(Jakarta Persistence Query Language)은 테이블과 컬럼이 아닌 엔티티와 필드를 기준으로 작성하는 객체 지향 쿼리 언어다. 1 2 3 4 -- SQL — 테이블명, 컬럼명 기준 SELECT m.member_id, m.member_name, m.age FROM member m ...
1. Criteria API란 Criteria API는 자바 코드로 타입 안전하게 동적 쿼리를 작성하는 JPA 표준 API다. JPQL이 문자열 기반이라 오타나 필드명 변경 시 런타임에야 오류를 발견하는 반면, Criteria API는 컴파일 타임에 타입 오류를 잡을 수 있다. 1 2 3 4 5 // JPQL — 문자열 기반. 오타가 있어도 컴파일 타...
1. QueryDSL 설정 📌 의존성 및 Q클래스 생성 설정 (Spring Boot 3.x / Gradle Kotlin DSL) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 // build.gradle.kts plugins { kotlin("...
1. 벌크 연산과 읽기 전용 트랜잭션 📌 @Modifying 벌크 UPDATE/DELETE 벌크 연산은 영속성 컨텍스트를 거치지 않고 DB에 직접 실행된다. 이 때문에 실행 전후로 영속성 컨텍스트 상태와 DB 상태가 불일치하는 문제가 생길 수 있다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 // ...
1. 동시성 제어 — 낙관적·비관적 잠금 📌 낙관적 잠금 (Optimistic Lock) — @Version 낙관적 잠금은 “대부분의 트랜잭션에서 충돌이 없을 것”이라고 낙관적으로 가정하고, 실제 충돌이 발생한 시점에 예외를 던지는 방식이다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 @Entity publi...