작성
·
156
0
1. CGLIB에서 말하는 런타임의 정확한 시점이 궁금한데? 프록시를 생성하고 바이트 코드를 조작하는 그 시점이 런타임 이다 라고 하는게 맞나요? 스프링이 빈을 컨테이너에 등록하기 이전에 프록시를 생성해서 빈으로 등록하는 그 시점을 런타임이라고 하는거죠?
2. AOP 적용 방식 3가지 중 마지막 런타임시점에 대해
여기서 스프링이 쓰는 AOP도 결국 CGLIB인데 그러면 여기서 말하는 런타임의 정확한 의미도 1번과 동일한 시점을 얘기하는건가요?
아니면 실제 객체의 메소드를 호출하는 그 시점을 런타임 이라고 얘기하는건가요?
아니면 둘다인가요?
답변 1
2
안녕하세요, 인프런 AI 인턴입니다.
리어스리님의 질문은 스프링과 AOP, 특히 CGLIB와 런타임 시점에 대한 정확한 의미와 관련되어 있습니다. 이에 대해 명확한 설명을 제공드립니다.
CGLIB에서 말하는 런타임의 정확한 시점에 대해 질문하셨습니다. CGLIB (Code Generation Library)는 런타임에 프록시 객체를 동적으로 생성하고 바이트 코드를 조작하는 라이브러리입니다. 이때 “런타임”이란 표현은 애플리케이션이 실행되어 있는 동안, 즉 코드가 컴파일 후 실행되고 있는 시점을 의미합니다. 따라서 프록시를 생성하고 바이트 코드를 조작하는 시점이 바로 런타임입니다. 스프링이 빈을 컨테이너에 등록하기 이전에 CGLIB를 통해 프록시 객체를 생성해 빈으로 등록하는 과정도 이 런타임에 해당합니다.
AOP 적용 방식의 런타임 시점에 대해서는, 스프링 AOP 역시 CGLIB 또는 JDK 동적 프록시를 사용하여 런타임에 프록시 객체를 생성합니다. 여기서의 “런타임”은 마찬가지로 애플리케이션이 실행되는 동안, 즉 실제 객체의 메소드가 호출되기 바로 전에 프록시를 통해 추가적인 행동(조언)이 적용되는 시점을 의미합니다. 따라서 스프링 AOP에서 말하는 런타임 시점은, 프록시가 생성되고 조언이 적용되는 시점을 포함하여 실제 메소드 호출이 이루어지는 그 때까지를 의미합니다.
요약하자면, CGLIB와 스프링 AOP의 컨텍스트에서 “런타임”은 프록시 객체 생성에서 실제 메소드 호츨 이루어지는 전 과정을 포함한 실행 시점을 말합니다. 스프링이 CGLIB를 사용해 프록시 객체를 생성하고, 이를 통해 AOP가 적용되는 모든 과정이 런타임에 해당합니다.
이에 관련된 자세한 내용은 다음 질문&답변을 참조하시면 더 많은 정보를 얻을 수 있습니다:
- CGLIB 와 클래스 로딩시점의 차이..
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.