[인프런 김영한] JPA - Entity 설계시 주의점

2021. 3. 1. 20:24프로그래밍 언어/Spring Framework

[인프런 김영한] JPA - Entity 설계시 주의점


해당 글은 인프런 김영한강사님의 영상을 보고 정리한 글입니다.

김영한 인프런 : www.inflearn.com/users/@yh

 

인프런 - 김영한의 강의들을 만나보세요.

우아한형제들 개발 팀장 (전: 카카오, SK플래닛) 저서: 자바 ORM 표준 JPA 프로그래밍

www.inflearn.com


▣ Entity 설계시 주의점

1. Entity에는 가급적 Setter를 사용하지 말자!

 - 변경 포인트가 너무 많아서 유지보수가 힘들다. 

 

2. 모든 연관관계는 지연로딩으로 설계

 - EAGER은 예측이 어렵고, 어떤 SQL이 실행될지 추적하기 힘들다. 그리고 JPQL을 실행할 때 N+1 문제가 자주 발생.

 - 실무에서는 모든 연관관계는 LAZY로 설정하기

 - 연관된 Entity를 함께 DB에서 조회해야 하면, FETCH JOIN 또는 Entity 그래크 기능을 사용

 - @*ToOne(OneToOne, ManyToOne)은 LAZY로 변경

 

 

3. 컬렉션(List, Set 등등)을 필드에서 초기화 하자

 - 컬렉션은 필드에서 바로 초기화 하는것이 null문제에서 안전하다.

 - 하이버네이트는 Entity를 영속화 할 때, 컬렉션을 감싸서 하이버네이트가 제공하는 내장 컬렉션으로 변경한다.

 

4. 테이블, 컬럼명 생성 전략

 - 스프링 부트에서 하이버네이트 기본 매핑 전략을 변경해서 실제 테이블 필드명이 다르다.

 ( orderDate(객체) -> order_date(DB 컬럼) )