Bin's Blog

오늘의 CS(디자인 패턴 - 프록시 패턴) 본문

CS

오늘의 CS(디자인 패턴 - 프록시 패턴)

hotIce 2023. 5. 8. 11:27
728x90

1.1.5 프록시 패턴

  • 프록시 패턴은 컴퓨터 세상에서 "대리인"과 같은 역할을 하는 디자인 패턴이다. 프록시 패턴을 사용하면, 어떤 객체를 직접 사용하는 대신에 그 객체를 대신해주는 다른 객체(프록시)를 사용할 수 있다. 이렇게 하면 원래 객체의 기능을 보호하거나, 추가적인 작업을 수행할 수 있다.
  • 예를 들어, 수업 시간에 친구가 질문을 하고 싶어하는데, 물어보기가 부끄러워 다른 친구가 대신해서 선생님한테 질문한다. 이때 친구가 프록시 역할을 하는 것이다. 다른 친구가 선생님한테 질문을 하고, 답변을 원래 한 친구한테 전달해준다. 그래서 간접적인 상호작용이 가능하다. 
  • 대상 객체를 접근하기 전 그 접근에 대한 흐름을 가로채 대상 객체 앞단의 인터페이스 역할을 하는 디자인 패턴
  • 이를 통해 객체의 속성, 변환 등을 보완하며 보안, 데이터 검증, 캐싱, 로깅에 사용한다. 
    • 보안: 프록시 객체를 통해 원래 객체에 대안 접근을 제어할 수 있다. 예를 들어, 특정 사용자가 원래 객체의 기능을 사용하려고 할 때, 프록시 객체가 사용자 인증(사용자가 신뢰할 만한 사용자인지 확인하고, 인증된 사용자만 원래 객체에 접근할 수 있게 하는 것이다.)을 수행하여 원래 객체를 보호할 수 있다.
      • 왜 사용자 인증이 필요한가?
        • 무단 접근 방지: 인증을 거치지 않은 사용자가 원래 객체에 접근할 수 없도록 하여, 개인 정보나 중요 데이터의 누출을 막는다.
        • 악의적 조작 방지: 인증된 사용자만 원래 객체에 접근할 수 있도록 함으로써, 악의적인 조작이나 공격을 차단할 수 있다.
        • 사용자 신뢰: 사용자 인증을 통해 객체를 보호하면, 사용자는 자신의 데이터와 서비스가 안전하게 보호되고 있다고 믿을 수 있다.
        • 결론적으로, 사용자 인증을 수행하면 객체를 보호하고, 시스템의 안정성과 신뢰성을 높일 수있다. 
    • 데이터 검증: 객체는 원래 객체로 전달되는 데이터를 검증하여, 올바른 형태의 데이터만 원래 객체에 전달할 수 있다. 이렇게 함으로써 원래 객체의 안정성을 높일 수 있다. 
    • 캐싱: 원래 객체의 작업 결과를 저장해두고(캐싱), 동일한 작업이 다시 요청될 경우 저장해둔 결과를 반환할 수 있다. 이렇게 함으로써 객체의 부하(일을 덜 시키고 반복적인 작업 최소화)를 줄이고, 성능을 향상 시킬 수 있다.
    • 로깅: 원래 객체와의 상호작용을 기록하여 로그를 남길 수 있다. 객체 간의 상호작용에 대한 정보를 추적하거나, 나중에 문제가 발생했을 때 원인을 찾기 쉽게 할 수 있다. 예를 들어, 등산할 때 우리가 길을 잃지 않기 위해 내가 걸어온 길에 표시를 하기 시작한다. 그럼 내가 다시 오거나 길을 잃을 때 표시를 보고 다시 올 수가 있다. 
728x90