JPA의 기본전략, 그리고 Lazy 방식과 Eager 방식

서문🌙·2023년 3월 30일
0
post-thumbnail

Lazy는 필요에 따라 천천히 나오는 코스요리이고,
Eager는 한번에 다 배달되는 배달음식이다

JPA의 기본전략, 그리고 Lazy 방식과 Eager 방식

위의 예제에서 Lazy방식과 Eager 방식에 대해 조금 알 수 있게 되었다. 조금 더 자세히 알아보자.

  1. JPA 기본전략

    JPA 에서는 연관된 엔티티를 로딩할 때 기본적으로 Lazy Loading이 적용됩니다. 이는 성능 최적화를 위한 전략입니다.

    따라서, 특별히 설정하지 않은 경우에는 Lazy Loading이 적용되며, 필요한 경우에만 Eager Loading을 설정해야 합니다.

  1. Lazy Loading

    Lazy Loading은 필요할 때만 데이터를 로딩하는 방식입니다. 즉, 객체를 조회할 때 해당 객체와 연관된 데이터는 초기에는 로딩되지 않고, 실제로 사용될 때 로딩됩니다. 이 방식은 메모리를 절약하고, 필요하지 않은 데이터를 로딩하지 않아 성능을 개선할 수 있습니다

  2. Eager Loading

    Eager Loading은 객체를 로딩할 때 연관된 데이터를 모두 로딩하는 방식입니다. 따라서, 객체를 로딩할 때 연관된 모든 데이터가 함께 로딩되어야 하기 때문에, 필요하지 않은 데이터까지 로딩되어 성능 문제가 발생할 수 있습니다.

JPA에서는 **@ManyToOne, @OneToOne, @ManyToMany 등의 어노테이션을 사용하여 전략 방식을 명시적으로 설정할 수도 있습니다, 다만 이때는 성능 문제에 주의하여 사용해야 합니다. ex) `@ManyToOne(fetch = FetchType.LAZY)**`

  • **@OneToMany** 의 경우는 하나의 엔티티가 다른 엔티티들과 여러 개의 관계를 가지는 일대다 관계를 나타내며,
    기본적으로 Lazy Loading 전략이 적용됩니다. (외래 키를 지정하는 속성이 없지만, 연결된 ManyToOne을 통해 연결됨)

  • **@ManyToMany**의 경우는 여러 개의 엔티티가 서로 다수의 엔티티와 다대다 관계를 가지는 것을 나타내며,
    기본적으로 Lazy Loading 전략이 적용됩니다.

  • **@ManyToOne** 의 경우는 여러 개의 엔티티가 하나의 엔티티와 관계를 가지는 다대일 관계를 나타내며,
    기본적으로 Eager Loading 전략이 적용됩니다. (연관된 엔티티의 기본키를 사용하여 외래 키가 지정된다.)

  • **@OneToOne** 의 경우는 하나의 엔티티가 다른 하나의 엔티티와 관계를 가지는 일대일 관계를 나타내며,
    기본적으로 Eager Loading 전략이 적용됩니다. (연관된 엔티티의 기본 키를 사용하여 외래 키가 지정된다.)

profile
예외(exception)는 있다

0개의 댓글