본문 바로가기

JPA Study9

N+1 문제 해결방법 N+1 문제를 해결하는 두 가지 대표적인 방법, 페치 조인(Fetch Join)과 배치 처리 1. 페치 조인(Fetch Join)페치 조인은 JPQL이나 Hibernate에서 사용하는 기법으로, 연관된 엔티티를 함께 조회하여 N+1 문제를 해결하는 방법입니다. 기본적으로 JPA는 연관된 엔티티를 조회할 때 지연 로딩(Lazy Loading)을 사용하여 필요할 때마다 쿼리를 추가로 발생시키는데, 이때 N+1 문제가 발생할 수 있습니다.페치 조인의 원리페치 조인을 사용하면 연관된 엔티티를 한 번에 조인하여 한 번의 쿼리로 조회할 수 있습니다. 즉, 지연 로딩 대신 즉시 로딩(Eager Loading)을 사용하여 연관된 데이터를 한 번에 가져오는 방식입니다.페치 조인 예시예를 들어, 회원과 팀(1:N 관계)이.. 2024. 9. 25.
JPQL과 QueryDSL 1. JPQL (Java Persistence Query Language)JPQL은 JPA(Java Persistence API)에서 제공하는 객체 지향 쿼리 언어입니다. SQL과 유사하게 데이터베이스에서 데이터를 조회하고 조작할 수 있지만, JPQL은 데이터베이스 테이블이 아닌 엔티티 객체를 대상으로 작업합니다. 따라서 JPQL은 JPA 엔티티 객체의 속성이나 관계를 사용하여 쿼리를 작성하게 됩니다.JPQL의 특징:SQL과 유사: SQL처럼 SELECT, INSERT, UPDATE, DELETE 쿼리를 작성하지만, 데이터베이스 테이블 대신 JPA 엔티티 객체에 대해 쿼리를 실행합니다.데이터베이스 독립적: JPQL은 특정 데이터베이스에 종속되지 않으며, JPA 구현체가 데이터베이스에 맞는 SQL로 변환해.. 2024. 9. 24.
더티 체킹(Dirty Checking) ( 변경 감지 ) 더티 체킹(Dirty Checking)은 JPA(Java Persistence API)에서 사용되는 중요한 개념 중 하나로, 엔티티의 상태 변화를 자동으로 감지하여 데이터베이스와 동기화하는 기능을 의미합니다.더티 체킹 동작 방식:엔티티 조회: JPA를 통해 데이터베이스에서 엔티티를 조회하면, 해당 엔티티는 영속성 컨텍스트(Persistence Context)에 의해 관리됩니다.엔티티 수정: 애플리케이션 코드에서 조회한 엔티티의 필드를 변경하면, JPA는 특별한 명시적 업데이트 요청 없이도 자동으로 이 변화를 감지합니다.변경 감지: 트랜잭션이 끝나기 전에, JPA는 더티 체킹을 통해 관리 중인 엔티티들의 상태를 검사하고, 초기 상태와 비교하여 변경된 부분이 있는지 확인합니다.자동 업데이트: 만약 변경 사항.. 2024. 9. 23.
서브쿼리 (Subquery) 서브쿼리(Subquery)는 SQL에서 다른 쿼리 내에 포함된 쿼리를 말합니다. 서브쿼리는 일반적으로 내부 쿼리 또는 중첩 쿼리라고도 하며, 메인 쿼리(Main Query)에 의해 참조되어 데이터를 반환하거나 필터링하는 데 사용됩니다. 서브쿼리는 하나의 쿼리 내에서 다른 쿼리의 결과를 참조하거나 비교하기 위해 사용됩니다.서브쿼리의 기본 구조서브쿼리는 일반적으로 괄호 안에 작성되며, 메인 쿼리와 함께 실행됩니다.SELECT column1, column2FROM table_nameWHERE columnX = (SELECT column FROM another_table WHERE condition);서브쿼리: SELECT column FROM another_table WHERE condition 부분이 서브쿼.. 2024. 9. 23.
이너 조인(Inner Join)과 레프트 조인(Left Join) 이너 조인(Inner Join)과 레프트 조인(Left Join)은 SQL에서 두 개 이상의 테이블을 결합할 때 사용하는 조인의 유형입니다. 이 둘의 가장 큰 차이점은 조인 후 결과에 포함되는 행의 기준에 있습니다.1. 이너 조인(Inner Join)이너 조인은 두 테이블에서 일치하는 데이터만 가져옵니다. 즉, 조인 조건에 맞는 행들만 결과에 포함됩니다. 일치하지 않는 데이터는 무시됩니다.예시:Customer 테이블과 Order 테이블이 있다고 가정해봅시다.Customer 테이블:id | name----|--------1 | John2 | Alice3 | BobOrder 테이블:id | customer_id | order_date----|--------------|------------1.. 2024. 9. 20.
JPA 자동생성전략 3가지방법 ( IDENTITY, SEQUENCE, TABLE ) JPA에서는 기본 키를 자동으로 생성하는 다양한 전략을 제공합니다. 그중 대표적인 세 가지 자동 생성 전략은 IDENTITY, SEQUENCE, TABLE입니다. 각 전략은 데이터베이스의 동작 방식에 따라 다르게 동작하며, 적절한 자동 생성 전략을 선택하는 것이 중요합니다. 1. IDENTITY 전략IDENTITY 전략은 데이터베이스에 의존하여 기본 키를 자동으로 생성합니다.주로 MySQL이나 SQL Server와 같은 데이터베이스에서 사용되며, 데이터베이스의 AUTO_INCREMENT 기능을 통해 기본 키가 생성됩니다.즉, 엔티티를 영속성 컨텍스트에 추가할 때 바로 쿼리가 실행되고, 자동 증가된 값이 기본 키로 설정됩니다.예시:@Entitypublic class User { @Id @Gene.. 2024. 9. 11.