반응형
Notice
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 프로그래밍
- 웹개발
- 컴퓨터과학
- 파이썬
- Yes
- 데이터분석
- 클라우드컴퓨팅
- 머신러닝
- 딥러닝
- 자바스크립트
- 빅데이터
- 컴퓨터공학
- 프로그래밍언어
- 사이버보안
- 데이터구조
- 컴퓨터비전
- 자료구조
- 데이터베이스
- 디자인패턴
- 인공지능
- 네트워크보안
- 데이터과학
- 소프트웨어
- 버전관리
- 보안
- 네트워크
- springboot
- 알고리즘
- 소프트웨어공학
- I'm Sorry
Archives
- Today
- Total
스택큐힙리스트
레거시 API도 걱정 끝! 리액트·스프링에서 Adapter·Facade 패턴으로 우아하게 래핑하기 본문
반응형
GoF 구조 패턴(Structural Patterns) 중 Adapter와 Facade는 ‘낡은 인터페이스’와 ‘복잡한 서브시스템’을 한 번에 다루는 만능 열쇠다.
1️⃣ 왜 구조 패턴이 필요한가?
- Adapter 패턴은 ‘호환되지 않는 인터페이스’를 일치시켜 기존 코드를 재사용하게 해 준다. 특히 프론트엔드에서 백엔드 응답 형태가 제각각일 때 효과가 크다.
- Facade 패턴은 복잡한 하위 시스템을 단일 진입점으로 숨겨, 클라이언트 코드(컨트롤러·서비스·컴포넌트)의 결합도를 낮춘다.
2️⃣ React에서 Adapter로 API 데이터 ‘갈아입히기’
// src/adapters/userAdapter.ts
export interface UserDTO {
id: string;
name: string;
avatarUrl: string;
}
export const userAdapter = (legacy: any): UserDTO => ({
id: legacy.user_id,
name: `${legacy.first_name} ${legacy.last_name}`,
avatarUrl: legacy.profile_img ?? '/fallback.png',
});
// 사용 예시: React Query
const { data: user } = useQuery(['user', id], fetchUser, {
select: userAdapter, // 원본 → UI 전용 DTO
});
팁 : Adapter 함수를 React Query · Redux Toolkit Query의 select 또는 transformResponse 옵션과 함께 쓰면, 컴포넌트 안에서 더 이상 데이터 변환 로직이 필요 없다.
3️⃣ Spring Boot에서 Facade로 레거시 서비스 단순화
// Legacy 서비스 다수 호출을 감싸는 간단한 Facade
@Service
@RequiredArgsConstructor
public class OrderFacade {
private final LegacyInventoryService inventory;
private final LegacyPaymentGateway payment;
private final LegacyShippingService shipping;
@Transactional
public OrderReceipt placeOrder(OrderRequest req) {
inventory.reserve(req.items());
PaymentResult pay = payment.charge(req.paymentInfo());
shipping.requestPickup(req.customer(), req.items());
return new OrderReceipt(pay.getId(), "READY");
}
}
- 컨트롤러는 OrderFacade.placeOrder() 한 줄이면 끝.
- 내부 레거시 서비스가 개선되어도 외부 계약은 변하지 않으므로, 마이크로서비스 전환이나 테스트 코드 유지 보수가 쉬워진다.
4️⃣ Adapter + Facade 동시 적용 체크리스트
- 경계선 명확화 : 프런트엔드는 Adapter로 출력 형식을, 백엔드는 Facade로 입력 파라미터를 통제한다.
- 의존성 최소화 : Facade에선 레거시 서비스 인터페이스만 의존하고, 구현체는 스프링 빈 주입으로 교체 가능하게 둔다.
- 에러·로그 통합 : Facade에서 예외를 공통 포맷으로 감싸고, Adapter에서 사용자 친화적 메시지로 변환한다.
- 점진적 도입 : 새 API → Adapter → Facade 순으로 작은 단위부터 리팩터링한다.
5️⃣ 실전 적용 감각 높이는 한 줄 요약
“프런트엔드 Adapter가 데이터 모양새를 맞추고, 백엔드 Facade가 복잡한 프로세스를 숨긴다.”
이 두 패턴만 익혀도 레거시 API와의 갈등은 80% 해결된다!
반응형
'개발' 카테고리의 다른 글
Bridge 패턴: 기능·구현을 갈라놓는 비밀 통로 (0) | 2025.07.17 |
---|---|
Adapter 패턴으로 레거시 API 호환하기 (1) | 2025.07.17 |
Actuator로 헬스 체크 실시간 모니터링 (1) | 2025.07.17 |
자바 스프링 개발 시작하기 - 10일차 스타터 & 프로파일로 미니 API 완성 (1) | 2025.07.17 |
Spring Security × Swagger로 Bearer JWT 자동 테스트 세팅 (0) | 2025.07.17 |
Comments