jpa 3

JPA N+1 문제 해결

N + 1 문제란? 엔티티를 가져오고 난 뒤 연관된 엔티티를 가져오기 위해 다시 쿼리를 날리는 것을 N + 1 문제라고 합니다. 예를 들어, Member와 Team이 N:1로 매핑되어 있을 때 'select m from Member m'이라는 JPQL문을 사용하면 우선, 한 번의 쿼리로 모든 Member를 가져옵니다. 그리고 Team 엔티티의 값에 접근하는 순간 추가적으로 쿼리가 나갑니다. 이때 Member row 하나당 한 번의 쿼리가 나가므로, Member의 row가 총 N개라면 N 번의 추가 쿼리가 나가게 됩니다. Member 엔티티를 가져올 때 1번 + Team 엔티티를 가져올 때 N 번의 쿼리가 발생하므로 총 N+1번의 쿼리가 발생합니다. 애초에 Member 엔티티를 가져올 때 Team 엔티티까..

JPA 2023.07.04

QueryDSL

QueryDSL VS JPQL QueryDSL은 자바에서 사용하는 ORM(Object-Relational Mapping) 프레임워크인 JPA(Java Persistence API)에서 사용되는 쿼리 언어입니다. 이와 동일한 역할을 하는 JPQL이란 것도 있습니다. JPA에서 사용되는 두 쿼리 언어(QueryDSL, JPQL)의 차이는 무엇일까요? 타입 안정성 JPQL은 문자열로 작성된 쿼리이기 때문에 쿼리에 문제가 있는 경우, 컴파일러가 알아내기 어렵습니다. 이에 반해 QueryDSL은 자바 언어로 작성되기 때문에 컴파일 시점에서 문제를 발견할 수 있으며, 런타임에서 오류가 발생할 가능성이 크게 줄어듭니다. 예를 들어 JPQL을 사용하여 특정 책의 저자를 찾는 코드를 작성한다고 가정해 보겠습니다. 다음은..

JPA 2023.04.02

JPA 연관 관계 설정

JPA의 역할 중 DB와 애플리케이션 간의 불일치성을 해결해 주는 역할이 있는데, DB의 FK와 JOIN을 통한 JOIN Table은 코틀린에서 어떻게 표현해줘야 할까? JPA를 사용하여 해당 문제를 해결해 보자. 얻어갈 지식 연관 관계를 사용 한 DB와 애플리케이션 ( kotlin )간의 불일치 해결 방법 사전 지식 RDB에서의 1:1, 1:N, N:M 관계 "여러 문제와 해결" DB에서 테이블 A와 테이블 B가 아래와 같은 구조로 있을 때 CREATE TABLE A( id int not null primary key, name nchar(20), age int ); CREATE TABLE B( a_id int not null references A(id) id int not null primary k..

JPA 2021.07.06