Skip to main content
공개 노트

Yandex YaFF: Protobuf를 버리지 않는 Zero-Copy 최적화

Views 5약 3분생성형 AI 활용
Summary

Yandex YaFF: Protobuf를 버리지 않는 Zero-Copy 최적화

대규모 백엔드에서 병목은 항상 DB나 네트워크에서만 생기지 않습니다. 데이터를 주고받을 때 반복되는 직렬화·역직렬화도 누적되면 큰 비용이 됩니다. Yandex가 공개한 YaFF는 Protobuf를 계속 사용하면서 이 비용을 줄이기 위한 오픈소스 zero-copy wire format입니다.

YaFF는 무엇인가

YaFF는 "Yet Another Flat Format"의 약자입니다. 핵심 목표는 데이터를 별도로 언패킹해 중간 객체를 많이 만들지 않고, 버퍼에 있는 데이터를 직접 읽게 하는 것입니다.1

중요한 점은 YaFF가 Protobuf를 대체하려는 도구가 아니라는 것입니다. .proto 파일은 계속 단일 진실 공급원으로 유지하고, 실제 데이터 표현만 읽기 빠른 형태로 바꿉니다.2 덕분에 기존 Protobuf 기반 모델과 워크플로를 유지하면서, 성능이 중요한 경로부터 점진적으로 적용할 수 있습니다.

무엇이 달라지나

일반적인 Protobuf 사용에서는 데이터를 읽기 위해 메시지를 파싱하고 객체 형태로 풀어내는 과정이 필요합니다. 대규모 서비스에서는 이 작업만으로도 전체 컴퓨팅 자원의 최대 10%를 차지할 수 있다고 Yandex는 설명합니다.1

YaFF는 이 지점에 초점을 맞춥니다. 데이터를 읽을 때 불필요한 복사와 중간 객체 생성을 줄여, 고부하 서비스에서 데이터 전송과 읽기 비용을 낮추는 방식입니다.1 FlatBuffers 같은 zero-copy 포맷과 문제의식은 비슷하지만, YaFF는 Protobuf 생태계와의 연결을 더 강하게 유지한다는 점이 다릅니다. Protobuf 의미론을 존중하고, proto와 비슷한 인터페이스로 읽게 하며, 필요하면 다시 Protobuf 메시지로 변환할 수 있습니다.2

YaFF는 Fixed, Flat, Sparse, Dynamic의 네 가지 레이아웃을 제공합니다.2 이 중 Flat Layout은 벤치마크에서 읽기 속도가 raw C++ struct의 1.2배 이내로 보고됐습니다.3 Yandex는 광고 추천 시스템에 YaFF를 단계적으로 적용해, 프로덕션 규모에서 CPU 사용량을 10~20% 줄였다고 밝혔습니다.3

언제 검토할 만한가

YaFF는 모든 서비스에 필요한 범용 최적화 도구는 아닙니다. 효과가 큰 경우는 비교적 명확합니다.

  • Protobuf 파싱 비용이 프로파일링에서 실제 병목으로 확인된다.

  • 같은 데이터를 여러 번 읽는 고부하 서버 경로가 있다.

  • C++ 런타임에서 데이터 접근 비용을 줄이는 것이 중요하다.

  • 기존 .proto 스키마를 유지한 채 성능 최적화를 하고 싶다.

광고 시스템, 은행, 마켓플레이스, 통신사, 클라우드 플랫폼 같은 고부하 서비스가 적용 대상으로 언급된 이유도 여기에 있습니다.1

반대로 트래픽이 작거나 병목이 네트워크, DB, 비즈니스 로직에 있다면 YaFF 도입 효과는 제한적일 수 있습니다. 먼저 프로파일링으로 역직렬화 비용을 확인하고, 전체 시스템이 아니라 hot path 하나에만 실험적으로 적용하는 접근이 안전합니다.

YaFF가 주는 실용적인 교훈은 분명합니다. 인프라를 더 늘리기 전에 데이터 표현 방식과 읽기 비용을 먼저 의심해볼 필요가 있습니다. 대규모 시스템에서는 "어떻게 저장하고 읽는가"가 곧 운영 비용이 될 수 있습니다.

1«Яндекс» открыл для всех технологию снижения нагрузки на серверы

2GitHub - yandex/yaff

3YaFF в опенсорсе: как и зачем мы сделали zero-copy представление для Protobuf

이 노트는 보도·비평·교육·연구 목적으로 작성되었습니다. 저작권 문의가 있으시면 에서 알려주세요.

틸노트는 사용자가 AI를 활용해 노트를 쉽게 작성하거나 편집할 수 있는 서비스입니다.

AI 스퀘어 단톡방에 함께해요

AI 활용과 틸노트 사용 팁을 나누는 오픈채팅방입니다. 입장 비밀번호는 tilnote입니다.

참여하기