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

[BE] Stage 생성, 수정, 삭제 시 발생하는 비효율적인 쿼리 개선 (#988) #991

Merged
merged 2 commits into from
May 30, 2024

Conversation

seokjin8678
Copy link
Collaborator

📌 관련 이슈

✨ PR 세부 내용

이슈에는 수정만 포함했지만, 이슈를 처리하며 StageArtistRepository를 개선했더니, 생성과 삭제 쿼리 또한 최적화 되었습니다.

기존에 생성, 수정, 삭제 시 발생하는 쿼리는 다음과 같습니다.

생성 (아티스트 5명 추가)

변경전_공연_생성_쿼리

수정 (아티스트 1명 삭제)

변경전_공연_수정_쿼리

삭제

변경전_공연_삭제_쿼리


개선 후 발생하는 쿼리는 다음과 같습니다.

생성 (아티스트 5명 추가)

변경후_공연_생성_쿼리

수정 (아티스트 1명 삭제)

변경후_공연_수정_쿼리

삭제

변경후_공연_삭제_쿼리


삭제의 경우 거의 비슷하지만, 생성, 수정의 경우 2배 정도 쿼리가 줄어들었습니다.

@OneToMany 관계의 List<StageArtist>로 StageArtist를 관리해서 그런것도 있지만, FestivalQueryInfo를 재갱신 할 때 사용되던 FestivalIdStageArtistsResolverImpl의 구현 로직을 QueryDSL을 사용하여 한 번의 쿼리로 List<Artist>를 가져온게 더 크네요. 😂

List<StageArtist>로 StageArtist를 영속함에 따라 보다 성능 향상과 도메인에 비즈니스 로직이 집중되는 결과를 얻었지만, 약간 애매한 부분도 남았는데, StageArtistRepository를 완전히 삭제할 수 없다는 것 입니다.

이유는 StageArtist의 영속은 JPA의 동작에 의존하는데, StageArtist가 들어있는 Stage는 영속된 상태여야 합니다.

하지만 QueryService를 테스트 할 때, 조회할 데이터를 넣어야 하는데, 이때 테스트에 트랜잭션이 적용되어 있지 않으므로 StageArtist를 영속시킬 수 없습니다..!

따라서 StageArtistRepository는 프로덕션 코드에서 사용되는 곳이 하나도 없지만, 테스트를 위해 존재해야 합니다.

예전에 QueryService 테스트에서 데이터 설정은 Repository를 사용하기로 했었는데, 여기서 한계가 명확하게 보이네요 😂

그래서 통합 테스트를 RestAssured를 사용한 방법을 사용해야하나 고민이 드네요.

@seokjin8678 seokjin8678 added BE 백엔드에 관련된 작업 ⚙️ 리팩터링 리팩터링에 관련된 작업 labels May 22, 2024
@seokjin8678 seokjin8678 self-assigned this May 22, 2024
@github-actions github-actions bot requested review from BGuga, carsago and xxeol2 May 22, 2024 19:28
Copy link

Test Results

245 files  245 suites   29s ⏱️
796 tests 796 ✅ 0 💤 0 ❌
814 runs  814 ✅ 0 💤 0 ❌

Results for commit 5bf4809.

Copy link
Member

@BGuga BGuga left a comment

Choose a reason for hiding this comment

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

수고하셨습니다!!

@seokjin8678 seokjin8678 merged commit 4c9a07f into dev May 30, 2024
6 checks passed
@seokjin8678 seokjin8678 deleted the feat/#988 branch May 30, 2024 00:29
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
BE 백엔드에 관련된 작업 ⚙️ 리팩터링 리팩터링에 관련된 작업
Projects
None yet
Development

Successfully merging this pull request may close these issues.

[BE] Stage 수정 시 발생하는 비효율적인 쿼리를 개선한다.
2 participants