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
- 백준
- jpa
- Android
- 자바
- pointcut
- 스프링 핵심 원리
- SpringBoot
- 알고리즘
- db
- java
- http
- Exception
- kotlin
- Greedy
- Thymeleaf
- JDBC
- 스프링
- JPQL
- transaction
- Servlet
- AOP
- 인프런
- 스프링 핵심 기능
- spring
- springdatajpa
- Proxy
- 그리디
- 김영한
- Spring Boot
- QueryDSL
Archives
- Today
- Total
개발자되기 프로젝트
Proxy Pattern - 예제코드 1 본문
1. 테스트 코드에서 lombok 사용
testCompileOnly 'org.projectlombok:lombok'
testAnnotationProcessor 'org.projectlombok:lombok'
2. 프록시 패턴 - 예제 코드 작성
3. Subject
public interface Subject {
String operation();
}
4. RealSubject
@Slf4j
public class RealSubject implements Subject{
@Override
public String operation() {
log.info("실제 객체 호출");
sleep(1000);
return "data";
}
private void sleep(int millis) {
try {
Thread.sleep(millis);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
- RealSubject 는 Subject 인터페이스를 구현했다.
- operation() 은 데이터 조회를 시뮬레이션 하기 위해 1초 쉬도록 했다.
- 예를 들어서 데이터를 DB나 외부에서 조회하는데 1초가 걸린다고 생각하면 된다.
- 호출할 때 마다 시스템에 큰 부하를 주는 데이터 조회라고 가정하자.
5. Client
public class ProxyPatternClient {
private Subject subject;
public ProxyPatternClient(Subject subject) {
this.subject = subject;
}
public void execute(){
subject.operation();
}
}
6. Test
public class ProxyPatternTest {
@Test
void noProxyTest(){
RealSubject realSubject = new RealSubject();
ProxyPatternClient client = new ProxyPatternClient(realSubject);
client.execute();
client.execute();
client.execute();
}
}
- client.execute()을 3번 호출하면 다음과 같이 처리된다.
- client -> realSubject 를 호출해서 값을 조회한다. (1초)
- client -> realSubject 를 호출해서 값을 조회한다. (1초)
- client -> realSubject 를 호출해서 값을 조회한다. (1초)
- 그런데 이 데이터가 한번 조회하면 변하지 않는 데이터라면
- 어딘가에 보관해두고 이미 조회한 데이터를 사용하는 것이 성능상 좋다.
- 이런 것을 캐시라고 한다.
- 프록시 패턴의 주요 기능은 접근 제어이다.
- 캐시도 접근 자체를 제어하는 기능 중 하나이다.
- 이미 개발된 로직을 전혀 수정하지 않고, 프록시 객체를 통해서 캐시를 적용해보자.
6. GitHub : 211123 Proxy Pattern example 1
'인프런 > [인프런] 스프링 핵심 원리 - 고급' 카테고리의 다른 글
Decorator Pattern - 1 (0) | 2021.12.28 |
---|---|
Proxy Pattern - 예제코드 2 (0) | 2021.11.23 |
Proxy, Proxy Pattern, Decorator Pattern (0) | 2021.11.23 |
요구사항 추가 (0) | 2021.11.23 |
Proxy Pattern - V3 (0) | 2021.11.23 |
Comments