Back-End/JPA (16) 썸네일형 리스트형 @Fetch(EAGER)와 fetch join 차이와 LAZY 로딩의 작동 방식 1. 즉시 로딩의 두 종료우선 즉시 로딩이란?A 엔티티를 로딩할 때, A와 연결된 연관 엔티티 B도 함께 가져오는 것을 의미한다. 즉시 로딩을 구현하는 방법은 JPA에서 2가지로 구분할 수 있다.방법설명예시제어 가능성EAGER어노테이션으로 고정된 즉시 로딩@ManyToOne(fetch = EAGER)매우 제한적fetch joinJPQL 쿼리로 지정된 즉시 로딩JOIN FETCH동적으로 선택 가능 2. EAGER는 고정, fetch join은 선택 가능EAGER는 선언한 시점부터 항상 즉시 로딩된다.즉 우리가 어떤 쿼리를 쓰든 상관없이 해당 연관 엔티티는 무조건 같이 가져오게 된다.@ManyToOne(fetch = FetchType.EAGER)private User user;위처럼 설정해두면 comment.. 트러블 슈팅 : 게시글 조회 시 조회수가 증가하지 않는 문제 문제 상황게시글 조회 시 조회수가 증가하지 않는 문제가 발생했다.JPA의 변경 감지(Dirty Checking)를 사용하여 viewCount를 증가시키도록 구현했으나 viewCount가 1에서 더 이상 증가하지 않았다.▶ 문제가 발생한 코드public PostWithViewCountResponse getPost(Long postId) { Post post = postRepository.findById(postId) .orElseThrow(() -> new IllegalArgumentException("해당 게시글이 없습니다.")); post.increaseViewCount(); // viewCount++ return PostWithViewCountResponse.of.. Spring Data JPA : Auditing 애플리케이션에서 데이터를 관리하다 보면, 누가, 언제 데이터를 생성하고 수정했는지를 추적하는 기능이 필요할 때가 많다.Spring Data JPA는 이를 간편하게 처리할 수 있도록 Auditing 기능을 제공한다.1. Auditing이란?Auditing은 엔티티에 대해 데이터 변경 이력을 기록하는 기능이다. Spring Data JPA는 이를 자동화하여 개발자가 별도의 로직을 작성하지 않고도 엔티티의 생성일자, 수정일자, 생성자, 수정자 등을 관리할 수 있도록 도와준다.2. Auditing 설정활성화 설정 @EnableJpaAuditing@SpringBootApplicationpublic classApplication { public static void main(String[] args) { .. Spring Data JPA : 벌크성 수정 쿼리와 엔티티 그래프 대규모 데이터를 다루는 애플리케이션에서는 성능 최적화가 중요한 과제이다. JPA는 이를 벌크성 수정/삭제 쿼리와 엔티티 그래프라는 기능을 제공한다. 이번 글에서는 두 가지 개념을 설명하고 활용하는 방법을 살펴보겠다.1. 벌크성 수정/삭제 쿼리1.1 벌크 연산이란?벌크 연산은 여러 엔티티를 한 번에 수정하거나 삭제하는 작업으로, JPA에서 제공하는 JPQL을 사용해 실행한다. 이는 성능 최적화를 위해 데이터베이스에 직접 업데이트/삭제 쿼리를 전달하며, 영속성 컨텍스트에 있는 데이터를 무시한다.1.2 벌크성 수정 쿼리 예제JPA로 벌크 수정public int bulkAgePlus(int age) { int resultCount = em.createQuery( "update Member m " + .. Spring Data Jpa : 페이징과 정렬 Spring Data JPA는 페이징과 정렬 기능을 간단하게 구현할 수 있는 강력한 기능을 제공한다. 이 글에서는 페이징과 정렬을 사용하여 데이터를 효율적으로 조회하는 방법과 실무에서 유용한 팁을 살펴보겠다.1. 페이징과 정렬을 위한 메서드 작성Spring Data JPA에서는 리포지토리의 인터페이스에서 페이징과 정렬을 간단히 정의할 수 있다.페이징과 정렬 사용 예제Page findByUsername(String name, Pageable pageable); // count 쿼리 사용Slice findByUsername(String name, Pageable pageable); // count 쿼리 사용 안함List findByUsername(String name, Pageable pageable); /.. Spring DataJpa : 쿼리 메서드 기능 스프링 데이터 JPA는 메서드 이름을 분석해 JPQL 쿼리를 자동 생성 및 실행하는 강력한 기능을 제공. 이를 통해 복잡한 JPQL 작성 없이 간단하게 데이터를 조회할 수 있으며, 밀요에 따라 정적 쿼리도 직접 정의할 수 있다.1. 순수 JPA에서의 쿼리 메서드 작성순수 JPA를 사용하면 JPQL 쿼리를 직접 작성해야 한다. 예를 들어, 이름과 나이를 기준으로 데이터를 조회하는 코드는 아래와 같이 작성.순수 JPA 리포지토리public List findByUsernameAndAgeGreaterThan(String username, int age) { return em.createQuery("select m from Member m where m.username = :username and m.age > .. 프록시와 연관관계 관리(JPA) 프록시란 무엇인가?프록시는 실제 엔티티 대신 가짜 객체를 반환해서 필요한 시점에 데이터를 조회하는 개념이다.em.find() : 데이터베이스에서 실제 엔티티를 즉시 조회한다.em.getRegerence() : 데이터베이스에 바로 접근하지 않고 프록시 객체(가짜 객체)를 반환한다.// em.find() 예제Member member = em.find(Member.class, 1L);System.out.println(member.getName()); // 데이터베이스에서 즉시 조회// em.getReference() 예제Member proxyMember = em.getReference(Member.class, 1L);System.out.println(proxyMember.getName()); // 이 시점에 .. 상속관계 매핑(JPA) 관계형 데이터베이스는 객체의 상속 개념이 없다. 대신 슈퍼타입 - 서브타입 모델링 기법을 사용한다. JPA에서는 이를 상속관계 매핑을 통해 지원함.1. 슈퍼타입 - 서브타입 논리 모델을 물리 모델로 변환하는 방법조인 전략 (일단 조인 전략을 기본으로 선택!)여러 테이블로 나누어 저장하고 JOIN을 통해 데이터를 조회하는 전략입니다.장점테이블이 정규화되어 데이터 중복이 없다.외래 키 참조 무결성 제약조건 활용 가능저장공간 효율화단점조회시 JOIN 연산이 많이 사용, 성능 저하조회 쿼리가 복잡함데이터 저장시 INSERT SQL 2번 호출하지만, 큰 성능 문제는 아님.예시 코드(조인 전략)import jakarta.persistence.*;@Entity@Inheritance(strategy = Inherita.. 이전 1 2 다음