반응형
프록시 패턴 정의
프록시 패턴은 어떤 객체에 직접 접근하는 것이 아니라, 그 객체의 대리인 역할을 하는 객체를 통해 접근하도록 만드는 구조입니다. 실제 객체에 대한 접근을 제어하거나 기능을 확장하고자 할 때 사용됩니다.
프록시 패턴 구성 요소
- Subject: 프록시와 실제 객체가 공통으로 구현하는 인터페이스입니다.
- RealSubject: 실제로 동작을 수행하는 객체입니다.
- Proxy: RealSubject에 대한 참조를 가지고 있으며, 클라이언트 요청을 대신 처리하거나 RealSubject에게 위임합니다.
프록시 패턴 동작 방식
- 클라이언트는 Proxy 객체를 통해 요청을 보냅니다.
- Proxy는 필요한 경우 RealSubject 객체를 생성하거나 접근 권한을 확인한 뒤, RealSubject의 메서드를 호출합니다.
- 클라이언트는 Proxy를 통해 RealSubject와 간접적으로 통신하게 됩니다.
프록시 패턴 장점
- 접근 제어가 가능합니다.
민감한 정보나 기능에 대해 접근 권한이 있는지 확인할 수 있어 보안성이 향상됩니다. - 객체 생성을 지연시킬 수 있습니다.
리소스가 무거운 객체는 실제로 필요할 때까지 생성하지 않음으로써 성능을 최적화할 수 있습니다. 이를 가상 프록시(Virtual Proxy)라고 합니다. - 기능 확장이 유연합니다.
로그 기록, 트랜잭션 처리, 캐싱, 동기화 등 다양한 부가 기능을 RealSubject 코드에 손대지 않고 추가할 수 있습니다.
프록시 패턴 단점
- 시스템 복잡도가 증가합니다.
객체 사이에 중간 계층이 하나 더 생기므로 설계가 복잡해지고, 클래스 수가 늘어날 수 있습니다. - 성능이 느려질 수 있습니다.
부가 기능이 많은 프록시는 RealSubject보다 느릴 수 있으며, 특히 네트워크 프록시(Remote Proxy) 같은 경우는 지연(latency)이 증가할 수 있습니다. - 코드 유지보수가 어려워질 수 있습니다.
프록시 객체가 너무 많은 역할을 수행하게 되면 객체 간 책임 분리가 흐려지고, 디버깅이나 테스트가 어려워집니다.
프록시 패턴과 Spring
- AOP (Aspect-Oriented Programming)
Spring AOP는 내부적으로 프록시 패턴을 활용합니다. @Transactional, @Cacheable, @Async 등의 애노테이션은 프록시 객체를 통해 부가 기능을 적용하는 구조입니다. - 빈 등록 시 프록시 자동 생성
@Transactional이 선언된 클래스는 런타임 시 프록시로 감싸져 트랜잭션 시작/커밋/롤백을 제어하게 됩니다. - Lazy Initialization
Spring에서 @Lazy를 사용하면 객체 생성을 지연시키는 가상 프록시(Virtual Proxy) 역할을 수행합니다.
반응형
'CS 공부일지 > 디자인패턴 공부일지' 카테고리의 다른 글
Flux 패턴의 개념과 특징 (0) | 2025.04.02 |
---|---|
MVC패턴과 MVP패턴 그리고 MVVM패턴 (0) | 2025.04.01 |
옵저버 패턴(Observer Pattern)의 개념과 특징 (0) | 2025.03.31 |
전략 패턴 (Strategy Pattern)의 개념과 특징 (0) | 2025.03.31 |
이터레이터 패턴(Iterator Pattern)의 개념과 특징 (0) | 2025.03.31 |