DI를 이용한 Proxy패턴 관련 질문
DI를 이용한 Decorator, Proxy 패턴 듣고있는데요.
강의자료에 프록시 패턴의 프록시와 일반적용 용어 프록시, 자바의 다이나믹 프록시가 동일한 건 아니다. 이게 혹시 어떤내용인지 좀 더 알 수 있을까요?
답변 1
3
프록시라는 말은 일반적으로 대리자를 뜻합니다. 실제 대상을 대신해서 다른 역할을 해주는 것을 말하는 것이죠. 프록시 서버 같은 식으로 쓰기도 합니다. 일반적인 용어이지요.
자바의 다이나믹 프록시라고 불리는 것은 java.reflect.Proxy를 말하는 것인데 런타임시에 어떤 인터페이스를 구현한 인스턴스를 만들어 동적으로 기능을 부여하게 해줍니다. 이와 유사하게 인터페이스 없이 클래스를 상속하는 방식으로 구현해주는 클래스 프록시를 만들어주는 라이브러리, cglib 같은 것이 사용되기도 합니다.
그런데 GoF의 객체지향 디자인 패턴에 나오는 프록시 패턴과 데코레이터 패턴 두 가지는 다 자바의 다이나믹 프록시를 이용해서 동적으로 자바 프록시를 만들어서 구현할 수 있습니다. 물론 직접 코드를 만들어서 동적으로 연결을 시켜주는 방식도 가능하죠. 데코레이터 패턴은 대상 오브젝트에 책임을 동적으로, 재귀적으로 추가해주는 용도에 쓰이는 패턴인데 기능 추가보다는 접근제어나 보안, 지연로딩 같은 목적으로 쓰이는 프록시 패턴과는 목적 자체가 조금 다릅니다. 그런데 둘 다 구조가 비슷하고, 자바의 다이나믹 프록시를 이용해서도 만들 수가 있습니다. 그래서 데코레이터 패턴을 자바의 프록시를 이용해서 구현했다, 이런 표현이 가능한 것입니다.
그래서 스프링이 사용하는 인터페이스 프록시(다이나믹 프록시)나 클래스 프록시를 썼다고 해서 무조건 "프록시 디자인 패턴"을 썼다고 하면 뭔가 이상하겠죠? 어떤 경우엔 자바 프록시를 이용해서 "데코레이터 패턴"을 적용했다고 할 수도 있으니까요. 같은 단어지만 두 가지 프록시가 조금 다른 의미로 쓰이는 것이다라는 걸 이해하면 좋겠습니다.
JPA에서도 프록시를 사용하는데, 이건 디자인 패턴으로 치면 어떤 패턴에 해당할지도 한번 생각해보세요. 디자인 패턴에서 중요한 건 각 패턴의 목적 또는 의도입니다. 구조는 대부분 유사하기 때문에 목적으로 구분을 해야하죠.
11강에서 cmd에서 spring shell에 $ init 하면 Fail 메세지
0
75
2
TestRestTemplate 을 통해 테스트 실행시 웹 요청 정보가 콘솔에 표시되지 않습니다.
0
85
1
섹션7. 자동구성 정보파일분리 강의 질문(@MyAutoConfiguration 붙힌 이유)
0
201
2
WebApplicationContext를 DispatcherServlet에 this로 넘기는 것
0
279
2
인프라 빈 구성 정보의 분리에서 EnableMyAutoConfiguration 질문드립니다.
0
210
2
질문드립니다.
0
232
2
spring boot 3.3.7로 학습중입니다.
0
369
2
Serverproperties 객체 생성 후 @Impor 어노테이션 사용 이유 용도
0
162
2
spring start io 에서 이제더이상 2.x버전은 지원하지 않는 것 같습니다.
1
296
2
Springboot 3.2 이상에서 파라미터 추론관련
0
913
4
binding error
0
220
3
Arrays.copyOf 메서드의 타입 세이프
1
155
2
MyOnClassCondition에 있는 matches method의 Invoke 횟수
1
233
3
인용구의 출처가 궁금합니다.
0
259
1
프로퍼티 빈의 후처리기 도입 AnnotationUtils의 사용
0
236
2
SimpleCacheConfiguration과 빈 등록
0
168
2
MyAutoConfigImportSelector 에서 생성자로 ClassLoader를 주입받을 수 있는 점
0
244
1
IntelliJ project jenerator spring initailizr
0
150
1
강의 자료 레퍼지토리에 업로드
0
216
1
강의자료
0
388
1
Hikari 라이브러리가 없으면 오류가 나는거 아닌가요
0
314
2
Tomcat 포트 프로퍼티 미설정시 랜덤 포트 설정 문의
0
476
5
@Import 로 Bean을 등록해야하는 기준이 뭔지 궁금합니다.
0
340
2
application.properties파일내 프로퍼티 이름
0
210
1





