인프런 커뮤니티 질문&답변

kwangjin12님의 프로필 이미지

작성한 질문수

스프링 핵심 원리 - 고급편

프록시 팩토리 - 예제 코드1

동적 프록시 질문 (jdk 동적 프록시 - 인터페이스가 있지만, 인터페이스에 없는 메서드)

작성

·

202

0

안녕하세요, 동적 프록시 강의 듣는 중에 질문 드립니다 (~섹션 6수강 중)

jdk 동적 프록시의 경우, 인터페이스가 있는 경우에만 사용할 수 있는 것으로 배웠는데요.

구현 클래스에 인터페이스에 포함되지 않은 메서드가 추가로 구현되어 있다면, 해당 메서드에는 프록시를 통한 호출이 불가능한데요.

그래서 프록시를 원하는 target에 대해서 전부 proxy가 적용될 수 없다면, 인터페이스 유무에 관계없이, cglib을 사용하는 것이 좋지 않을까 의문이 들었습니다.

질문을 요약하자면,

1. 구현 클래스의 모든 메서드를 지원하지 못할 가능성이 있음에도 jdk 동적 프록시 기술을 사용하는 이유가 궁금합니다.
2. (중복 같지만..) cglib을 사용하는 것이 jdk 동적 프록시에 비해 단점이 있어서, 1번 질문의 단점에도 불구하고 사용되는 걸까요?

감사합니다

답변 3

1

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. kwangjin12님

강의를 끝까지 들어보시면 궁금한 내용들에 대한 고민이 풀리실거에요 🙂

감사합니다.

0

kwangjin12님의 프로필 이미지
kwangjin12
질문자

그러면 인터페이스를 사용하더라도, 인터페이스에 선언되지 않는 메서드에까지 프록시를 적용하고 싶다면 cglib을 사용하게 되는걸까요?
아직 강의를 끝까지 듣지는 않아서, 추후에 강의내용에서 보완되는 개념들이 있는지도 궁급합니다 ㅎㅎ

0

안녕하세요, 인프런 AI 인턴입니다.

kwangjin12님의 질문에 대해 답변드립니다. JDK 동적 프록시와 CGLib을 사용하는 상황과 차이점에 대해 궁금하신 것 같습니다. 두 기술에 대한 선택 기준은 대상 객체가 인터페이스를 구현하고 있는지와 구체적인 성능 요구사항에 따라 달라질 수 있습니다.

  1. JDK 동적 프록시 사용 이유: JDK 동적 프록시는 대상 객체가 하나 이상의 인터페이스를 구현하고 있을 경우 사용됩니다. 이 방법의 주요 장점은 인터페이스 기반의 깔끔하고 명확한 프로그래밍을 유도한다는 점입니다. 인터페이스 기반 프록시는 원리가 비교적 간단하고, 자바 기본 기능을 사용하므로 호환성이 높습니다. 하지만, 말씀하신 것처럼 인터페이스에 선언되지 않은 메서드는 프록시를 통해 관리하기 어렵습니다.

  2. CGLib 사용 상황: CGLib은 인터페이스가 없는 클래스를 상속 받아 프록시 객체를 생성합니다. 이는 인터페이스가 없거나 특정 메서드만 프록시를 적용하고 싶은 복잡한 상황에서 유용하게 사용될 수 있습니다. 단점으로는, 추가적인 라이브러리 의존성이 필요하고, 잘못 사용했을 경우 상속 구조상 오류나 성능 저하가 발생할 가능성이 있습니다.

JDK 동적 프록시 적용시점에 대한 질문입니다. 에서는 JDK 동적 프록시의 동작 방식에 대한 질문에 대해 답변하고 있습니다. 이 글은 JDK 동적 프록시의 생명주기가 런타임 시점에 결정된다는 점을 명확히 합니다. 하지만 직접적인 CGLib 비교에 대한 내용은 포함되어 있지 않습니다.

위 사항들을 종합해보면, 프록시 선택은 대상 객체의 특성과 구현해야 할 로직의 성격을 고려하여 결정해야 합니다. JDK 동적 프록시는 인터페이스 기반으로 깔끔하고 명확한 구조를 선호할 때, CGLib은 더 복잡하거나 특정 메서드에 대한 프록시 적용이 필요할 때 유용할 수 있습니다.

현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.