다음은 닥터 질문 답변 게시판 상황이다.
멤버는 질문을 할 수 있고 닥터는 답변을 달 수 있다.
질문과 답변은 OneToMany 관계이다.
여기서 문제는 질문 하나에 대해서 답변이 N개가 달린다면
N번의 쿼리가 나간다는 점이다.
답변 N개를 한번에 조회할 수 있는 방법이 있을까?
컬렉션 조회를 이용하면 된다.
- 닥터 질문 답변 게시판
답변 쿼리는 다음과 같다.
문제점: 답변 쿼리를 조회하면 답변한 닥터 쿼리가 3번 나가게 된다.
질문 하나에 대해서
닥터 3명이 답변을 단 상황에서 OneToMany이므로 쿼리가 3번 나갔다.
이러면 성능에 문제가 생기기에 컬렉션 조회를 이용한다.
해결방안: application.yml 파일을 수정하자.
jpa:
hibernate:
ddl-auto: update # 어플리케이션을 시작할 때 데이터베이스를 초기화하고 다시 테이블 생성
properties:
hibernate:
format_sql: true # 실행되는 query를 보여줌
default_batch_fetch_size: 100 # 컬렉션 조회를 위함
application.yml 파일에서 default_batch_fetch_size를 이용하면 OneToMany 상황에서 컬렉션 조회가 가능하다.
default_batch_fetch_size: 100 # 컬렉션 조회를 위함
default_batch_fetch_size: 100을 적용한 이후 쿼리 결과
컬렉션 조회를 통해 in 쿼리로 한번에 조회된 것을 볼 수 있다.
default_batch_fetch_size: 100 # 컬렉션 조회를 위함
default_batch_fetch_size 숫자는 DB 혹은 어플리케이션이 순간 부하를 어디까지 견딜 수 있는지에 따라서 결정하면 된다.
100~1000 사이 선택을 권장한다.
'Spring > JPA' 카테고리의 다른 글
@NoArgsConstructor(access = AccessLevel.PROTECTED) 쓰는 이유 (0) | 2023.10.11 |
---|
댓글