시스템 아키텍트PoC 개발자/아키텍트

프록시 패턴과 파사드 패턴 사이의 근본적인 차이점은 아키텍처 수준에서 무엇이며, 언제 사용해야 하나요?

Hintsage AI 어시스턴트로 면접 통과

답변.

**프록시(Proxy)**와 **파사드(Facade)**는 애플리케이션 아키텍처 구축 시 서로 다른 문제를 해결하는 구조적 디자인 패턴입니다.

프록시는 객체의 대리자 또는 "대신하는 것" 역할을 합니다. 그 임무는 접근을 제어하고, 캐시를 관리하며, 지연 로딩을 구현하고, 보안을 조정하거나 요청을 분배하는 것입니다(예: 네트워크 프록시, 보안 프록시). 프록시는 실제 객체와 동일한 계약(인터페이스)을 구현합니다.

Java 예제:

public interface Service { void operation(); } public class RealService implements Service { public void operation() { // ... } } public class ProxyService implements Service { private RealService realService = new RealService(); public void operation() { // 접근 검사 realService.operation(); } }

파사드는 복잡한 하위 시스템을 숨기고 단일화된 단순한 인터페이스를 제공하는 패턴입니다. 파사드는 접근 제어나 추가 로직을 처리하지 않으며 단지 호출을 집계합니다.

Java 예제:

public class PaymentFacade { private CardService card; private SmsService sms; public void pay() { card.check(); card.charge(); sms.notify(); } }

언제 사용해야 하나요:

  • 프록시: 접근을 제어, 캐시, 보안 로직, 지연 로딩이 필요할 때
  • 파사드: 클라이언트가 하위 시스템 집합을 다루기 쉽게 하고 결합도를 낮추어야 할 때
  • 두 패턴은 서로 보완할 수 있지만, 과제는 다릅니다.

주요 특징:

  • 프록시는 목표의 인터페이스를 구현하고, 파사드는 자체 인터페이스를 가집니다.
  • 프록시는 클라이언트에게 투명하고, 파사드는 추가적인 추상화입니다.
  • 프록시는 행동을 추가하고, 파사드는 작업을 단순화합니다.

함정 질문.

파사드 패턴이 하위 시스템의 기본 클래스 이상의 기능을 추가하는 것이 허용되나요?

아니요, 파사드는 단순히 호출을 집계하고 단순화할 뿐이며, 새로운 기능은 다른 패턴이나 새로운 서비스에서 구현됩니다.

프록시는 목표 객체에서 상속받아야만 하나요?

아니요, 프록시는 목표의 인터페이스를 구현하지만, 종종 조합(실제 객체를 캡슐화)을 사용하고 상속을 사용하지 않기도 합니다.

파사드를 사용하여 접근 권한 관리나 오류 로그를 관리할 수 있나요?

이 경우에는 프록시를 사용하는 것이 좋습니다. 파사드는 캐싱, 로깅 또는 권한 검사를 기본적으로 지원하도록 설계되지 않았습니다.