데이터 지향 서비스 메시를 (새 탭에서 열림)
에어비앤비가 도입한 '바이아덕트(Viaduct)'는 거대해진 마이크로서비스 아키텍처(SOA)의 복잡성을 해결하기 위해 제안된 데이터 지향 서비스 메시입니다. 기존의 서비스 메시가 단순히 서비스 간의 원격 프로시저 호출(RPC)을 라우팅하는 데 집중했다면, 바이아덕트는 GraphQL 스키마를 중심에 두어 데이터 소비자가 하위 서비스의 구조를 몰라도 필요한 데이터를 효율적으로 가져올 수 있게 합니다. 이를 통해 서비스 간 의존성 그래프를 단순화하고 시스템 전반의 모듈성과 데이터 민첩성을 획기적으로 향상시켰습니다.
기존 SOA의 복잡성과 데이터 지향 설계의 필요성
- 마이크로서비스의 수가 수천 개로 늘어나면서 서비스 간 의존 관계가 '스파게티 코드'처럼 얽히는 문제가 발생했습니다.
- 현재의 SOA는 1970년대 스타일의 프로시저 지향 설계에 머물러 있어, 각 서비스가 단순한 엔드포인트의 집합으로 취급됩니다.
- 에어비앤비는 1980년대 객체 지향 언어들이 데이터를 중심으로 로직을 캡슐화했던 것처럼, SOA도 데이터 중심으로 진화해야 한다고 판단했습니다.
GraphQL 기반의 데이터 지향 서비스 메시, Viaduct
- 바이아덕트는 서비스 메시의 핵심을 데이터 중심의 GraphQL 스키마(Type, Query, Mutation)로 정의합니다.
- 데이터 소비자(Consumer)는 특정 서비스의 엔드포인트를 직접 호출하는 대신, 필요한 데이터 필드를 쿼리하기만 하면 됩니다.
- 서비스 메시는 어떤 서비스가 특정 데이터 요소를 제공하는지 알고 있으며, 소비자를 대신해 이를 결합(Orchestration)하여 전달함으로써 서비스 간 직접적인 의존성을 제거합니다.
중앙 집중형 스키마를 통한 데이터 민첩성 확보
- 바이아덕트는 단일화된 '중앙 스키마(Central Schema)'를 통해 여러 팀이 협업할 수 있는 구조를 제공합니다.
- 데이터베이스 스키마 변경이 여러 계층의 마이크로서비스 API에 수동으로 반영되어야 했던 과거와 달리, 중앙 스키마 업데이트만으로 클라이언트까지 변경 사항을 즉시 전파할 수 있습니다.
- 이는 대규모 SOA 환경에서 데이터 구조 변경에 소요되는 수 주간의 조율 과정을 획기적으로 단축합니다.
서버리스 기능을 활용한 서비스 단순화
- 클라이언트 요구에 맞춰 데이터를 가공하는 'BFF(Backend-for-Frontend)'나 상태 없는 변환 서비스들을 서버리스 클라우드 함수로 대체합니다.
- 바이아덕트 내에서 '파생 필드(Derived fields)' 계산 로직을 서버리스로 실행함으로써, 복잡한 서비스 계층을 줄이고 그래프 구조를 깔끔하게 유지합니다.
- 이를 통해 서비스의 개수와 복잡도를 낮추면서도 클라이언트에게 최적화된 데이터를 제공할 수 있습니다.
기술적 특징 및 관찰 가능성
- 바이아덕트는
graphql-java를 기반으로 구축되었으며, 세밀한 필드 선택 기능을 지원합니다. - 시스템 안정성을 위해 서킷 브레이킹(Short-circuiting), 소프트 의존성(Soft dependencies), 요청 내 캐싱(Intra-request cache) 등의 기술을 적용했습니다.
- 필드 단위의 데이터 관찰 가능성(Data observability)을 제공하여, 어떤 서비스가 어떤 데이터를 소비하는지 정확하게 파악하고 관리할 수 있습니다.
이처럼 거대해진 마이크로서비스 환경에서 운영 효율을 높이려면, 개별 서비스의 엔드포인트 관리에서 벗어나 데이터 중심의 추상화 계층을 구축하는 것이 중요합니다. 에어비앤비의 사례는 GraphQL을 단순한 API 게이트웨이를 넘어 시스템 전체의 의존성을 관리하는 서비스 메시로 확장함으로써 복잡성을 제어할 수 있음을 보여줍니다.