김영환님의 강의 실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발 보면서 공부한 내용입니다.
🏊♀️ 섹션 2
엔티티 설계시 주의점
📝 가급적 Setter 사용 자제
- Setter가 열려있으면
변경 포인트가 많아서 유지보수가 어렵다
📝 모든 연관관게는 지연로딩으로 설정
- 즉시로딩(EAGER)은 예측이 어렵고, 어떤 SQL이 실행될지 추적하기 어렵다. 특히, JPQL을 실행할 때 N+1문제가 자주 발생한다. (ex: 100개를 조회해야된다면 100개의 쿼리가 실행됨)
- 실무에서 연관관게는 지연로딩(LAZY)로 설정해야 한다
- 연관된 엔티티를 함께 DB에서 조회해야 하면, fetch join 또는 엔티티 그래프 기능을 사용한다
- @~~ToOne(OneToOne, ManyToOne)관계는 기본이 즉시로딩(EAGER)이므로 지연로딩(LAZY)로 설정해야한다
📝 컬렉션은 필드에서 초기화
null
문제에서 안전하기 때문에 컬렉션은 필드에서 바로 초기화하는 것이 안전