Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- 정렬 알고리즘(sort algorithm)
- 코딩
- 코딩공부
- 배열
- Til
- 코딩문제
- 99클럽
- 면접(java
- 코딩테스트 준비
- Java
- 회고
- 자료구조
- 항해99
- 프로그래머스
- GIT
- wil
- 자바
- CS
- Grafana
- 메서드
- cs 공부)준비
- 이진 탐색(binary search)
- ArrayList
- 개발자 취업
- github
- Entity
- css
- HTML
- aop
- Spring
Archives
- Today
- Total
hayu's 개발 일지
[TIL]240430 즉시로딩 & 지연로딩 본문
즉시로딩 & 지연로딩
- 즉시로딩과 지연로딩은 데이터베이스에서 데이터를 조회하는 방식 중에 하나로, 객체 간의 연관관계를 어떻게 로딩하고 관리할 것인지에 대한 개념이다.
Fetch Type
- Fetch Type은 JPA가 하나의 엔티티를 조회할 때 연관관계에 있는 객체들을 어떻게 가져올 것인지를 나타내는 설정값이다.
즉시 로딩(Eager Loading)
- 엔티티를 조회할 때 자신과 연관되는 엔티티를 조인(join)을 통해 함께 조회하는 방식이다.
→ 해당 엔디디와 연관된 모든 엔티티를 동시에 조회하는 방식
예) A엔티티와 B엔티티가 연관되어 있을 때 A를 조회하면 B도 함께 조회된다. 이로 인해 객체 간의 관계를 필요한 시점에 바로 사용할 수 있다. 하지만 조인 등의 복잡한 쿼리가 생성될 수 있고, 불필요한 데이터 로딩으로 인해 성능 문제가 발생할 수 있다.
지연 로딩(Lazy Loading)
- 자신과 연관된 엔티티를 실제로 사용할 때 연관된 엔티티를 조회(SELECT)하는 방식이다.
예) A엔티티를 조회해도 B엔티티는 초기에 조회되지 않고, B엔티티를 실제로 사용할 때 데이터 베이스에서 조회된다. 이를 통해 쿼리의 죄적화와 성능 향상을 이룰 수 있다. 하지만 연관 엔티티를 사용하는 과정에서 데이터 베이스 쿼리가 추가적으로 발생할 수 있다.
- 대부분의 JPA 구현체에서 지원되는 기능이며, 엔티티 클래스의 연관 관계 필드에 @ManyToOne, @OneToMany, @OneToOne, @ManyToMany와 같은 어노테이션을 사용할 때 fetch 속성을 지정하여 조절할 수 있다.
- 지연로딩을 사용하려면 데이터 베이스 트랜잭션 내에서 연관된 엔티티에 접근해야만 데이터 베이스 조회가 일어난다.
즉시 로딩을 선택하는 이유
- 객체 간의 관계를 활용하기 편리하다.
- 즉시 로딩을 사용하면 객체를 조회할 때 연관된 모든 객체가 한번에 로딩되므고 객체 간의 관계를 편리하게 활용할 수 있다. 모든 연관된 데이터가 이미 로딩되어 있으므로 어떤 객체를 사용할 때 별다른 데이터 베이스 조회 없이 객체 그래프를 따라 이동할 수 있다.
- 복잡한 조회를 단순화할 수 있다.
- 데이터 베이스에서 조인을 사용하여 복잡한 연관관계를 해결할 필요 없이 즉시 로딩으로 모든 데이터를 한번에 가져올 수 있다.
지연로딩을 선택하는 이유
성능 최적화
- 즉시 로딩은 모든 연관된 데이터를 한번에 가져오기 때문에, 필요하지 않은 데이터까지 불필요하게 로딩될 수 있다. 이는 성능 저하를 야기할 수 있다. 지연 로딩은 필요한 시점에만 데이터를 로딩하기 때문에 성능을 최적화 할 수 있다.
데이터 접근 최적화
- 사용자가 실제로 해당 데이터를 사용할 때만 로딩하므로 데이터 베이스 접근이 최적화된다. 따라서 시스템 전체적으로 데이터 로딩에 대한 부하가 분산될 수 있다.
순환 참조 방지
- 지연 로딩을 사용하면 객체 간의 연관관계에서 순환 참조가 발생할 확률이 줄어든다. 객체를 조회할 때 실제로 필요한 데이터만 로딩되기 때문에 무한한 순환 참조를 방지할 수 있다.
메모리 사용 최적화
- 즉시 로딩은 연관된 모든 데이터를 로딩하기 때문에 메모리를 많이 사용할 수 있다. 지연 로딩은 필요한 데이터만 로딩하기 때문에 메모리 사용을 최적화할 수 있다.
'프레임워크 > spring' 카테고리의 다른 글
[TIL]240504 로그 파일 나누기 (0) | 2024.05.04 |
---|---|
[TIL]240501 DTO (0) | 2024.05.01 |
[TIL]240429 AOP (0) | 2024.04.29 |
[TIL]240425 Grafana 그라파나 공유 대시보드 사용하기 (0) | 2024.04.25 |
[TIL]240423 그라파나와 프로메테우스 연동 (0) | 2024.04.23 |