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]: #133 fetch join, count 쿼리 최적화를 통한 중복 방지 #134

Open
wants to merge 4 commits into
base: develop
Choose a base branch
from

Conversation

qogustj
Copy link
Contributor

@qogustj qogustj commented Oct 24, 2024

✅ PR 유형

어떤 변경 사항이 있었나요?

  • 새로운 기능 추가
  • 버그 수정
  • 코드에 영향을 주지 않는 변경사항(오타 수정, 탭 사이즈 변경, 변수명 변경)
  • 코드 리팩토링
  • 주석 추가 및 수정
  • 문서 수정
  • 빌드 부분 혹은 패키지 매니저 수정
  • 파일 혹은 폴더명 수정
  • 파일 혹은 폴더 삭제

📝 작업 내용

이번 PR에서 작업한 내용을 간략히 설명해주세요(이미지 첨부 가능)
기존 코드는 냅두고 주석으로만 넣어놓음
문제점 : 많은 연관관계를 조인할때 n+1문제 발생
ex :
post1 file1
post1 file2
post1 file3
이러면 중복이 3개로되는 느낌
해결방법

  • fetchJoin 사용
    N+1 문제를 방지하기 위해 필요한 연관관계에 fetchJoin 적용
    실제 필요한 데이터를 한 번의 쿼리로 가져옴
  • Count 쿼리 최적화
    countDistinct() 사용으로 정확한 카운트 보장
    불필요한 조인 제거 (파일 관련 조인 제외)
    -불필요한 조인 제거
    postFileEntity 조인 제거 (필요한 경우에만 별도 쿼리로 조회하는 것이 좋음)
    실제 필요한 조인만 사용
    -distinct 처리 최적화
    메인 쿼리에서는 fetchJoin으로 중복 제거
    카운트 쿼리에서는 countDistinct로 처리

추가된 테스트 코드 관련 내용

  1. PostRepositoryTest 구현

    • 게시글 CRUD 및 검색 기능에 대한 단위 테스트
    • 다양한 검색 시나리오 테스트 (기본 검색, 필터링, 페이징)
    • 연관 엔티티들과의 관계 검증
  2. 테스트 데이터 설정

    • Board, Group, User, Member 등 연관 엔티티 생성
    • 실제 사용 사례를 반영한 테스트 데이터 구성
    • EntityManager를 통한 데이터 관리
  3. 검증 로직

    • JUnit5 assertAll 사용으로 다중 검증
    • 게시글 상태, 필터링, 페이징 결과 검증
    • 연관 엔티티 관계 검증

✏️ 관련 이슈(선택 사항)


코드 리뷰 받고 싶은 부분

  1. fetchJoin 적용이 적절한지
  2. distinct 처리 방식이 효율적인지
  3. 카운트 쿼리 최적화가 잘 되었는지
  4. 테스트 케이스들이 충분한 커버리지를 제공하는지
  5. 테스트 데이터 설정 방식이 적절한지

@qogustj qogustj added the refactor Refactoring the code label Oct 24, 2024
@qogustj qogustj self-assigned this Oct 24, 2024
게시글 검색 기능에 대한 단위 테스트 추가
- 기본 게시글 조회 테스트
- 검색어 필터링 테스트
- 그룹코드 필터링 테스트
- 멤버코드 필터링 테스트
- 페이징 처리 테스트

변경사항:
- PostRepositoryTest 클래스 생성
- 테스트용 데이터 생성 로직 구현 (setUp)
- 각 검색 시나리오별 테스트 메소드 구현
- 검색 결과 검증 로직 구현

관련 컴포넌트:
- PostRepository
- PostEntity
- BoardEntity
- GroupEntity
- UserEntity
- MemberEntity

BREAKING CHANGES:
- Status enum에 getStringStatus 메서드 의존성 추가
- 테스트 데이터베이스 설정 필요
게시글 검색 기능에 대한 단위 테스트 구현
- 기본 게시글 조회 테스트
- 검색어 필터링 테스트
- 그룹코드/멤버코드 필터링 테스트
- 페이징 처리 테스트

변경사항:
- PostRepositoryTest 테스트 클래스 생성
- 테스트용 데이터 생성 로직 구현
- 각 검색 시나리오별 테스트 메소드 구현
- 검색 결과 검증 로직 구현
- 엔티티 클래스에 빌더 어노테이션 추가
 - BoardEntity
 - GroupEntity
 - UserEntity
 - MemberEntity
 - PostEntity

관련 컴포넌트:
- PostRepository
- PostEntity
- BoardEntity
- GroupEntity
- UserEntity
- MemberEntity

BREAKING CHANGES:
- 엔티티 클래스에 @builder 어노테이션 추가
- Status enum에 getStringStatus 메서드 의존성 추가
- 테스트 데이터베이스 설정 필요
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
refactor Refactoring the code
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant