refactor: #146-answerCount 계산을 위한 SQL문 수정 #147
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.
Overview
answerCount 계산을 위한 SQL 쿼리를 수정했습니다.
Related Issue
Issue Number : #146
Task Details
기존에 Map 자료형으로 별첨하던 answerCount를 각 question에서 해당 ID를 가진 answer count를 계산하는 것으로 구현했습니다.
N+1문제 또한 해결하였습니다.
해결 과정
내가 원하는 결과 : list 조건에 맞는 각 question의 간단한 정보들과 해당 question의 answer 수를 하나의 DTO에 담아서 반환해주는 것
초기에 생각한 해결 방법들
QUESTIONS 테이블에 answerCount 추가 -> 가장 직관적인 해결방법. 그러나 매번 댓글 올릴때마다 QUESTION 찾아서 answerCount update 요청하면 결국 그것도 서버 부담이라 생각해서 중단하였다..
ANSWERS 와 QUESTIONS 양방향 참조 관계 구성 -> 이렇게 하면 Question의 List< Answer >를 통해 댓글 수를 알 수 있다. 그러나 NoSQL이나 postgreSQL에서 원할하게 동작하고 MySQL은 오류가 있다고 해서 중단하였다.
SubQuery 사용으로 추가 검색 -> 이렇게 하면 2번으로 검색 가능. 그러나 Projection.Constructor 주입에 문제가 발생해서 별도 Map 자료형으로 첨부하는 형식으로 반환하였다.
(최종) QUESTIONS 테이블에 ANSWERS LeftJoin으로 찾기 -> 원래도 하고 싶었는데 N+1으로 자꾸 ANSWERS 테이블을 추가 조회 혹은 반환도 이상해지는 문제가 있어서 위의 3번으로 했었다. 그러다가 생각난 것이 DISTINCT를 사용한 중복값 제거와 GROUP BY를 통한 그룹화였다. 이거 해주니까 그냥 한번에 깔끔하게 값을 반환해주었다.
Test Scope & Checklist (Optional)
Review Requirements