미해결
실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
프록시 관련해서 질문이 있습니다.
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]영한님 안녕하세요.
JPA로드맵, 스프링 로드맵 모두 들으면서 기초 개념을 잡아가고 있습니다. 감사합니다.
다름이 아니라, 학습을 하면서 프록시 객체의 개념이 많이 등장하는데요, 이런 프록시 객체에 대해 궁금한 점이 생겨서 질문드립니다.
스프링이 빈을 싱글톤으로 관리하기 위해 CGLIB 바이트코드 조작을 통해 가짜 프록시 객체를 스프링 빈으로 등록한다고 알고 있습니다.
그리고 스프링 AOP 적용 시에, Pointcut의 대상이 되는 객체(pointcut 대상 메서드가 포함된 객체)에 Advice를 적용하기 위해 CGLIB 또는 JDK 동적 프록시 기술로 프록시 객체를 만든다 배웠습니다.
마지막으로 여기서 JPA에서 지연로딩을 하기 위해 가짜 프록시 객체를 생성하고 실제 프록시 초기화 시점에 DB에서 쿼리를 불러온다고 보았습니다. (--> 이 프록시 객체는 영속성 컨텍스트가 시작될 때 생성되었다가 사라지는 것 같긴 합니다..)
실제로는 더 많은 사례가 있겠지만, 일단 제가 알기로는 이렇게 3가지가 있었던 것 같은데, 이때 생성되는 프록시 객체들은 다 별개의 객체들일까요?
예를 들어 싱글톤 빈으로 등록된 객체가 있는데(CGLIB 프록시), 이 객체가 AOP 적용 대상이라면 CGLIB 혹은 JDK 동적프록시를 통해 또다른 프록시 객체가 생성되는 건지 궁금합니다.
추가로, 지연로딩을 위한 프록시 객체는 영속성 컨텍스트가 시작될 떄 생성되어 영속성 컨텍스트가 종료되면 사라지는 것인지 궁금합니다.
질문이 다소 모호해서 죄송합니다.