본문 바로가기
728x90
반응형

인프런 강의/실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발13

[JPA] 패치조인 패치조인 패치조인 패치 조인은 JPA에서 제공하는 특별한 조인 유형으로, 연관된 엔티티를 함께 로딩하도록 지시합니다. 즉, 연관된 엔티티를 한 번에 로딩하여 N+1 쿼리 문제를 피할 수 있습니다. 패치 조인은 JPQL(Querydsl 등을 통해 사용)에서 명시적으로 지정됩니다. 패치 조인을 사용하면 연관된 엔티티를 추가적인 쿼리 없이 로딩할 수 있으므로, 성능상의 이점이 있습니다. N+1이란 N+1은 데이터베이스 쿼리의 성능 이슈 중 하나를 나타내는 용어입니다. 이 문제는 일반적으로 ORM(Object-Relational Mapping) 프레임워크를 사용할 때 발생하며, 특히 JPA와 같은 프레임워크에서 자주 언급됩니다. N+1 문제는 다음과 같은 상황에서 발생합니다: 1번의 쿼리로 N개의 엔티티를 가져.. 2024. 2. 10.
[JPA] 프록시와 지연로딩 프록시와 지연로딩 프록시 프록시는 실제 엔티티의 대리자로 동작하며, 필요한 경우에만 초기화되어 데이터베이스 쿼리를 최소화합니다. 프록시를 사용함으로써 성능을 향상시키고 불필요한 데이터베이스 조회를 방지할 수 있습니다. 지연로딩 @ManyToOne(fetch = FetchType.LAZY) @OneToOne(fetch = FetchType.LAZY) JPA에서는 ManyToOne과 OneToOne은 기본 설정 값이 즉시 로딩으로 되어 있어 변경해주어야 한다 실무에서는 전부 LAZY 사용!! 프록시는 객체의 초기화를 지연시킴으로써 필요한 경우에만 데이터를 로딩합니다. 특히 연관된 객체가 많거나 대량의 데이터를 다루는 경우, 미리 모든 데이터를 가져오지 않고 필요한 순간에만 데이터를 가져오는 것은 성능상 이점.. 2024. 2. 2.
[JPA] 테이블 전략 설명 조인 전략 (Joined Strategy) 설명: 각 클래스마다 테이블을 따로 생성하고, 자식 클래스의 테이블은 부모 클래스의 테이블과 조인으로 연결됩니다. 상황: 학교에는 학생과 선생님들이 있습니다. 각 학생과 선생님은 서로 다른 테이블에 저장되어야 합니다. 사용 이유: 학생과 선생님은 각각 고유한 속성을 가지며, 데이터를 정규화하여 관리하고 싶습니다. 구현 방법: @Entity @Inheritance(strategy = InheritanceType.JOINED) public class Person { // 공통 속성 } @Entity public class Student extends Person { // 학생 특화 속성 } @Entity public class Teacher extends Perso.. 2024. 2. 1.
[JPA] 필드와 컬럼 및 기본 키 매핑 어노테이션 필드와 컬럼 매핑 어노테이션 정리 @Column 컬럼 매핑 @Temporal 날짜 타입 매핑 LocalDate, LocalDateTime을 사용할 때는 생략 가능(최신 하이버네이트 지원) @Enumerated enum 타입 매핑 ORDINAL 사용은 Enum 값의 추가, 삭제, 순서 변경에 취약하며, 가독성과 유지보수성이 낮아 추천되지 않습니다. 대신, EnumType.STRING을 사용 !! @Lob BLOB, CLOB 매핑 데이터베이스 BLOB, CLOB 타입과 매핑 • @Lob에는 지정할 수 있는 속성이 없다. • 매핑하는 필드 타입이 문자면 CLOB 매핑, 나머지는 BLOB 매핑 • CLOB: String, char[], java.sql.CLOB • BLOB: byte[], java.sql. BL.. 2024. 1. 29.
[JPA]영속성 컨텍스트 영속성 컨텍스트 *영속성 컨텍스트란 더보기 엔티티를 영구 저장하는 환경을 의미 *영속성 컨텍스트 주요 기능 더보기 객체 추적 (Object Tracking): 영속성 컨텍스트는 어떤 객체가 변경되었는지 추적합니다. 이러한 변경 내용은 데이터베이스에 동기화되기 전까지 메모리에 유지됩니다. 지연 로딩 (Lazy Loading): 영속성 컨텍스트는 필요한 순간까지 연관된 객체를 로딩하지 않고, 실제로 사용될 때 로딩합니다. 이를 통해 성능을 최적화할 수 있습니다. 동일성 (Identity): 영속성 컨텍스트는 객체의 동일성을 유지합니다. 즉, 같은 엔터티를 나타내는 두 객체가 메모리 상에서는 동일한 객체로 취급됩니다. 트랜잭션 관리: 영속성 컨텍스트는 트랜잭션 범위 내에서 데이터베이스와의 작업을 관리합니다. .. 2024. 1. 29.
일대일(OneToOne) 관계 일대일(OneToOne) 관계 @Entity public class Shop { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; @OneToOne(mappedBy = "shop") private Manager manager; // Getter, Setter, Constructors, etc. } @Entity public class Manager { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; @OneToOne @JoinColumn(name = "shop_id") .. 2024. 1. 19.
다대다(ManyToMany) 관계 다대다(ManyToMany) 관계 @Entity public class Shop { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; @ManyToMany @JoinTable( name = "shop_brand", joinColumns = @JoinColumn(name = "shop_id"), inverseJoinColumns = @JoinColumn(name = "brand_id") ) private List brands; // Getter, Setter, Constructors, etc. } @Entity public class Brand { @Id @GeneratedValue(str.. 2024. 1. 19.
일대다(OneToMany)와 다대일(ManyToOne)관계 일대다(OneToMany)와 다대일(ManyToOne)관계 @Entity public class Shop { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; @OneToMany(mappedBy = "shop") private List products; // Getter, Setter, Constructors, etc. } @Entity public class Product { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String productName; @ManyToOne @JoinCo.. 2024. 1. 19.
JPA주요 관계 매핑 타입 JPA주요 관계 매핑 타입 JPA주요 관계 매핑 타입 일대다(OneToMany): 한 엔터티가 여러 개의 다른 엔터티와 매핑되는 관계입니다. 예를 들어, 하나의 작성자(글쓴이)가 여러 개의 게시물을 작성할 수 있는 경우입니다. 다대일(ManyToOne): 여러 엔터티가 한 개의 엔터티와 매핑되는 관계입니다. 일대다 관계의 반대입니다. 예를 들어, 여러 게시물이 하나의 작성자(글쓴이)에게 속할 수 있는 경우입니다. 일대다(OneToMany)와 다대일(ManyToOne)관계 일대다(OneToMany)와 다대일(ManyToOne)관계 @Entity public class Shop { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id.. 2024. 1. 19.
728x90
반응형