연관 관계에서 발생하는 이슈로
연관 관계가 설정된 엔티티를 조회할 경우에
조회된 데이터 갯수(n) 만큼 연관관계의 조회 쿼리가 추가로 발생하여 데이터를 읽어오게 된다.
이를 N+1 문제라고 한다.
가능한 적은 query를 날리기 위해 JOIN을 사용 하도록 유도한다.
(1) TypeORM 에서는 relation 데코레이터에 eager 옵션이 주어진다.
예를들어, User조회시 관련된 N개의 Post도 엮어서 조회해주고 싶을때 사용한다.
(2) find 함수 사용 시 relation필드에 조인할 테이블을 명시 해준다.
(3) find 함수 사용 시 join으로 join시킬 대상의 컬럼까지 명시해준다.
JOIN을 하게되면(eager loading) 데이터양이 많아지고, 속도 이슈가 발생할 수 있다.
게시글에 달린 댓글을 모두보기를 눌러야 로딩이 되는 경우가 있지 않는가?
N+1 번 쿼리를 날리는 케이스를 지연로딩(lazyloading) 이라 한다.
초기 로딩 시간을 줄일 수 있고, 자원 소비를 줄일 수 있다는 장점
https://yangeok.github.io/orm/2020/11/23/typeorm-theoritical.html#n1-%EB%AC%B8%EC%A0%9C