Skip to content

Conversation

@joowojr
Copy link
Contributor

@joowojr joowojr commented Feb 18, 2025

📄 요약(Summary)

✍🏼 상세(More)

PR Desciption

  • 아래는 예시로, 작업 조회 API (/api/tasks/{taskId}/histories) 요청 시에 실행 되는 쿼리를 캡쳐한 결과입니다.
    • 작업 조회 API 요청 시 실행되는 쿼리를 분석한 결과, 불필요한 쿼리가 발생하는 문제를 발견했습니다.
    • member 조회 시 persistence mapper 설정으로 인해 department에 대한 불필요한 select 쿼리가 실행되고 있습니다.
    • 이는 department 조회가 필요한 서비스에서도 추가적인 N+1 쿼리 실행을 유발하여 성능 저하를 초래할 수 있습니다.
image

변경 사항 설명

  • toDomain 메서드

    • Department 매핑을 별도의 mapDepartment 메서드로 분리
    • Admin 매핑을 ignore 처리하여 불필요한 조회 방지
  • memberEntityToMemberInfo 메서드 추가:
    Department 엔티티의 초기화 여부를 Hibernate.isInitialized() 메서드로 확인, 초기화된 경우에만 Department를 도메인 객체로 변환

  • mapDepartment 메서드 추가: Department 엔티티의 null 체크 및 초기화 여부 확인, 초기화되지 않은 경우 null 반환하여 불필요한 쿼리 방지

  • department 조회가 필요한 서비스에는 department fetch 메서드를 실행하도록 수정

Requirements for Reviewer

리뷰어가 특별히 봐주었으면 하는 부분이 있다면 작성해주세요
ex) 메서드 XXX의 이름을 더 잘 짓고 싶은데 혹시 좋은 명칭이 있을까요?

PR Log

PR 작업하면서 고민했던 내용, 해결한 내용, 고민 중인 내용 등

새롭게 배운 것

  • Hibernate.isInitialized() 메서드 활용:
    • 지연 로딩된 엔티티의 초기화 여부를 확인하는 메서드.
    • 이를 통해 불필요한 쿼리 실행을 방지할 수 있음을 알게 되었습니다.

고민 중인 사항

첨부 자료

Requirements for Reviewer

리뷰어가 특별히 봐주었으면 하는 부분이 있다면 작성해주세요

✅ 체크리스트(Checklist)

  • PR 양식에 맞게 작성했습니다
  • 모든 테스트가 통과했습니다
  • 프로그램이 정상적으로 작동합니다
  • 적절한 PR 라벨을 설정했습니다
  • 불필요한 코드를 제거했습니다

🚪 이슈 번호(Issue numbers)

Closes #590

@joowojr joowojr merged commit 54b652c into develop Feb 18, 2025
1 check passed
@joowojr joowojr self-assigned this Feb 18, 2025
@joowojr joowojr added the ♻️ refactor 코드가 내부적으로 작동하는 방식을 변경합니다. cleanup과는 다릅니다. label Feb 18, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

♻️ refactor 코드가 내부적으로 작동하는 방식을 변경합니다. cleanup과는 다릅니다.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

CLAP-451 회원 entity 조회 시 departement 조회 쿼리가 실행되지 않도록 리팩토링

2 participants