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] Hotfix/#473 Soft Delete 반영해 조회하도록 쿼리 수정 #521

Merged
merged 5 commits into from
Sep 29, 2023

Conversation

yoondgu
Copy link
Collaborator

@yoondgu yoondgu commented Sep 28, 2023

작업 대상

  • Topic, Pin, PinImage (Soft delete 대상 도메인)

📄 작업 내용

  • 엔티티에 일괄 적용하여 통일성을 부여하는 대신, 테스트 코드의 적은 변경사항을 위해 Repository 메서드를 수정하였습니다.
  • 조회 시 isDeletedFalse 인 레코드만 가져오도록 Repository 메서드를 수정합니다.
  • 테스트에서 사용하는 조회 메서드는 그대로 유지합니다. (테스트에서도 isDeletedFalse로 가져오는 게 로직 상 더 나은 일부 경우, 수정하였음)
  • XXXQueryServiceTest에 해당 내용 테스트를 추가했습니다. Topic 다건 조회의 경우 비슷한 로직의 테스트가 많아 모아보기, 전체조회 하는 메서드에 대해서만 우선 테스트 작성했습니다.

🙋🏻 주의 사항

운영 서버에 빠른 반영이 필요한 사안이라 main 의 hotfix로 올립니다.
이 PR 이후 develop-BE-2 브랜치는 main pull 땡겨오고 작업하면 좋을 것 같아요

추가로 mutlipleBag 발생 문제로 인해 Topic의 findByIdAndIsDeletedFalse 조인 항목 중 bookmarks를 삭제했습니다.

스크린샷

📎 관련 이슈

closed #473

레퍼런스

@yoondgu yoondgu added BE 백엔드 관련 이슈 우선순위 : 상 refactor 리팩토링 관련 이슈 labels Sep 28, 2023
@yoondgu yoondgu self-assigned this Sep 28, 2023
@github-actions
Copy link

github-actions bot commented Sep 28, 2023

Unit Test Results

  67 files    67 suites   22s ⏱️
295 tests 295 ✔️ 0 💤 0
304 runs  304 ✔️ 0 💤 0

Results for commit fb28163.

♻️ This comment has been updated with latest results.

Copy link
Collaborator

@kpeel5839 kpeel5839 left a comment

Choose a reason for hiding this comment

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

도이! 연휴에 너어어무우우 고생하셨슴둥글레차

의문점 하나만 남겼으니 대답해주시면 감사할 것 같아용!

@@ -55,7 +56,7 @@ public Long saveTopic(AuthMember member, TopicCreateRequest request) {
Topic topic = convertToTopic(member, request);
List<Long> pinIds = request.pins();

if (0 < pinIds.size()) {
if (!pinIds.isEmpty()) {
Copy link
Collaborator

Choose a reason for hiding this comment

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

호호 바뀌었군요..ㅋㅋㅋㅋ

@@ -116,7 +116,7 @@ private void validateReadableTopic(AuthMember member, Topic topic) {
}

public List<TopicDetailResponse> findDetailsByIds(AuthMember authMember, List<Long> ids) {
List<Topic> topics = topicRepository.findByIdIn(ids);
List<Topic> topics = topicRepository.findByIdInAndIsDeletedFalse(ids);
Copy link
Collaborator

Choose a reason for hiding this comment

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

여기서 그러면 pin도 deleted false 인 애로 가져오나요??

Copy link
Collaborator Author

@yoondgu yoondgu Sep 28, 2023

Choose a reason for hiding this comment

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

아니요... 맞아요 이 부분이 문제가 있어요. 지연로딩에서 수행하는 쿼리는 저희가 커스텀할 수 없는 것 같더라고요
그래서 @Where 어노테이션을 사용하면 이 문제가 해결될 것 같은데,
일단 운영 서버에 급하게 필요한 부분만 확실히 구현하고자(삭제 된 Topic이 안보여야 함) 사전논의된 방향으로 진행했습니다.

일단 빠른 반영 후, 리팩터링 방향에서 이 부분을 개선하는 건 어떻게 생각하시나요..?! 아직 pin이 삭제될 상황은 많지 않을 것 같아서요.

리팩터링 방향으로는 조회 시 @Where 어노테이션을 사용하고,
이로 인해 깨지는 테스트는 테스트 코드의 로직을 수정하는 게 더 적절할 거란 생각도 듭니다.
(ex. 핀 삭제 후, pinRepo.findById()으로 핀의 필드 상태를 확인하는 것이 아니라 pinRepo.isExistById()를 호출)
그래서 일단 반영 후, 리팩터링 차원에서 테스트 코드 수정 및 @Where어노테이션을 적용하는 방향은 어떨까 해요.

그런데 그 전에, 제가 지식이 부족해서 그런지 @cpot5620가 슬랙으로 말씀해주셨던
@Where을 쓸 거면 @SqlDelete을 같이 써야한다는 말씀이 아직 정확히 이해가 안간 것 같아요.
@SqlDelete를 쓰면 테스트 코드에서 매번 flush, clear를 해주어야 한다면
soft delete하는 쿼리는 지금 그대로 쓰고(@SqlDelete 안쓰고), 조회만을 위해 @Where을 쓰면 안되나용 ....???

Copy link
Collaborator

Choose a reason for hiding this comment

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

아주 장문으로 남겨주셨네요! 일단 이 상태로 가고 추후 개선하는 것 동의합니다. 저도 코멘트 남기고 나서 pin 삭제하는 경우가 있나 생각했거든요 물론 토픽도 동일하긴 하지만요 허허허허, 그리고 말씀하신 @where 어노테이션 건도 어떤 말씀이신지 명확히 파악했어요! 이 문제는 쥬니랑 조금 더 이야기해보고 결정해볼까요??

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

설명하려다보니 구구절절쓰..^_^ 좋슴닥

Copy link
Collaborator

@cpot5620 cpot5620 left a comment

Choose a reason for hiding this comment

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

@cpot5620 cpot5620 merged commit 1427f37 into main Sep 29, 2023
3 checks passed
@yoondgu yoondgu added this to the 최종 데모데이 milestone Oct 3, 2023
@yoondgu yoondgu deleted the hotfix/#473 branch October 6, 2023 15:14
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
BE 백엔드 관련 이슈 refactor 리팩토링 관련 이슈 우선순위 : 상
Projects
Status: Done
Development

Successfully merging this pull request may close these issues.

4 participants