JPA 5

[MapStruct] @MappingTarget: 기존 객체 수정 매핑

📚 MapStruct 시리즈기본 사용법Default 메서드 활용한 커스텀 매핑 전략@MappingTarget: 기존 객체 수정 매핑 목적기존 객체(Entity)에 DTO 값을 덮어쓰기(업데이트) 하고 싶을 때 사용기본 개념MapStruct는 기본적으로 새로운 객체를 생성해서 리턴@MappingTarget은 이미 존재하는 객체에 필드를 덮어씌우는 데 사용JPA와 함께 쓰면 변경 감지(dirty checking) 활용 가능즉, save() 없이도 DB에 반영 가능WHEN? 영속 상태인 Entity를 DTO로 업데이트할 때JPA의 변경 감지(Dirty Checking) 기능을 활용하고 싶을 때새 객체를 만드는 대신 기존 객체를 수정하고자 할 때 사용 예시1. 매퍼 인터페이스@Mapper(componentM..

Spring Transaction

1. 트랜잭션(Transaction)DB 상태를 변화시키는 작업의 논리적 단위반드시 모두 성공하거나 모두 실패해야 함데이터 무결성(일관성) 보장과 예외 상황 대비트랜잭션 속성: ACID트랜잭션이 신뢰성과 무결성을 갖추기 위한 핵심 원칙속성의미 목적실무 포인트AAtomicity (원자성)모두 성공 또는 모두 실패(All or Nothing)작업 단위 보호CConsistency (일관성)트랜잭션 전후 데이터 일관성(무결성) 유지데이터 오염 방지IIsolation (격리성)동시에 실행되는 트랜잭션 독립성 유지동시성 이슈 방지DDurability (지속성)성공된 작업은 영구 보존장애 발생 시 복구 보장Isolation (격리성)각 트랜잭션이 서로 영향을 받지 않도록 분리격리 수준(Isolation Level)수..

N+1 문제의 발생 원인과 해결 방안

N+1 문제는 ORM 환경에서 발생하는 대표적인 문제로, 한 번의 쿼리로 N개의 엔티티를 조회한 후 각 엔티티에 연관된 데이터를 조회하면서 총 N+1번의 쿼리가 실행되는 문제이다.발생 원인JPA의 연관 관계 기본 Fetch 전략이 ‘Lazy’인 경우, 연관된 엔티티를 실제로 접근할 때마다 쿼리가 실행된다. 특히 컬렉션(List)의 Lazy 로딩은 초기 조회 시 쿼리가 실행되지 않다가 각 엔티티의 컬렉션에 접근할 때마다 개별 쿼리가 발생하여 N+1문제가 발생하므로 조심해야 한다.List members = memberRepository.findAll(); // 1번 쿼리 발생for (Member m : members) { System.out.println(m.getOrders()); // N번 쿼리 발..

[JPA] 어노테이션 정리

1. 주요 어노테이션@Entity클래스 -> 테이블 매핑해당 클래스가 JPA에서 관리되는 엔티티임을 명시DB 테이블과 매핑@Entitypublic class User { @Id private Long id;}@Table테이블명 지정엔티티가 매핑될 테이블명, 스키마, 인덱스 등 추가 정보를 지정생략하면 엔티티명(클래스명)이 테이블명으로 자동 매핑테이블 이름이 예약어이거나 복수형 처리할 때 자주 사용@Entity@Table(name = "users")public class User { ...}@Column필드 -> 컬럼 매핑필드와 DB 컬럼 매핑nullable, length, unique 등을 명시하면 DDL 관리에 도움 -> 명시하는 습관 권장@Column(name = "user_name"..

JPA & Spring Data JPA

1. 스프링 데이터 액세스 기술SQL 중심 기술MyBatis, Spring JDBC스키마 변경 시 SQL 전수 수정객체 중심 기술(ORM)객체(Object)와 DB 테이블 매핑을 통해 엔티티 클래스 객체 안에 포함된 정보를 테이블에 저장하는 기술종류: JPA, Spring Data JPA특징객체(Entity) 단위 → 객체와 테이블 간 자동 매핑SQL을 직접 작성하지 않아도 대부분의 CRUD 작업 가능영속성 컨텍스트를 통해 객체 상태 관리객체 상태 변화에 따라 DB 반영 → DDD(도메인 주도 설계)에 적합DB 종속성 감소연관관계 매핑, Fetch 전략 등 다양한 기능 제공대표 기술JPA: Java ORM 표준 명세서 → 구현체(Hibernate) 필요Spring Data JPQ2. JPA(Java Pe..

728x90