woowacourse-teams / 2023-festa-go

🎪 페스타고, 대학 축제를 더욱 즐겁게!
71 stars 8 forks source link

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

Closed seokjin8678 closed 3 months ago

seokjin8678 commented 4 months ago

✨ 세부 내용

Stage 수정 시 다음과 같은 쿼리가 발생합니다.

image

N명이 참여한 공연을 수정 시, N번의 Insert 쿼리와 Delete 쿼리가 각 발생하는 것을 볼 수 있습니다.

원인은 공연을 수정할 때, 수정해야 하는 아티스트가 기존 아티스트에 참여하는 것을 확인하기가 힘들어, 단순히 모두 삭제하고 재등록하는 방법으로 구현해서 그렇습니다.

공연을 추가하는 요청은 관리자 기능이고, 그렇게 빈번한 요청이 아니기에 크리티컬한 문제는 아니지만, 공연의 수정의 경우 빈도가 잦을 수 있기에 개선하면 좋을 것 같습니다.

개선 방향은 Stage 엔티티에 @OneToMany 관계의 List<StageArtist>를 둬서 기존 StageArtistRepository로 저장하던 것을, 변경 감지를 활용하여 엔티티로 저장하면 불필요한 쿼리도 줄어들고, 보다 도메인에 집중된 비즈니스 로직으로 변경할 수 있을 것 같습니다.

⏰ 예상 소요 시간

3시간