JPA 4

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

JPA의 개념과 이해

spring boot 프로젝트를 하면서 데이터 베이스 쿼리를 날리기 위해 JPA를 사용하고 있는데, 이해 없이 사용만 하는 것 같아 JPA의 기초적인 개념과 동작에 대해 알아보고자 글을 쓴다. 글의 대부분은 아래 유튜브를 보며 정리한 것이고, 강의가 깔끔하여서 웬만하면 강의를 듣는 게 좋겠단 생각이 들었다. 얻어갈 지식 JPA 개념과 장점 "JPA 란?" JPA ( Java persistence API )는 자바 진영의 ORM 기술 표준이다. 더보기 ORM 이란? ORM ( Object Relational Mapping - 객체 관계 매핑 )은 테이블을 객체지향적으로 사용하기 위한 기술. Object ( 애플리케이션 쪽 )와 Realational ( RDB ) 간 매핑을 해주는 녀석이다. 객체는 객체대로..

JPA 2021.07.04