피드로 돌아가기
Dev.toBackend
원문 읽기
BFF와 GraphQL 도입을 통한 클라이언트 맞춤형 데이터 최적화
API Gateway Patterns in .NET Core and Azure
AI 요약
Context
분산 아키텍처 내 다양한 클라이언트 요구사항으로 인한 과도한 데이터 호출(Over-fetching) 및 부족한 데이터 호출(Under-fetching) 문제 발생. 단일 API 엔드포인트 구조로는 모바일과 웹의 서로 다른 네트워크 대역폭 및 처리 능력을 동시에 충족하기 어려운 한계 존재.
Technical Solution
- 클라이언트 특성에 최적화된 전용 게이트웨이를 구축하는 BFF(Backend for Frontend) 패턴 적용
- Web BFF 내 Task.WhenAll을 이용한 병렬 서비스 호출로 전체 응답 시간(Response Time) 단축
- Mobile BFF의 데이터 필터링을 통한 Payload 크기 최소화 및 모바일 네트워크 효율성 제고
- HotChocolate 라이브러리 기반 GraphQL 도입으로 클라이언트 중심의 정밀한 데이터 요청 구조 설계
- DataLoader 도입을 통해 반복적인 개별 쿼리 호출을 배치 처리함으로써 N+1 Query 문제 해결
- Type Extension을 통한 엔티티 간 관계 정의로 단일 요청 내 중첩 데이터 페칭 구현
실천 포인트
1. 모바일/웹 등 타겟 디바이스별로 필요한 데이터 필드가 현저히 다른지 확인
2. 여러 마이크로서비스의 데이터를 조합해야 하는 경우 BFF의 병렬 호출 로직 검토
3. 클라이언트가 요청 필드를 직접 제어해야 하는 유연성이 필요하다면 GraphQL 도입 고려
4. GraphQL 도입 시 DataLoader 적용 여부를 확인하여 DB 및 서비스 부하 방지