인프런 김영한 강의 정리

1. 값 타입 컬렉션JPA에서 엔티티가 여러 개의 동일한 값 타입을 컬렉션으로 하나 이상 저장할 때 사용한다. 말이 좀 헷갈리니 바로 코드로 보자.✅값 타입 컬렉션 사용 예시@Entity @Getter @Setter public class Member { @Id @GeneratedValue @Column(name = "MEMBER_ID") private Long id; @Column(name = "USERNAME") private String username; @Embedded private Period workPeriod; @Embedded private Address homeAddress; @ElementCollection @CollectionTable(name = "FAVORITE_FOOD" , j..
1. 값 타입 공유💡임베디드 값 타입의 실제 인스턴스인 값을 공유하면 위험하다. 1-1) 실제 인스턴스인 값을 공유했을 때 ✅ Address(임베디드 값 타입)와 Member(엔티티) 코드@Embeddable @Getter @Setter public class Address { private String city; private String street; private String zipcode; public Address() { } public Address(String city, String street, String zipcode) { this.city = city; this.street = street; this.zipcode = zipcode; } } @Entity @Getter @Setter ..
1. 기본값 타입생명주기를 엔티티에 의존값 타입은 공유되지 않는다. (변경시 다른 값도 변경되면 안된다.)래퍼 클래스나 String같은 클래스는 공유가능한 객체지만 변경안됨.2. 임베디드 값 타입(복합 값 타입)재사용 가능한 값 타입 객체를 정의하여 엔티티의 일부분으로 포함시킨다. 2-1) 임베디드 값 타입 사용법✅임베디드 값 타입 사용 예시위 그림을 차근차근 설명해보자면,✔️ 멤버 엔티티는 이름, 근무 시작일(startDate), 근무 종료일(endDate), 주소 도시(city), 주소 번지(street), 주소 우편번호(zipcode)를 가진다.근무 시작일, 근무 종료일은 기간으로 묶을 수 있다. 주소 도시, 주소 번지, 주소 우편번호는 주소로 묶을 수 있다. ✔️ @Embeddable 애노테이션을..
1. 영속성 전이(CASCADE)특정 엔티티를 영속 상태로 만들 때 연관된 엔티티도 함께 영속상태로 만든다.ex) 부모 엔티티를 저장할 때, 자식 엔티티도 함께 저장. 💡연관관계 매핑과 아무 관련이 없다. 연관된 엔티티를 함께 영속화하는 편리함만 제공할 뿐이다.💡연관된 엔티티가 다른 곳에서도 관리되는 엔티티라면 CASCADE를 쓰면 안된다. ✅코드 예시@Entity@Getter@Setterpublic class Parent { @Id @GeneratedValue private Long id; private String name; @OneToMany(mappedBy = "parent") private List childList = new ArrayList(); ..
즉시 로딩과 지연 로딩을 이해하기 위해 프록시 개념을 먼저 이해해야한다. JPA 기본 | 프록시 (즉시 로딩, 지연 로딩을 이해하기 위한)1. 프록시란?JPA에서 연관된 엔티티를 지연 로딩하기 위해 사용되는 객체다.데이터베이스 접근을 지연시켜 성능을 최적화한다.필요한 시점까지 데이터 로딩을 미뤄서 메모리 사용량을 줄이고 불ururuwave.tistory.com그래서 이전에 포스팅한 프록시를 첨부한다. 1. 지연 로딩, 즉시 로딩 개념- 지연 로딩 : 연관된 엔티티를 실제로 접근할 때까지 데이터베이스 조회를 지연시키는 로딩 전략- 즉시 로딩 : 연관된 엔티티를 함께 조회하여 즉시 데이터베이스에서 로드하는 로딩 전략 2. 지연 로딩(fetch = FetchType.LAZY)Member 엔티티와 Team 엔티..
1. 프록시란?JPA에서 연관된 엔티티를 지연 로딩하기 위해 사용되는 객체다.데이터베이스 접근을 지연시켜 성능을 최적화한다.필요한 시점까지 데이터 로딩을 미뤄서 메모리 사용량을 줄이고 불필요한 쿼리 실행을 방지한다. ⭐지연 로딩JPA에서 실제 엔티티 데이터가 필요할 때까지 데이터베이스에서 해당 데이터를 로드하지 않는 방식.이를 통해 불필요한 데이터베이스 접근을 줄여 성능을 최적화한다. 2. 프록시의 필요성양방향 연관 관계인 두 엔티티가 있다.Member와 Team이라고 하자. ✅Member와 Team 코드@Entity@Getter@Setterpublic class Member{ @Id @GeneratedValue @Column(name = "MEMBER_ID") private Lon..
1. @MappedSuperclass 언제 사용할까?여러 엔티티 클래스에서 공통으로 사용되는 필드를 하나의 상위 클래스에 정의하고 이를 상속받아 사용하고자 할 때. 만약, 엔티티를 모두 만들었는데 공통적인 필드들을 추가해야 한다면하나 하나 엔티티마다 이렇게 중복으로 작성을 해줘야한다.이런 작업을 하지 않도록 도와주는 애노테이션이 바로 @MappedSuperclass다.private String createdBy;private LocalDateTime createdDate;private String lastModifiedBy;private LocalDateTime lastModifiedDate;... 2. 코드 예시 ✔️공통 매핑정보를 갖는 상위 클래스(BaseEntity)와 이를 상속받는 Member 클..
1. 데이터베이스에 상속관계 표현하기 관계형 데이터베이스는 상속 관계 개념이 없다.Java 객체는 상속 관계 개념이 있다.부모 클래스는 독립적으로 인스턴스화 할 필요가 없다면, 추상클래스로 만드는게 일반적이다.관계형 데이터베이스에 상속 관계를 표현하기 위해 JPA는 세 가지 주요 전략을 제공한다. 1-1) 조인전략- ITEM_ID를 외래키로 하위 테이블에 INSERT를 할 때, ITEM과 하위 테이블에 두 번 INSERT를 한다.ITEM에 DTYPE으로 하위 테이블을 구분한다. 1-2) 단일 테이블 전략- 한 테이블에 컬럼을 다 때려박고 DTYPE으로 자식 엔티티를 구분하는 전략이다.- 조인할 필요가 없으므로 조회 성능이 빠르고 조회쿼리가 단순하다. 1-3) 구현 클래스마다 테이블 전략 - 상위테이블(슈..
백엔드 개발자 - 젤리곰
'인프런 김영한 강의 정리' 카테고리의 글 목록 (3 Page)