inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화

주문 조회 V3.1: 엔티티를 DTO로 변환 - 페이징과 한계 돌파

@BatchSize의 조회 대상 우선순위(?)

363

공부용

작성한 질문수 10

0

[질문 내용]

안녕하세요 강의 너무 잘 듣고 있습니다.

@BatchSize에 관해서 의문점이 생겨서 질문을 드리게 되었습니다.

 

@BatchSize를 사용하면 특정 Entity에서 조회 쿼리가 필요한 필드를 초기화 할 때, 1차 캐시로부터 같은 종류의 Entity id값을 @BatchSize에 지정한 size값만큼 가져와 IN에 넣어서 필요한 데이터를 함께 조회하고 초기화하는 것으로 이해했습니다.

근데, 이 때 단순히 1차 캐시에서 랜덤으로 id값을 가져와서 IN에 넣으면 원하지 않는 Entity에 초기화가 잘못 이뤄질 수 있지 않을까 하는 의문이 있었지만, 당연하게도 이런 부분에 대해서는 알아서 최적화를 해 둔 것 같았습니다.

예를 들면 JPQL의 결과로 조회된 Entity컬렉션 내부에서 하나를 집어 Entity 필드를 지연 로딩 초기화할 경우 같은 컬렉션 내부의 Entity들이 우선순위를 갖고 함께 초기화되는 것 같았습니다.

하지만 이것이 정확히 어떤 원리로 동작하는 지는 알 수가 없었습니다..ㅠㅠ

JPQL로 조회한 컬렉션에 대해서 따로 영속성 컨텍스트가 참조하고 있다거나 하는 식으로 동작하는 것일까요?

이런 원리를 모르다 보니 @BatchSize가 IN에 넣을 Entity를 결정하는 우선순위를 알 수가 없었습니다.

@BatchSize의 size값이 JPQL로 조회한 컬렉션의 size보다 클 때에는 1차 캐시에서 부족한 만큼의 Entity id를 더 끌어와서 IN에 추가하는데, 이 때 함께 초기화될 Entity가 어떤 Entity일 지 예측이 안 됩니다. 이런 것들도 우선순위가 따로 존재하나요?

크게 중요한 내용은 아닌 것 같은데, 그냥 같은 컬렉션에 있는 Entity들이 IN의 우선순위가 된다고 이해하고 사용하는 정도면 문제가 없을 지 궁금합니다..!

spring-boot JPA java spring

답변 1

0

y2gcoder

안녕하세요. 공부용님, 공식 서포터즈 y2gcoder입니다.

정확한 원리나 작동 과정에 대해서는 알 수 없으나, 어떻게 작동하는지는 대략적으로 알 수 있는 링크들을 첨부하겠습니다. 답변에 있는 링크도 타고 들어가면 좀 더 도움이 될 것 같습니다!

 

https://www.inflearn.com/questions/592528

https://www.inflearn.com/questions/34469


감사합니다.

0

공부용

@BatchSize의 동작 알고리즘에 대해 잘 나와 있어서 도움이 되었습니다!

몰랐다면 나중에 쿼리가 size값을 준 것에 비해 많이 나갈 경우 의문을 가졌을텐데, 미리 방지할 수 있게되었습니다^^

BatchSize의 우선순위 관련해서는 영한님께서 올리신 hibernate사이트의 @BatchSize에 대한 부분을 읽어 보았는데, 따로 IN에 들어가는 entity와 관련해 작성된 내용은 없었던 것 같습니다.

크게 중요한 내용이 아닌 듯 하니 지금 이해한 수준으로 넘어가겠습니다 감사합니다!

0

y2gcoder

감사합니다 :)

강의 관련 외 질문입니다.

0

68

2

SpringBoot4 + Hibernate7 모듈 등록 방법 공유

1

92

1

BeanCreationException

0

91

3

Update 후 UpdateMemberResponse 매핑할 때

0

50

1

트랜잭션을 사용 안 할 때 커넥션은 언제 가져오나요?

0

101

2

페이징 + 검색조건 관련해서 질문드립니다.

0

70

1

Query Dsl Q파일 질문입니다.

0

84

1

루트 쿼리라는것은

0

60

1

메서드를 분리하는 기준

0

66

1

findAllWithMemberDelivery 메서드 질문드립니다.

0

111

3

연관관계 매핑을 안 쓸 경우, 사용해야 하는 전략

0

86

2

fetch join과 영속화와 OSIV의 관계

0

87

2

Distinct 사용 전 결과에 대한 의문

0

117

2

레포지토리 계층에서의 트랜잭션에 대한 의문

0

60

1

영속성 컨텍스트 생명주기의 신기한 부분이 있습니다.

0

78

2

dto 필드 속 엔티티 여부

0

60

1

뷰템플릿 사용 시

0

77

2

Result 클래스 관련 질문

0

56

1

@PostConstruct 프록시 관련 질문드립니다

0

86

1

DTO 대신 Form 사용은 안되나요?

0

138

1

OSIV ON 상태일 때

0

96

1

fetch join VS fetch join 페이징 궁금증

0

187

2

양방향 연관관계 알아보는 법?

0

107

1

16강 17강 간단 정리 이게 맞을까요 ?

0

166

2