우준호튜터님이 공부해보면 좋다고 말씀해주신 내용을 정리해보장
N+1 문제는 발생할 수 있는 일반적인 성능 문제입니다. TypeORM과 같은 객체 관계형 매핑(ORM) 라이브러리로 작업할 때. 애플리케이션이 엔티티 및 관련 엔티티 컬렉션을 가져와야 하지만 ORM 라이브러리가 관련 엔티티를 검색하기 위해 여러 쿼리를 생성하여 성능이 저하될 때 발생합니다.
두 개의 엔티티가 있다고 가정해 보겠습니다. TypeORM 애플리케이션: User 및 Post. 각 사용자는 연관된 여러 게시물을 가질 수 있습니다. 다음은 데이터의 예입니다.
class User {
id: number;
name: string;
posts: Post[];
}
class Post {
id: number;
title: string;
body: string;
user: User;
}
const users = await userRepository.find({ relations: ['posts'] });
이렇게 하면 각 User 엔터티에 대해 연결된 Post 엔터티를 가져오는 별도의 쿼리가 생성됩니다. 사용자 엔터티 및 연결된 포스트 엔터티의 수가 많을 때 성능이 저하됩니다.
const users = [
{
id: 1,
name: 'Alice',
posts: [
{ id: 1, title: 'Post 1', body: 'Post 1 Body', user: 1 },
{ id: 2, title: 'Post 2', body: 'Post 2 Body', user: 1 },
{ id: 3, title: 'Post 3', body: 'Post 3 Body', user: 1 },
],
},
{
id: 2,
name: 'Bob',
posts: [
{ id: 4, title: 'Post 4', body: 'Post 4 Body', user: 2 },
{ id: 5, title: 'Post 5', body: 'Post 5 Body', user: 2 },
{ id: 6, title: 'Post 6', body: 'Post 6 Body', user: 2 },
],
},
];