[트러블 슈팅] JPA - LazyInitializationException과 N+1
·
프로젝트 트러블 슈팅 및 몰랐던점 정리/CommunityAPI
LazyLoding의 기본 동작LazyInitializationException은 영속성 컨텍스트가 종료된 상태에서 LAZY 전략을 사용하려고 할 때 발생한다. @OneToMany 혹은 @ManyToMany (xToMany) 연관관계 매핑 시 기본 전략은 LAZY 전략이다. 이는 실제 데이터에 접근할 때 까지 연관관계의 매핑된 데이터를 로드하지 않는다. 이로 인해 연관관계로 매핑된 엔티티에 대해서 초기화 되지 않은 프록시 객체로 유지되다가 연관관계로 매핑된 엔티티 필드(데이터가 실제로 필요할 때)에 접근하면 데이터베이스에서 실제 데이터를 조회하려고 시도한다. 이 때 JPA는 영속성 컨텍스트가 활성화된 상태에서 프록시를 초기화하고 데이터베이스와 상호작용을 하게되는데, Spring 에서는 트랜잭션의 범위가..