• 티스토리 홈
starryeye
  • 프로필사진
    starryeye
    • 분류 전체보기 (189)
      • C++ (17)
      • Java (24)
      • OOP (5)
      • Spring Reactive Stack (12)
        • Reactive Streams (3)
        • Netty (4)
        • Reactor (1)
        • Webflux (3)
        • DB, Cache 연동 (1)
      • Spring (90)
        • Core (17)
        • MVC (33)
        • Client (2)
        • Security (4)
        • DB, Cache 연동 (33)
      • DataBase (12)
        • RDBMS (2)
        • NoSQL (10)
      • Message Broker (6)
      • Web (4)
      • Network (4)
      • 대규모 시스템 설계 (15)
  • 방문자 수
    • 전체:
    • 오늘:
    • 어제:
  • 최근 댓글
      등록된 댓글이 없습니다.
    • 최근 공지
        등록된 공지가 없습니다.
      # Home
      # 공지사항
      #
      # 태그
      # 검색결과
      # 방명록
      • Spring에서 자주 쓰이는 디자인 패턴 4
        2022년 11월 05일
        • starryeye
        • 작성자
        • 2022.11.05.:04
        반응형

        이전 포스팅에서..
        프록시의 개념에 대해 알아봤고..

        프록시를 사용하는 의도에 따라 구분되는 두가지 패턴중..
        (프록시 패턴, 데코레이터 페턴)

        프록시 패턴에 대해 알아보자..

        프록시 패턴은
        접근 제어에 초점을 맞추어 사용되는 프록시 개념을 도입한 패턴이다.


        예제를 통해 알아보자..

        Client(ProxyPatternClient)가 Subject 인터페이스를 의존하고 있다.
        Proxy(CacheProxy)에 해당하는 구체와 Server(RealSubject)에 해당하는 구체가
        동일한 인터페이스(Subject)를 구현하고 있다.

        위는 런타임 의존 관계를 표현한 클래스 다이어그램이다.


        실제 코드로 알아보자

        프록시와 서버가 구현해야할 인터페이스이다.

        위는 Subject 인터페이스를 구현한 실제 객체에 해당한다.
        operation 메서드를 오버라이딩 하고 있으며..
        operation 메서드를 호출 시, 내부적으로 1초의 시간이 걸리도록 하였다.

        위는 Subject 인터페이스를 구현한 프록시 객체이다.
        내부 변수로 실제 객체(target, RealSubject)를 가지고 있으며
        생성될때 미리 받아 놓는다.
        operation 메서드를 오버라이딩 하여 구현하고 있다.

        target의 반환값을 cacheValue 에 저장(캐시)한다.
        target의 반환값을 그대로 반환한다.

        Client 는 프록시와 실제 객체의 인터페이스인 Subject 를 변수로 가지고 있으며,
        생성자에서 주입받아 사용한다.

        execute 메서드에서 Subject(인터페이스)의 operation 메서드를 호출 해준다.


        이제 Client 가 동작 되는 Test 코드를 보고 동작을 알아보자..

        21 line에서 RealSubject 를 생성해준다.
        22 line에서 프록시 객체를 생성 해주고 target에 해당하는 realSubject 객체를 주입해준다.
        23 line에서 Client를 생성해주고 cacheProxy 객체를 주입해준다.

        그리고 client의 execute 메서드를 3번 호출 해주고 있다.

        실제 동작은..
        24 line 수행
        Client가 프록시를 호출해주고 최초 호출 이므로 프록시 내부 cacheValue 가 Null이라..
        target(RealSubject)의 operation 메서드를 호출(1초 걸림)하여 반환 값을 cacheValue 에 저장한다.
        그리고 cacheValue 값을 Client 에 반환한다.

        25 line 수행
        Client 가 프록시를 호출하는데 두번째 호출이라 내부 cacheValue가 Null이 아니기 때문에
        target 의 operation 메서드를 호출하지 않고(접근제어)
        프록시가 가지고 있는 cacheValue 를 바로 반환한다.
        -> target 을 호출하지 않기 때문에 1초의 시간이 걸리지 않는다.

        26 line 수행
        -> 25 line과 동일

        만약에..
        프록시 계층이 없었다면...
        Client 가 실제 객체인 RealSubject 를 3회 호출하기 때문에 전체 3초가 걸린다....
        -> 위에서는 프록시가 있어서 1초만 걸림.

        캐시 덕분에 빠르게 처리가 가능해졌다.

        반응형

        'Spring > Core' 카테고리의 다른 글

        Spring에서 프록시 사용 1  (0) 2022.11.05
        Spring에서 자주 쓰이는 디자인 패턴 5  (0) 2022.11.05
        Spring에서 자주 쓰이는 디자인 패턴 3  (0) 2022.11.05
        Spring에서 자주 쓰이는 디자인 패턴 2  (0) 2022.10.20
        Spring에서 자주 쓰이는 디자인 패턴 1  (0) 2022.10.19
        다음글
        다음 글이 없습니다.
        이전글
        이전 글이 없습니다.
        댓글
      조회된 결과가 없습니다.
      스킨 업데이트 안내
      현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
      ("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)
      목차
      표시할 목차가 없습니다.
        • 안녕하세요
        • 감사해요
        • 잘있어요

        티스토리툴바