Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
Tags
- Spring Cloud Netfilx Eureka
- 키클락
- saga pattern
- 스프링 배치
- 사가 패턴
- zipkin
- Java
- 멀티스레드
- Action Pattern
- Resilinece4j
- thread
- 스레드
- 체인 패턴
- TypeScript
- The law of Demeter
- Parallel Old GC
- 디자인패턴
- Spring Boot Actuator
- Transaction Pattern
- Serial GC
- JPA
- 배치
- spring cloud
- 생산자 소비자 패턴
- 타입스크립트
- 디자인 패턴
- spring batch
- java 정렬
- 알고리즘
- MSA
Archives
- Today
- Total
PSD( Private-Self-Development )
프록시 패턴 본문
프록시 패턴이란?
어떠한 객체를 사용하고자 할 때, 객체에 직접적으로 접근하는 것이 아닌,
해당 객체에 실질적으로 접근하는 대리자(프록시) 를 두어
해당 대리자에 접근하여 실객체 설정 및 사용하도록 만든 디자인패턴
프록시 패턴의 장점
- 사이즈가 큰 객체라면 실제 해당 객체 생성 전에 프록시를 통해 참조할 수 있다.
- 실 객체의 내부 로직을 숨기고 인터페이스를 통해 원하는것만 노출 가능
- 실 객체 접근 전, 전처리 로직을 만들 수 있다.
- 개방/폐쇄 원칙
- 실 객체의 생명주기 관리 가능
프록시 패턴의 단점
- 객체 생성 시 한 단계가 추가되므로, 객체 생성이 빈번할 경우 성능 저하
- 프록시 내부에 스레드 생성, 동기화 구현 필요 시, 성능 저하
- 가독성 저하
프록시 패턴 종류
- 가상프록시
- 꼭 필요로 하는 시점가지 객체의 생성 연기하고, 객체가 실제로 생성된 것 처럼 동작하도록 만드는 패턴
- 프록시 에서 작은 단위의 작업을 처리하고 리소스가 많이 요구되는 작업은 실 클래스에서 사용하도록 구현
- 원격프록시
- 실 객체의 대변자 역할을 하도록 만드는 패턴
- 서로 다른 주소 공간에 있는 객체에 대해 마치 같은 주소 공간에 있는것 처럼 구현
- 보호프록시
- 원 객체에 대한 접근을 제어하기 위한 경우에 사용하는 패턴
- 로깅프록시
- 각 요청 전/후 로 로깅
- 캐싱프록시
- 항상 같은 결과를 생성하는 반복 요청에 대하여 캐싱
- 스마트 참조
- 해당 서비스를 사용중인 클라이언트가 없을 경우 해당 서비스에 대한 시스템자원을 해제한다.
프록시 패턴 구현
public interface AInterface { // 인터페이스
int getCount(int id);
List<String> getList(int id);
}
public class AImpl implements AInterface { // 실 객체
public int getCount(int id){
int i = 0;
return i;
}
public List<String> getList(int id){
List<String> list = new ArrayList<>();
return list;
}
}
@RequiredArgsConstructor
public class AProxy implements AInterface { // 프록시
private final AImpl aImpl;
@Override
@Transactional
public int getCount(int id){
// 전 처리
if( id < 1 ) {
return null;
}
aImpl.getCount(id);
}
@Override
@Transactional
public List<String> getList(int id){
// 전 처리
if( id < 1 ) {
return null;
}
aImpl.getList(id);
}
}
참조 :
[디자인패턴] 프록시패턴(Proxy Pattern)
프록시(Proxy)를 번역하면 대리자, 대변인의 의미를 갖고 있다. 대리자, 대변인은 누군가를 대신해서 그 역할을 수행하는 존재이다. 이는 프로그램에도 똑같이 적용된다. 즉, 프록시에게 어떤 일
velog.io
'Backend > 디자인패턴' 카테고리의 다른 글
추상 팩토리 패턴 (0) | 2023.05.09 |
---|---|
팩토리 메서드 패턴 (0) | 2023.03.21 |
싱글톤 패턴(Singleton pattern) (0) | 2023.03.20 |
팩토리 패턴 (1) | 2023.03.15 |
옵저버 패턴 (1) | 2023.02.17 |