본문 바로가기

분류 전체보기151

[JPA] 다양한 연관관계 매핑 [김영한님의 자바 ORM 표준 JPA 프로그래밍을 학습 후 정리한 내용입니다.] 순서 다대일 [N:1] 일대다 [1:N] 일대일 [1:1] 다대다 [N:M] 1. 다대일 [N:1] 객체 양방향 관계에서 연관 관계의 주인은 항상 다(N)쪽이다. 예를 들어, 회원(N)과 팀(1)이 있다고 할 떄, 회원 쪽이 연관 관계의 주인이 된다. [다대일 단방향 매핑] - 가장 많이 사용하는 연관 관계 [다대일 양방향 매핑] 양방향은 외래 키가 있는 쪽이 연관 관계의 주인이다. 일대다와 다대일 연관 관계는 항상 다(N)에 외래키가 있다. 여기서는 다(N)인 MEMBER 테이블이 외래키를 갖고 있으므로, Member.team이 연관 관계의 주인이다. 양방향 연관 관계는 항상 서로를 참조해야 한다. 따라서, 편의를 위해 연.. 2023. 4. 24.
[JPA] 연관관계 매핑 기초 [김영한님의 자바 ORM 표준 JPA 프로그래밍을 학습 후 정리한 내용입니다.] 순서 연관 관계가 필요한 이유 단방향 연관 관계 양방향 연관 관계와 연관 관계의 주인 양방향 매핑 시 많이 하는 실수 ★★ 1. 연관 관계가 필요한 이유 “객체 지향 설계의 목표는 자율적인 객체들의 협력 공동체를 만드는 것이다.” by 객체지향의 사실과 오해 [객체를 테이블에 맞추어 모델링] 객체를 테이블에 맞추어 데이터를 중심으로 모델링을 하게 되면, 위 사진과 같이 member에서 team을 set하는 과정에서 team의 id값만을 가지게 되므로, team 자체에 대한 관계를 매핑할 수 없게 된다. 따라서 이 방법으로는 객체 간의 협력 관계를 만들 수 없다. 2. 단방향 연관 관계 따라서 위의 예제에서 team.getId.. 2023. 4. 24.
[JPA] 엔티티 매핑 [김영한님의 자바 ORM 표준 JPA 프로그래밍을 학습 후 정리한 내용입니다.] 순서 객체와 테이블 매핑 필드와 컬럼 매핑 기본 키 매핑 1. 객체와 테이블 매핑 @Entity @Entity가 붙은 클래스는 JPA가 관리, 엔티티라 한다. JPA를 사용해서 테이블과 매핑할 클래스는 @Entity를 붙여야 한다. 기본 생성자는 필수다. 저장할 필드에 final을 사용하면 안된다. @Table 엔티티와 매핑할 테이블을 지정한다. 생략하면 매핑한 엔티티 이름을 테이블 이름으로 사용한다. 2. 필드와 컬럼 매핑 @Column 옵션 설명 name 필드와 매핑할 테이블의 컬럼 이름 insertable, updatable 등록, 변경 가능 여부 nullable null값 허용 여부 unique @Table의 uniq.. 2023. 4. 24.
[JPA] OSIV 성능 최적화 정리 [김영한님의 실전! 스프링 부트와 JPA 활용2 강의 학습 후 정리한 내용입니다.] OSIV란? OSIV(Open Session In View)는 영속성 컨텍스트를 뷰까지 열어두는 기능이다. JPA에서는 OEIV(Open EntityManager In View), Hibernate에서는 OSIV(Open Session In View)라고 하는데, 관례상 둘 다 OSIV라고 부른다. 개발자는 OSIV를 임의로 켜거나 끌 수 있기 때문에 서비스 특성에 맞게 OSIV 전략을 활용할 필요가 있다. 아래에서 자세히 알아보자. OSIV on spring.jpa.open-in-view : true (기본값) 영속성 컨테이너를 뷰까지 열어두게 되면 트랜잭션이 끝나는 컨트롤러 계층에서도 지연 로딩(Lazy Loading.. 2023. 4. 18.
[JPA] 컬렉션 조회 최적화 [김영한님의 실전! 스프링 부트와 JPA 활용2 강의 학습 후 정리한 내용입니다.] 서론 OneToMany관계에서 엔티티를 조회하는 방법을 통해 성능 최적화를 해보자. 여기에서는 Order에서 Member, Delivery에 추가로 OrderItems을 조회하는 API를 예시로 든다. 참고로, Order와 OrderItems가 OneToMany관계이다. 순서 주문 조회 V2 (엔티티를 DTO로 변환) 주문 조회 V3 (엔티티를 DTO로 변환 - 페치 조인 최적화) 주문 조회 V3.1 (엔티티를 DTO로 변환 - 페이징과 한계 돌파) 1. 주문 조회 V2(엔티티를 DTO로 변환) 엔티티를 DTO로 변환하는 일반적인 방법이다. @GetMapping("/api/v2/orders") public List ord.. 2023. 4. 17.
[JPA] 지연 로딩과 조회 성능 최적화 [김영한님의 실전! 스프링 부트와 JPA 활용2 강의 학습 후 정리한 내용입니다.] 서론 xToOne(ManyToOne, OneToOne)관계에서 성능 최적화를 해보자. 여기에서는 Orders를 조회하는 API를 예시로 든다. 참고로, Order와 Member가 ManyToOne관계이며, Delivery와는 OneToOne관계이다. 순서 주문 조회 V2 (엔티티를 DTO로 변환) 주문 조회 V3 (엔티티를 DTO로 변환 - Fetch join 최적화) 주문 조회 V4 (JPA에서 DTO로 바로 조회) 1. 주문조회 V2(엔티티를 DTO로 변환) 엔티티를 DTO로 변환하는 일반적인 방법이다. @GetMapping("/api/v2/simple-orders") public List ordersV2(){ Lis.. 2023. 4. 16.