엔티티 모델링 시 주의할 점

HwangBaco·2023년 5월 18일
0

Setter 사용 지양

협업할 때 데이터 변경 권한이 강한 setter는 안정적인 데이터 관리를 위해 가급적 Entity에는 사용하지 않는 것이 좋습니다.

동일한 맥락에서, 데이터 엑세스 포인트는 최소한으로 하는 것이 협업 시에도 더욱 명확한 코드가 될 것이며(가독성 증가), 디버깅 시에도 원인 분석을 더욱 빠르게 할 수 있습니다.

다만 Dto에는 취향에 따라 편하게 사용해도 됩니다. (김영한 님은 사용하는 편이라고 하셨습니다.)

연관관계는 모두 지연로딩 사용

즉시로딩은 SQL 실행 순서에 대한 예측이 어려워 이슈 추적을 할 때 곤란할 수 있습니다.

이는 연관관계의 주인 쪽인 "다" 쪽에 달리는 어노테이션인 @ManyToOne이나, 1대1 관계를 설정하는 @OneToOne 에서도 LAZY로 설정하는 것이 좋다고 합니다.

컬렉션 필드는 바로 초기화

  1. NPE 방지

  2. 하이버네이트가 엔티티를 영속화 할 때 내부에서 컬렉션이 있으면 하이버네이트가 특별하게 조작한 컬렉션으로 변경합니다.(컬렉션의 데이터가 추가 되었는지 등등을 인식할 수 있어야 하니까요.) 따라서 실제 참조가 변경될 수 있습니다. 그런데 개발자가 임의로 나중에 new ArrayList로 초기화를 하게 되면 이 부분이 하이버네이트가 관리하는 컬렉션에서 개발자가 직접 만든 컬렉션으로 변경될 수 있습니다. 그러면 하이버네이트가 정상 동작하지 않습니다. 이런 문제를 방지하기 위해 필드에서 빠르게 컬렉션을 초기화 하고, 해당 컬렉션을 바꾸는 행위를 막도록 코드를 작성하는 것이 좋습니다.
    참고: 김영한 CTO님의 인프런 답변

profile
알고리즘 풀이 아카이브

0개의 댓글