묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
EAGER와 LAZY 질문
JPA를 사용할때 path에서 EAGER을 사용하는 경우는 거의 없나요?
-
미해결실전! 스프링 데이터 JPA
LazyLoading 시 가져오는 객체에 대해 질문이있습니다!
[질문 내용]안녕하세요 영한님 JPA 를 공부하다가 LazyLoading 관련해서 의문점이 생겨 질문남깁니다. 연관관계에서의 LazyLoading 은 실제 entity를 가져오는것이 아닌 프록시객체의 target이 entity와 연결되어있는것으로 알고있습니다. 그래서 Team(1) <-> Member(n) 의 관계라고 가정했을때 Member 에서의 @ManyToOne 관계에서의 LazyLoading 으로 객체를 가져오게 되면 Team은 `Team$HibernateProxy$95RMKfgq@13875` 이런 형식으로 프록시 객체를 갖고있는것을 확인했습니다. 다만 Team에서 @OneToMany 관계의 Member를 LazyLoading 호출하게되면 List<Member> 의 형식이 PersistentBag 의 객체형식을 가지고있는것까지는 이해했는데 컬렉션 내의 객체는 제가 생각했던 `Member$HibernateProxy$95RMKfgq@13875` 와 같은 프록시 객체의 형태가 아닌 `Member@13867` 과 같은 실제 객체를 가지고 있는것으로 확인했습니다. 이와 관련해서 PersistenceCollection 이나 StatefulPersistenceContext 클래스의 관련된 문서를 찾아봤지만 답을 찾지못해 여쭤봅니다ㅠㅜ 추가로 entityManagerFactory getPersistenceUnitUtil().isLoaded 메소드를 이용해서 List 객체를 조회했을땐 false 로 확인했습니다. 다만 디버그모드로 봤을때는 ManyToOne 과 다르게 실제객체형태로 보이네요ㅠㅜ 디버그모드로 확인시 값을조회해야해서 의도치않게 추가쿼리가 발생되는것은 인지하고있지만 이 케이스는 이해가 되질 않네요 ㅎㅎ
-
해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
OneToOne 연관관계 주인아닌 테이블에서 LAZY 로딩 관련 질문
[질문 내용]안녕하세요! 강의 들으면서 열심히 배우고 있습니다! 이번에 질문드리는 부분은 저번 강의의 프록시의 한계(?)와 관련된 질문입니다. OneToOne 관계에서 연관관계 주인이 아닌 테이블에서 LAZY로딩을 하더라도 프록시의 한계로 인해 쿼리가 두번나가는 것을 배웠었습니다. 거의 모든 경우에 대해 LAZY를 설정하는데, 이렇게 OneToOne 연관관계주인이 아닌 테이블에서는 LAZY를 설정하는게 오히려 성능 하락을 불러일으킬것 같다는 생각이 들어서 질문드립니다. 실제 이번 강의에서 Delivery 엔티티에서 Order를 LAZY 로딩 적용해주셨는데 임시로 DeliveryStatus는 주석처리 해놓고 Delivery를 em.find 로 조회해보면 쿼리가 두번 나가는 것을 확인했습니다.(저번 강의에서 말씀해주신 프록시의 한계) 그래서 아직 짧은 제 식견으로는 이런 경우엔 EAGER를 하는게 오히려 성능상 좋지 않을까? 라는 생각을 했는데요. 실무적인 관점에서 어떤식으로 푸시는지 궁금합니다! 감사합니다. 명아주 드림
-
미해결앨런 iOS Concurrency(동시성) - 디스패치큐와 오퍼레이션큐의 이해
lazy var 관련 질문
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요. GCD 자료 277p에서 lazy var와 관련된 질문 사항인데요. testVar라는 변수가 클로저에 ()가 붙여져 있는데, 제가 알기론 이렇게 되어있다면, testVar을 읽을 때마다 클로저가 호출되서 async로 보내든 말든 매번 랜덤한 수가 나와야되는데 실제론 그렇지 않더라구요. GCD와 관련된 질문은 아니지만, 이걸 정확히 이해하면 뒷내용을 확실히 파악할 수 있을 것 같아서요. 혹시 이유를 알 수 있을까요? 사실상 저 변수는 클로저인데 사용할 때마다 매번 호출되어 {}에 있는 코드들이 매번 실행되어야하는 거 아닌가요? 감사합니다.