BE/Spring & Spring Boot

[Spring Boot] 퍼사드 패턴

baek-dev 2025. 5. 2. 15:13

퍼사드 패턴(Facade Pattern)이란?

퍼사드(Facade) 패턴은 복잡한 서브시스템들을 하나의 단순한 인터페이스로 감싸주는 구조 패턴임.
즉, 여러 개의 클래스나 모듈로 구성된 복잡한 로직을 하나의 클래스로 감싸서 외부에서는 간단한 메서드 호출만으로 모든 기능을 사용할 수 있게 만드는 패턴임.

이름 그대로 “건물의 앞면(Facade)”처럼, 복잡한 내부는 숨기고 단순한 외관만 보여주는 구조임.


1. 퍼사드 패턴을 사용하는 이유

  • 복잡한 내부 시스템을 외부에 숨기고 단순화된 접근을 제공함
  • 서브 시스템 간의 결합도를 줄이고 느슨하게 연결되도록 함
  • 코드를 읽기 쉽고 유지보수가 쉬운 구조로 만듦

2. 퍼사드 패턴의 구조

[클라이언트]
     |
     ↓
[Facade] → [서브 시스템 1]
           [서브 시스템 2]
           [서브 시스템 3]
  • Facade 클래스: 복잡한 내부 서브 시스템을 조합하여 외부에 단순한 인터페이스 제공
  • 서브 시스템 클래스들: 실제 작업을 수행하지만 외부에서는 직접 접근하지 않음
  • 클라이언트: Facade만을 사용하여 전체 기능을 간편하게 호출함

3. 자바 예제 코드

서브 시스템 클래스들

public class PaymentService {
    public void processPayment() {
        System.out.println("결제 처리 완료");
    }
}

public class InventoryService {
    public void reserveItem() {
        System.out.println("상품 재고 예약 완료");
    }
}

public class ShippingService {
    public void arrangeDelivery() {
        System.out.println("배송 준비 완료");
    }
}

Facade 클래스

public class OrderFacade {
    private PaymentService paymentService;
    private InventoryService inventoryService;
    private ShippingService shippingService;

    public OrderFacade() {
        this.paymentService = new PaymentService();
        this.inventoryService = new InventoryService();
        this.shippingService = new ShippingService();
    }

    public void placeOrder() {
        inventoryService.reserveItem();
        paymentService.processPayment();
        shippingService.arrangeDelivery();
    }
}

클라이언트

public class Client {
    public static void main(String[] args) {
        OrderFacade orderFacade = new OrderFacade();
        orderFacade.placeOrder(); // 단 한 줄로 전체 주문 흐름을 실행함
    }
}

4. 퍼사드 패턴의 장점

장점  
복잡성 감소 외부에 단순한 인터페이스만 제공함
결합도 감소 클라이언트와 서브 시스템 간의 의존도를 줄임
유지보수 용이 변경이 필요한 경우 Facade 내부만 수정하면 됨
코드 가독성 향상 흐름이 명확하게 정리됨

5. 퍼사드 패턴의 단점

단점 설명
기능이 단순해질 수 있음 너무 많은 기능을 Facade에 몰아 넣으면 오히려 복잡해질 수 있음
추가 레이어 도입 단순한 프로젝트에는 오히려 오버엔지니어링이 될 수 있음

6. 퍼사드 패턴 vs 다른 패턴

비교 대상 차이점
어댑터 패턴 인터페이스를 다른 형식으로 변환하는 데 집중함
퍼사드 패턴 복잡한 로직을 단순한 API로 감싸주는 데 집중함
프록시 패턴 실제 객체에 대한 접근을 제어함 (캐싱, 로깅 등)

7. Spring 프로젝트에서의 실무 활용

  • 서비스 레이어에서 여러 도메인 서비스 호출을 감싸는 경우
    • OrderFacadeService 또는 UserRegistrationFacade 같은 네이밍으로 자주 등장함
  • Controller → Facade → 내부 서비스 구조
    • 컨트롤러는 Facade만 호출하고, Facade가 내부 로직을 적절히 연결함
  • 결제, 주문, 인증과 같이 여러 모듈이 협력하는 도메인에서 유용함

정리

퍼사드 패턴은 복잡한 내부 로직을 단일 인터페이스로 감싸 외부에 단순한 사용성을 제공하는 구조 패턴임.
서비스 간 협업이 필요한 경우나, 클라이언트 코드가 지나치게 많은 의존성을 가지는 경우에 효과적임.
내부 변경 없이 외부 API만 유지해야 하는 상황, 혹은 유지보수성과 가독성을 높이고 싶은 경우에 적용하면 좋은 효과를 볼 수 있음.

 

 

 

 

출처 : ChatGPT

'BE > Spring & Spring Boot' 카테고리의 다른 글

[Spring Boot] PRG 패턴  (1) 2025.05.06
[Spring Boot] CommandLineRunner  (0) 2025.05.05
[Spring Boot] E2E 테스트  (0) 2025.04.29
[Spring Boot] Redis pub/sub  (0) 2025.04.27
[Spring Boot] STOMP  (1) 2025.04.26