티스토리 뷰
파사드 패턴(Facade Pattern)
💡 클라이언트에게 파사드(Facade)라는 하나의 인터페이스만 제공해 서브 시스템의 구현을 숨기고 의존성을 낮추는 방법을 제공한다.
개요
프랑스 어로 건물의 입구가 위치한 외벽을 가리킨다. 건물은 파사드(Facade)를 통해 외부에서 내부가 정확히 어떻게 생겼는지 알지 못하게 숨기게 되는데, 이는 소프트웨어에서 내부 구현을 숨기고 외부에는 파사드(Facade)만 노출시키는 상황을 예상해 볼 수 있다.
객체 모델
👍 장점
- 서브 시스템을 파사드를 통해 접근하게 구조화 하면 복잡성을 줄일 수 있다.
- 클라이언트가 가져야할 의존성을 하나로 통합하여 줄일 수 있다(Loose Coupling).
🎯 실제 활용
스프링에서 각 레이어간 의존성을 줄이기 위해 파사드(Facade)에 의존성을 통합한다.
Before Facade
@RestController
@RequestMapping("/item")
@RequiredArgsConstructor
public class ItemRestController {
private final ItemService itemService;
private final OrderService orderService;
@GetMapping("/{itemId}")
public String getItem(@PathVariable Long itemId) {
String itemName = itemService.findItem(itemId);
Long orderNumber = orderService.findOrder(itemId);
return orderNumber + " : " + itemName;
}
}
🤔 해당 코드는 Controller 에서 서로 다른 서브 도메인( Item, Order )의 서비스 의존성을 가지고 있다. 너무 많은 의존성은 레이어 간의 강한 결합 혹은 변경하기 힘든 코드로 이어질 수 있다.
After Facade
// Cotroller
@RestController
@RequestMapping("/item")
@RequiredArgsConstructor
public class ItemRestController {
private final ItemFacade itemFacade;
@GetMapping("/{itemId}")
public String getItem(@PathVariable Long itemId) {
String response = itemFacade.getResponse(itemId);
return response;
}
}
//Facade
@Component
@RequiredArgsConstructor
public class ItemFacade {
private final ItemService itemService;
private final OrderService orderService;
public String getResponse(Long itemId) {
String itemName = itemService.findItem(itemId);
Long orderNumber = orderService.findOrder(itemId);
return orderNumber + " : " + itemName;
}
}
🙆♂️ 컨트롤러(Controller) 가 가지던 각 서브 시스템으로 의존성을 제거하고 파사드(Facade)에 해당 의존성을 통합하고 파사드를 통해 접근하여 서브 시스템으로 접근이 획일화하고 복잡도가 낮아졌다. 추가로 계층 간의 결합도를 낮추는 효과도 생겼다.
참조
TheRED:비즈니스성공을위한Java/Spring기반서비스 개발과 MSA구축 by이희창
'architecture > Design Pattern' 카테고리의 다른 글
[디자인 패턴] 이터레이터 패턴(Iterator Pattern) (1) | 2022.09.24 |
---|---|
[디자인 패턴] 플라이웨이트 패턴 (Flyweight pattern) (2) | 2022.09.24 |
[디자인 패턴] 프록시와 데코레이터 패턴 (0) | 2022.09.22 |
[디자인 패턴] Composite Pattern (0) | 2022.09.22 |
[디자인 패턴] 브릿지 패턴 (Bridge Pattern) (0) | 2022.09.18 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 컴포짓 패턴
- RestAssured
- 메모리 파편화
- ATDD
- pass by value
- OOP
- pass by reference
- 동적 타입 언어
- 수직 분할
- 내부 단편화
- 메모리 단편화
- 동적 디스패치
- Session
- java
- 클린 아키텍처
- Clean Architecture
- 장애 해결기
- SpringBoot 2.2
- 세션 불일치
- 수평 분할
- pool
- multimap
- 외부 단편화
- 객체 풀
- Memory Fragmentation
- 정적 타입 언어
- Sticky Session
- 뾰족함
- 육각형 아키텍처
- Object Pool
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함