본문 바로가기
반응형

jpa6

Querydsl - 시작하기 Spring Data JPA를 사용하는 기업들이 많아지면서 그와 함께 Querydsl을 사용하는 기업들도 자연스럽게 증가했습니다. 오늘은 Querydsl을 사용하기 위한 프로젝트 환경설정 방법과 잘 적용이 됐는지 동작을 확인해보도록 하겠습니다. 먼저, Querydsl에 대해 소개해드리면, JPA가 사용되기 이전에는 MyBatis를 많이 사용했습니다. 그러나 JPA가 등장하면서 새로운 프로젝트를 시작하는 회사에서는 JPA + Querydsl을 기본으로 가져가는 구조로 자리가 잡혔습니다. 그러나 JPA는 MyBatis 대비 동적 쿼리를 구현하는 데 있어서 한계가 있습니다. 그리하여 Querydsl은 JPA로 구현하기 힘든 동적 쿼리를 보완해주는 기술입니다. 또한 MyBatis의 경우에는 쿼리를 짠 후에는 직.. 2021. 12. 21.
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.
Spring Data JPA - Save Method 동작 방식 Spring Data JPA에서 제공하는 JpaRepository.save(T); [T는 Entity]의 내부 동작 방식에 대해서 정리하려고 합니다. JPA에서의 save 메서드 구현체 코드는 다음과 같습니다. // SimpleJpaRepository.java [JPA 구현체] @Transactional @Override public S save(S entity) { Assert.notNull(entity, "Entity must not be null."); if (entityInformation.isNew(entity)) { // 1 em.persist(entity); // 2 return entity; // 3 } else { // 4 return em.merge(entity); // 5 } } JP.. 2021. 11. 26.
반응형