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

Api: ✏️ 월별 지출내역 조회시 발생하는 N+1 문제 개선 #110

Merged
merged 12 commits into from
Jun 23, 2024

Conversation

asn6878
Copy link
Collaborator

@asn6878 asn6878 commented Jun 6, 2024

작업 이유

  • Spending 객체와 연관관계를 맺고있는 SpendingCustomCategory 객체가 존재.
  • 기존의 QueryDSL 확장 레포지토리를 통한 월별 지출내역 조회시, N+1 문제 발생
  • 기존 SpendingSearchService 를 제거하고, QueryDsl 확장성을 제공하는 부분을 domain 모듈의 SearchService로 이전

작업 사항

image

테스트코드를 작성하면서 SpendingCustomCategoryFixture가 필요해지고, 커스텀 카테고리를 가지는 지출내역의 Insert가 필요해지면서 변경사항이 길어졌습니다. 박살난 가독성을 위해 최대한 요약해 설명해보겠습니다.

작성한 SpenidngSearchServiceTest의 흐름은 아래와 같습니다.

  • 커스텀 카테고리들을 만들어서 bulkInsert
  • 그 커스텀 카테고리를 가지는 Spending 들을랜덤하게 만들어서 bulkInsert
  • 이번달 지출내역을 조회
  • 조회된 Spending 들의 spendingCustomCategory에 접근
  • 쿼리 횟수 검증

이때 Hibernate가 발생시키는 쿼리는 2회 이며, 이를 만족하지 않을시 테스트는 실패합니다.

  1. SpendingSpendingCustomCategory 객체들의 user가 될 User객체를 create할때 1회
  2. readSpendings시 1회

리뷰어가 중점적으로 확인해야 하는 부분

  • 테스트코드에 잘못된 부분이 있는지?
  • SpendingCustomRepositoryImplfindByYearAndMonth의 QueryDsl 사용방법이 적절한지?

발견한 이슈

X

@asn6878 asn6878 added the fix 기능 수정 label Jun 6, 2024
@asn6878 asn6878 self-assigned this Jun 6, 2024
@psychology50
Copy link
Member

일단 리뷰 전에... 여기선 커스텀 카테고리 N+1 테스트를 하고 싶은 거라서 랜덤 값을 삽입하는 것보다는 그냥 3~4개 정도의 커스텀 카테고리로 등록된 지출 내역 데이터를 등록하시는 게 더 나았을 거예요.

Copy link
Member

@psychology50 psychology50 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

기존 테스트를 재활용하신 거니 수정하실 필요는 없지만, N+1 테스트를 위해 통합 테스트를 사용하는 건 비효율적입니다.
DAO 계층 테스트 케이스를 작성해서, 응답값을 given 절로 처리하면 DB 연결조차 생략 가능해요.

@asn6878 asn6878 requested a review from psychology50 June 13, 2024 07:47
Copy link
Member

@psychology50 psychology50 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

웬만하면 그냥 승인하려고 했는데, 정렬 부분 하나 확인 부탁드려요~

@asn6878 asn6878 merged commit 6458798 into dev Jun 23, 2024
1 check passed
@psychology50 psychology50 deleted the test/PW-347-custom-category-fetch-test branch June 23, 2024 22:26
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
fix 기능 수정
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants