DevKim
[Tip] Entity 설계 시 주의할 점 & 참고할 점 본문
1. 실무에서는 가급적 Getter은 열어두고, Setter은 닫아주자
- 실무에선 엔티티를 조회 할 일이 너무 많으므로, Getter의 경우엔 열어두는 것이 좋다.
단, Setter를 막 열어두면 나중에는 엔티티가 도대체 어디서 왜 변경되는지 추적하기가 힘들어진다.
그래서 엔티티를 변경할 때는 Setter 대신에 변경 지점이 명확하도록
변경을 위한 비즈니스 메서드를 별도로 제공해야한다. (유지 보수성이 올라감)
2. 실무에서 @ManyToMany는 '절대' 사용하지 말자.
- 편리한 것 같지만, 중간 테이블에 컬럼을 추가할 수 없고, 세밀하게 쿼리를 실행하기 어렵기 때문에 실무에서 사용하기에는 한계가 있다. 일대다,다대일 매핑으로 풀어내서 사용하자
3. FK가 있는 곳을 연관관계의 주인으로 정해라
4. 테이블은 타입이 없으므로 구분이 어렵다. 관례상 '테이블명_id"를 많이 사용한다.
- 실무에선 회사의 규칙을 따른다.중요한 것은 일관성이다!
5. 실무에서 FK는 꼭 걸어줘야하나요?
- 시스템마다 다른데, 실시간 트래픽이 엄청 중요하고, 정확성보다는 유연성이 중요하면 FK는 빼고 index만 잘 잡아주면된다. 그런데 이게 돈 관련된 거나 data가 항상 맞아야하는 시스템에서는 FK를 거는 것에 대해 생각 할 필요가 있다!
6. 값 타입은 변경 불가능하게 설계해야한다.
- 생성할 때만 딱 값이 세팅되는게 best!!
- @Setter을 제거하고, 생성자에서 값을 모두 초기화해서 변경 불가능한 클래스를 만들자.
- JPA 스펙상 엔티티나 임베디드 타입은 자바 기본 생성자를 protected로 설정하는게 안전하다.
-> JPA가 이런 제약을 두는 이유는, JPA 구현 라이브러리가 객체 생성시, 리플랙션 같은 기술을 사용할 수 있도록 지원해야하기 때문
7. 모든 연관관계는 지연로딩으로 설정하기
- 즉시로딩은 예측이 어렵고, 특히 JPQL을 실행할 때 N+1문제가 자주 발생한다.
*@_ToOne관계는 디폴트값이 즉시로딩이므로 모두 지연로딩으로 설정해야함
8. 컬렉션은 필드에서 초기화하자.
- 컬렉션 필드는 필드에서 바로 초기화 하는 것이 안전하다!!
->null문제에서 안전, 하이버네이트에서 엔티티 영속화 할 때,
변경시 문제발생할 수 있는 경우에 대해 안전
9. 엔티티는 최대한 순수하게 유지하자.
-엔티티는 핵심 비즈니스 로직만 가지고 있고, 화면을 위한 로직은 없어야한다.
->최대한 다른 곳에 dependency가 없도록하여 유지 보수성을 높이자
'Spring Boot' 카테고리의 다른 글
Controller의 전달인자 차이점 (0) | 2021.07.05 |
---|---|
[에러해결] 갑자기 lombok 인식 안 될 때 (0) | 2021.07.05 |
[에러 해결] Test code -No runnable method 오류 해결법 (0) | 2021.05.13 |
간단한 테스트 코드 작성, Live template으로 자주 쓰는 것들 출력 키워드 만들기 (0) | 2021.05.09 |
[01] AOP (0) | 2021.05.06 |