솜이의 데브로그

[Spring Boot] 엔티티 설계 시 주의점 본문

dev/Spring Boot

[Spring Boot] 엔티티 설계 시 주의점

somsoming 2021. 10. 9. 02:24
  • 엔티티에는 가급적이면 Setter를 사용하지 말자.
    • Setter가 모두 열려있으면 변경포인트가 너무 많아 유지보수가 어려워진다.
  • 모든 연간관계는 지연로딩으로 설정.
    • 즉시로딩(EAGER)은 예측이 어렵고, 어떤 SQL이 실행될지 추적하기 어렵다. 특히 JPQL을 실행할 때 N+1 문제가 자주 발생.
    • 실무에서 모든 연간관계는 지연 로딩(LAZY)로 설정해야한다.
    • 연관된 엔티티를 함께 DB에서 조회해야 하면 fetch join 또는 엔티티 그래프 기능을 사용한다. (조회할 때 필요한것만 끌어오기)
    • @XToOne(OneToOne, ManyToOne) 관계는 기본이 즉시로딩이므로 직접 지연로딩으로 설정해야 한다.
      • OneToMany는 지연로딩임
  • 컬렉션은 필드에서 바로 초기화하자.
    • 하이버네이트가 엔티티를 persist 할 때, 컬렉션을 감싸서 하이버네이트가 제공하는 내장 컬렉션으로 변경한다.
    • 컬렉션을 한번 생성하면 그 뒤로는 변경하지 않는 것이 좋다.