
백엔드
GraphQL을 이용한 QueryFacade 개발기
두줄요약
GraphQL을 인메모리 QueryFacade로 활용해 복잡한 Aggregator 구조를 정리한 사례를 다뤘습니다. 필요한 의존성만 조회하고 부분 에러 처리와 캐시 제어를 붙여 성능도 개선했습니다.
문제 상황
- 마이크로서비스 환경에서 업체 프로필 조회 시 도메인 간 데이터 조합 복잡도 증가
- include 기반 공통 Aggregator의 모호한 옵션, 예외 처리 불명확성, 인자 사이드 이펙트 추적 어려움, 동시성·내결함성 관리 부담
원인 분석
- 조인 대상이 계속 늘며 비슷한 Aggregator 코드가 다수 분기
- 필요한 의존성과 에러 범위가 인터페이스에 명확히 드러나지 않음
- 필드 수와 쿼리 파싱 비용이 증가하며 p99 지연 악화
해결 방법
- GraphQL을 인메모리 QueryFacade로 활용해 필요한 데이터만 선언적으로 조회
- errorGroup Directive와 cache Directive로 부분 에러 처리와 캐시 제어 추가
- EntityScalar로 객체 단위 반환을 적용하고 PreparsedDocument로 파싱 비용 완화
성능/운영 포인트
- 필드 수 증가에 따른 graphql-java 부하와 중첩 배열 쿼리 비용 고려
- 상위/형제 노드 의존 구조를 의식한 동시성 전략 필요
- 캐시, 서킷브레이커, 쓰레딩 같은 공통 관심사를 QueryFacade 계층에서 통합 관리