본문 바로가기
반응형

Spring/Spring Data JPA7

Spring Data JPA - 데이터 뻥튀기 (일대다 관계 조인) "N + 1 문제 ②편"에서 N + 1 문제 해결 방법으로 Fetch Join을 사용해야 한다고 정리했었는데요. 정리를 하면서 "컬렉션 페치 조인, 일대다 관계인 @OneToMany로 연관관계를 가지는 Entity를 조회할 때 데이터 뻥튀기가 일어난다."라고 말씀드렸습니다. 그래서 오늘은 fetch join에 대해 자세히 알아보고 데이터 뻥튀기를 해결해보도록 하겠습니다. 먼저 페치 조인의 특징, 일반 조인과의 차이점을 알아보고, [일대다 관계 조인, 컬렉션 페치 조인]에 대해서 알아보도록 하겠습니다. 페치 조인의 특징 SQL 조인 종류 X JPQL에서 성능 최적화를 위해 제공하는 기능 연관된 엔티티나 컬렉션을 SQL 한 번에 함께 조회하는 기능 일반 조인과의 차이점 일반 조인 실행 시 연관된 엔티티를 함.. 2022. 3. 7.
Spring Data JPA - 상속(Inheritance) + 다대다(N:M) 관계 엔티티를 설계하면서 Parent 클래스를 상속 받은 Child 클래스들 간의 다대다(N:M) 관계를 맺어야 하는 요구사항이 있어서 어떻게 해결했는지 정리해보려고 합니다. 어떤 상황인지 이해하실 수 있도록 예시를 들겠습니다. - 개발자 A, B, C, D가 있습니다. - 개발자는 회사에 재직 중이며, [대기업은 삼성전자, SK, etc..], [IT 서비스업은 네이버, 카카오, etc..]가 있습니다. - 서로 다른 업종을 가진 기업은 서로 협약을 맺을 수 있습니다. (ex. 삼성전자 네이버) - 같은 업종끼리의 협약은 고려하지 않도록 하겠습니다. 위와 같은 유사한 예시의 요구사항을 토대로 프로젝트를 진행하고 있었는데 이 문제를 어떻게 해결해야 할 까?를 생각했을 때 다음과 같이 엔티티를 설계 할 필요가 .. 2022. 1. 9.
Spring Data JPA - Self-Reference Spring Security를 사용한 프로젝트에서 권한에 계층을 두도록 설계했습니다. 계층을 부여하는 Entity는 Self Reference 하였고, 제가 만든 클래스에 ApplicationRunner 인터페이스를 상속하여 애플리케이션이 구동될 때 DB에서 값[권한 계층 정보]을 읽어 세팅하도록 하였습니다. 근데 애플리케이션이 구동되는 시점에 권한 계층 관련한 쿼리가 여러 번 나가는 것을 확인하여 튜닝했고 거기서 배운 것들을 정리해보도록 하겠습니다. [Spring Security에 대한 내용은 제외하고, JPA에서 Entity가 자신을 참조하는 Self-Reference, @JoinColumn의 속성인 referencedColumName을 제대로 숙지하지 못하여 생긴 삽질] 프로젝트 버전 개발 도구: .. 2021. 12. 20.
Spring Data JPA - N + 1 문제 ② 해결 방법 안녕하세요, 오늘은 이전에 알아보았던 N + 1 문제의 해결 방법에 대해서 정리하려고 합니다. 이전 글(N + 1 문제에 대한 설명)을 확인하고 싶으시면 아래 글을 참조해주시길 바랍니다. 2021.11.29 - [Spring Data JPA] - Spring Data JPA - N + 1 문제 ① 프로젝트 버전 [①편에서 사용한 프로젝트에 이어서 진행할 예정입니다.] 개발 도구: IntelliJ Ultimate Spring Boot: 2.5.7 Java 11 h2 Database Spring Data JPA 의존성 추가 [build.gradle] JUnit 5 ①편에서 작성한 코드처럼 하나의 쿼리를 위해 부수적인 쿼리가 실행되는 것은 말도 안 되고, 애플리케이션에 불필요한 부하를 일으키게 됩니다. 그래서.. 2021. 12. 2.
Spring Data JPA - N + 1 문제 ① Java/Spring, Kotlin/Spring을 사용하는 백엔드 개발자에게 JPA는 선택이 아닌 필수로 가져가야 할 기술이 되었습니다. JPA는 C언어의 꽃인 포인터처럼 Spring의 꽃이라고 생각합니다. 그래서 JPA를 사용하면서 얻는 장점의 이면에 있는, JPA의 동작 원리를 정확히 알고 넘어가지 않으면 마주칠 수밖에 없는 N + 1 문제에 대해서 정리하려고 합니다. 해결 방법은 다음장에 준비하도록 하겠습니다. 프로젝트 버전 개발 도구: IntelliJ Ultimate Spring Boot: 2.5.7 Java 11 h2 Database Spring Data JPA 의존성 추가 [build.gradle] JUnit 5 예시로 사용될 Entity는 Member, Team 이렇게 둘입니다. Member.. 2021. 11. 29.
Spring Data JPA - Auditing 오늘은 Spring Data JPA에서 제공하는 유용한 기능인 Auditing에 대해서 정리해보려고 합니다. 백엔드 그리고 DB 쪽 개발을 하다 보면 테이블에 공통적으로 들어가는 Column이 있습니다. 등록한 날짜 마지막으로 수정한 날짜 등록한 사람 마지막으로 수정한 사람 그래서 Spring Data JPA에서는 테이블에 들어가야 하는 위와 같은 필수적인 Column을 쉽게 사용할 수 있도록 Auditing이라는 기능을 제공합니다. [순수한 JPA를 사용했을 때의 방법]과 [Spring Data JPA에서 제공하는 방법] 2가지로 나누어서 정리하겠습니다. 프로젝트 버전 개발 도구: IntelliJ Ultimate Spring Boot: 2.5.7 Java 11 h2 Database Spring Data.. 2021. 11. 28.
반응형