Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
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
Archives
Today
Total
관리 메뉴

개발자되기 프로젝트

Proxy Pattern - 예제코드 1 본문

인프런/[인프런] 스프링 핵심 원리 - 고급

Proxy Pattern - 예제코드 1

Seung__ 2021. 11. 23. 23:19

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


 

GitHub - bsh6463/Spring_Advanced_2

Contribute to bsh6463/Spring_Advanced_2 development by creating an account on GitHub.

github.com

 

'인프런 > [인프런] 스프링 핵심 원리 - 고급' 카테고리의 다른 글

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