[SpringBoot JPA 활용 웹 애플리케이션 개발 : Entity 설계시 주의점]
1. 엔티티에는 가급적 Setter를 사용하지 말자
- Setter가 모두 열려있으면 변경 포인트가 너무 많아서 유지보수가 어렵다.
2. 모든 연관관계는 지연로딩으로 설정
- EAGER(즉시로딩)은 예측이 어렵고 어떤 SQL이 실행될지 추적하기 어렵다.
특히 JPQL을 실행할 때 N + 1문제가 자주 발생한다.
- EAGER의 경우 Join이 걸려있는 table의 데이터를 반드시 함께 가져온다.
- 반드시 함께 가져와야한다면 fetch join 또는 엔티티 그래프 기능을 사용한다.
- 실무에서 모든 연관관계는 LAZY(지연로딩)로 설정해야한다.
- ManyToOne, OneToOne은 기본이 EAGER
- OneToMany는 기본이 LAZY
* 그렇기 때문에 XToOne의 경우 모두 FetchType을 Lazy로 변경해줘야 한다.
3. 컬렉션은 필드에서 초기화 하자
- 컬렉션은 필드에서 초기화하고 컬렉션을 절대 변경하지 않아야 한다.
4. 테이블, 컬럼명 생성 전략
- SpringBoot를 사용한다면 기본적으로 등록된 SpringPhysicalNamingStrategy 작동한다.
CamelCase를 모두 소문자 + 언더스코어로 변경해준다.
