N+1 문제 , N+1 problem

몽슈뜨·2023년 2월 21일
0

우준호튜터님이 공부해보면 좋다고 말씀해주신 내용을 정리해보장

👻공부하다 모르는 키워드

  • n+1 problem
  • 영속성의 단위
  • Eager Loading

N+1 문제가 무엇인가요?

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;
}

모든 User 엔터티와 관련 Post 엔터티를 가져오고 싶다고 가정합니다. TypeORM을 사용하여 이를 수행하는 한 가지 방법은 userRepository의 find 메서드를 호출하고 ['posts'] 다음과 같습니다.
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 },
    ],
  },
];

profile
개발자되면 맥북사줄께

0개의 댓글