Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[REFACTOR]Zzim리스트 조회 시, User,Place,Photo,PostCategory 관련 N+1 문제 해결 #115

Open
wants to merge 1 commit into
base: main
Choose a base branch
from

Conversation

dltnals317
Copy link
Collaborator

@dltnals317 dltnals317 commented Mar 10, 2025

📝 Work Description

Zzim 리스트 조회 시 발생했던 N+1 문제를 해결하기 위해, User, Place, Photo, PostCategory 조회 방식을 최적화했습니다.
기존에는 개별적으로 쿼리를 실행하여 데이터를 가져왔으나, 전역 Batch Size 설정 + IN 절 조회 방식으로 쿼리를 최적화하여 성능을 개선했습니다.
페이징을 고려하여 Fetch Join 대신 BatchSize 적용을 활용했습니다.

1. User, Place N+1 문제

  • post:user 관계와 post:place 관계는 n:1 관계이므로, 전역 BatchSize 설정을 통해 N+1 문제를 해결했습니다.
  • Hibernate의 hibernate.default_batch_fetch_size를 설정하여, 한 번의 쿼리로 여러 엔티티를 가져오도록 변경했습니다.
  • 개별 엔티티에 @batchsize를 추가하여 기본 BatchSize를 사용하지 않는 환경에서도 동일한 효과를 기대할 수 있도록 했습니다.

2. Photo, PostCategory N+1 문제

  • post:photo와 post:postCategory는 1:n 관계입니다.( 이 경우 전역적으로 batch설정이 안됨) 기존 방식으로는 Post별로 각 Photo나 PostCategory를 개별 쿼리로 조회하여 N+1 문제가 발생했습니다.
  • 이를 해결하기 위해, photoRepository와 postCategoryRepository에 새로운 메서드를 추가해, IN 절을 활용한 쿼리로 여러 Post의 Photo 및PostCategory 데이터를 한 번에 가져오도록 수정했습니다.

⚙️ Issue

🔨 Changes

1. User, Place 조회 방식 변경:

  • 전역 BatchSize 설정(hibernate.default_batch_fetch_size) 적용.

  • UserEntity와 PlaceEntity에 @batchsize(size = 100) 추가.

2. Photo, PostCategory IN 절 조회 적용:

  • 기존에는 개별 Post별로 Photo와 PostCategory를 각각의 쿼리로 조회.

  • 새로운 쿼리 메서드를 추가하여 IN 절로 다수의 Post에 대한 Photo와 PostCategory 데이터를 한 번에 가져옴.

  • 결과적으로 Photo와 PostCategory 조회에서 발생하던 N+1 문제 해결.

3. Adapter 및 Port 인터페이스 수정:

  • Zzim 관련 Photo, PostCategory 데이터를 일괄 조회하는 메서드를 추가.
  • 서비스 레이어는 포트를 통해 새로운 IN 절 기반 메서드만 사용.

4. Repository 수정:

  • IN 절 기반 쿼리를 추가하여 한 번의 호출로 필요한 데이터를 모두 가져오도록 변경.

@dltnals317 dltnals317 requested a review from airoca March 10, 2025 15:11
@dltnals317 dltnals317 self-assigned this Mar 10, 2025
@dltnals317 dltnals317 added 🐇수민🥕 개쩌는 개발자 이수민 🔨REFACTOR labels Mar 10, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
🐇수민🥕 개쩌는 개발자 이수민 🔨REFACTOR
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant