문제점
- 결제 완료 후 티켓 확인 시
org.hibernate.LazyInitializationException 예외가 member, flight, seat 엔티티에 대하여 발생
- 이 에러 로그를 추적한 결과 **
fetchType = Lazy**로 설정된 reservation Entity에서 에러가 발생
해결 방안
- OSIV 설정을 OFF로 변경하여 발생한 에러로 확인
- @Transactional이 해당 로직에 빠져있는 것을 확인, 어노테이션 적용
- 하지만 N+1 문제가 발생하는 것을 확인
- EntityGraph, fetch join을 통해 N+1 문제 해결
의견 조율
- @Transactional의 경우 에러 자체는 해결되었지만, n+1 쿼리가 발생
- fetch join의 경우 jpql을 통해 직관적인 쿼리문 작성 가능
- @EntityGraph의 경우 어노테이션을 사용하여 편리하게 연관관계 설정이 가능
의견 결정
- 서비스가 동적 쿼리를 아직 채택하지 않았고, 다른 엔티티에 대하여 사용되지 않았는데, 함수 한 개만을 위해 QueryDSL을 적용하는 것은 과한 투자라고 판단하여 QueryDSL 을 채택하지 않았다.
- JPA 기반으로 코드를 작성하고 있었기에, JPA에 속한 어노테이션인 @EntityGraph를 채택했다.
- 바로 적용 가능 및 코드의 전반적인 가독성 향상 기대
- 티켓을 불러올 때 fetch join하는 member, seat, flight entity의 모든 컬럼 값을 사용하기 때문에 단점이 중요하지 않다고 판단하여 채택