목록 보기
GraphQL을 이용한 QueryFacade 개발기
백엔드

GraphQL을 이용한 QueryFacade 개발기

당근마켓
당근마켓
2025년 1월 2일

두줄요약

GraphQL을 인메모리 QueryFacade로 활용해 복잡한 Aggregator 구조를 정리한 사례를 다뤘습니다. 필요한 의존성만 조회하고 부분 에러 처리와 캐시 제어를 붙여 성능도 개선했습니다.

문제 상황

  • 마이크로서비스 환경에서 업체 프로필 조회 시 도메인 간 데이터 조합 복잡도 증가
  • include 기반 공통 Aggregator의 모호한 옵션, 예외 처리 불명확성, 인자 사이드 이펙트 추적 어려움, 동시성·내결함성 관리 부담

원인 분석

  • 조인 대상이 계속 늘며 비슷한 Aggregator 코드가 다수 분기
  • 필요한 의존성과 에러 범위가 인터페이스에 명확히 드러나지 않음
  • 필드 수와 쿼리 파싱 비용이 증가하며 p99 지연 악화

해결 방법

  • GraphQL을 인메모리 QueryFacade로 활용해 필요한 데이터만 선언적으로 조회
  • errorGroup Directive와 cache Directive로 부분 에러 처리와 캐시 제어 추가
  • EntityScalar로 객체 단위 반환을 적용하고 PreparsedDocument로 파싱 비용 완화

성능/운영 포인트

  • 필드 수 증가에 따른 graphql-java 부하와 중첩 배열 쿼리 비용 고려
  • 상위/형제 노드 의존 구조를 의식한 동시성 전략 필요
  • 캐시, 서킷브레이커, 쓰레딩 같은 공통 관심사를 QueryFacade 계층에서 통합 관리

댓글 0

댓글을 작성하려면 로그인이 필요합니다.

댓글을 불러오는 중...