eager로딩과 lazy로딩
N+1문제
타 ORM은 lazy로딩을 기본으로 적용하므로 N+1문제가 자주 발생함. 그러나 TypeORM은 특별히 명시하지 않는 한 lazy로딩을 하지 않는다.
select한번으로 찾는것을 확인함
query: SELECT `Epic`.`id` AS `Epic_id`, `Epic`.`project_id` AS `Epic_project_id`, `Epic`.`name` AS `Epic_name`, `Epic`.`color` AS `Epic_color`, `Epic`.`created_at` AS `Epic_created_at`, `Epic`.`updated_at` AS `Epic_updated_at`, `Epic__Epic_storyList`.`id` AS `Epic__Epic_storyList_id`, `Epic__Epic_storyList`.`project_id` AS `Epic__Epic_storyList_project_id`, `Epic__Epic_storyList`.`epic_id` AS `Epic__Epic_storyList_epic_id`, `Epic__Epic_storyList`.`title` AS `Epic__Epic_storyList_title`, `Epic__Epic_storyList`.`point` AS `Epic__Epic_storyList_point`, `Epic__Epic_storyList`.`status` AS `Epic__Epic_storyList_status`, `Epic__Epic_storyList__Epic__Epic_storyList_taskList`.`id` AS `Epic__Epic_storyList__Epic__Epic_storyList_taskList_id`, `Epic__Epic_storyList__Epic__Epic_storyList_taskList`.`project_id` AS `Epic__Epic_storyList__Epic__Epic_storyList_taskList_project_id`, `Epic__Epic_storyList__Epic__Epic_storyList_taskList`.`story_id` AS `Epic__Epic_storyList__Epic__Epic_storyList_taskList_story_id`, `Epic__Epic_storyList__Epic__Epic_storyList_taskList`.`title` AS `Epic__Epic_storyList__Epic__Epic_storyList_taskList_title`, `Epic__Epic_storyList__Epic__Epic_storyList_taskList`.`displayId` AS `Epic__Epic_storyList__Epic__Epic_storyList_taskList_displayId`, `Epic__Epic_storyList__Epic__Epic_storyList_taskList`.`expectedTime` AS `ea5187b7c80fbe91f13c2b72093f121b1e6f574a`, `Epic__Epic_storyList__Epic__Epic_storyList_taskList`.`actualTime` AS `Epic__Epic_storyList__Epic__Epic_storyList_taskList_actualTime`, `Epic__Epic_storyList__Epic__Epic_storyList_taskList`.`status` AS `Epic__Epic_storyList__Epic__Epic_storyList_taskList_status`, `Epic__Epic_storyList__Epic__Epic_storyList_taskList`.`member_id` AS `Epic__Epic_storyList__Epic__Epic_storyList_taskList_member_id` FROM `epic` `Epic` LEFT JOIN `story` `Epic__Epic_storyList` ON `Epic__Epic_storyList`.`epic_id`=`Epic`.`id` LEFT JOIN `task` `Epic__Epic_storyList__Epic__Epic_storyList_taskList` ON `Epic__Epic_storyList__Epic__Epic_storyList_taskList`.`story_id`=`Epic__Epic_storyList`.`id` LEFT JOIN `project` `Epic__Epic_project` ON `Epic__Epic_project`.`id`=`Epic`.`project_id` WHERE ((((`Epic__Epic_project`.`id` = ?)))) -- PARAMETERS: [381]
async getProjectDetails(projectId: number) {
const project = await this.projectRepository.findOne(projectId, {
relations: [
'epics',
'epics.stories',
'epics.stories.tasks',
],
});
<aside>
💡 태스크 상태를 진행 중
→ 완료
로 업데이트 하기 위해서는 아래 체크리스트가 모두 완료되어야 함.
</aside>