[BE] Stage 생성, 수정, 삭제 시 발생하는 비효율적인 쿼리 개선 (#988) #991
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
📌 관련 이슈
✨ 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를 사용한 방법을 사용해야하나 고민이 드네요.