[Spring/Springboot] 도메인/양방향매핑/N+1 문제
2024. 12. 15. 23:07ㆍCS/Spring
Domain
- Domain 객체는 애플리케이션의 핵심 비즈니스 로직과 관련된 데이터를 포함하는 객체로, 데이터베이스 테이블과 매핑되는 클래스
- 역할: 데이터베이스 테이블과 1:1로 매핑 되는 객체로, 애플리케이션의 핵심 데이터를 담음
- 이 객체는 비즈니스 로직을 포함할 수도 있음
- 역할: 데이터베이스 테이블과 1:1로 매핑 되는 객체로, 애플리케이션의 핵심 데이터를 담음
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private String email;
// getters and setters
}
양방향 매핑
- 양방향 매핑은 연관 관계 주인이 아닌 엔티티에게도 연관 관계를 주입하는 것
- [장점]
- 객체 그래프 탐색으로 인한 이점
- 필수적인 기능인 cascade의 설정이 가능
N + 1 문제
- 조회 시 1개의 쿼리를 생각하고 설계를 했으나 나오지 않아도 되는 조회의 쿼리가 N개가 더 발생하는 문제
- 프록시와 즉시로딩 주의
- 가급적 지연 로딩만 사용(특히 실무에서)
- 즉시 로딩을 적용하면 예상하지 못한 SQL이 발생
- 즉시 로딩은 JPQL에서 N+1 문제를 일으킨다.
- @ManyToOne, @OneToOne은 기본이 즉시 로딩이기 때문에 → 따로 LAZY로 설정해줄 것
- @OneToMany, @ManyToMany는 기본이 지연 로딩
'CS > Spring' 카테고리의 다른 글
[Spring/Springboot] JPA 다양한 쿼리 방법 - JPQL/QueryDSL (0) | 2024.12.15 |
---|---|
[Spring/Springboot] 영속성(Persistence) - 1차 캐시/변경 감지(Dirty Checking)/지연 로딩(Lazy Loading) (0) | 2024.12.15 |
[Spring/Springboot] 서블릿(Servlet) (0) | 2024.12.15 |
[Spring/Springboot] AOP 관점 지향 프로그래밍 (0) | 2024.12.15 |
[Spring/Springboot] API, 프레임워크, 라이브러리의 차이 (0) | 2024.12.15 |