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.
작업 이유
작업 사항
1️⃣ 일정 등록
POST /api/v2/users/1/pets/3/schedules
2️⃣ 임의의 반려동물의 오늘 일정 리스트 조회
GET /api/v2/users/1/pets/3/schedules
3️⃣ 임의의 반려동물의 오늘 및 현재 시간 이후의 일정 부분 리스트 조회
GET /api/v2/users/1/pets/3/schedules?count=
오늘 날짜
에 해당하는요청 이후 시간
만을 반환합니다.4️⃣ 임의의 유저가 관리하는 전체 반려동물의 임의의 날짜에 해당하는 일정 리스트 조회
GET /api/v2/users/1/schedules?year=&month=&day=
/api/v2/users/1/schedules?year=2024&month=1&day=23
가 요청 경로가 됩니다.🧐 더 고민해야 할 점
처음 Join 횟수를 3개 테이블에서 2개 테이블로 줄이기 위해 고안했던 것이
schedule
,pet_schedule
테이블만 Join해서 schedule 정보와 관련pet_id 리스트
를 가져온 후해당 pet_id 정보들을 중복 없이 추출하여
findAll
하는 전략을 취했다.하지만 코드 복잡도와 경직도가 높아진다는 문제로 인하여 Join을 최적화하기 위한 전략을 구상하는 것으로 방향을 바꾸었다.
가장 처음엔
member_id
만으로 Sub Query와 Join을 사용하였으나, cost가 높아서 사용할 수 없었다.따라서,
member_id
로manager
테이블에서 관리 중인 반려동물의pet_id 리스트
를 요청하는 로직을 분리하고,해당 값을 QueryDsl의 인자로 넘겨줌으로써 cost를 낮출 수 있었다.
하지만 여전히
Full Table Scan
이 발생하는 등, 데이터가 커지면 요청이 오래 걸릴 수 있다는 우려가 존재한다.View를 생성했을 때, 더 좋은 이점을 취할 수 있을까?
보다 더 많은 연구가 필요하다.
이슈 연결
close #84