에어비앤비 기술 블로그 - 미디엄 노트

에어비앤비 기술 블로그 - 미디엄

에어비앤비 엔지니어링은 에어비앤비 엔지니어링 팀에서 작성한 다양한 기술, 혁신 및 산업의 사례 연구에 대한 기사 포트폴리오입니다. 이 사이트는 소프트웨어 엔지니어링, 제품 개발, 확장성, 성능 등 다양한 측면에서 직면하는 접근 방식과 도전 과제에 대한 심층 분석 및 통찰을 독자들에게 제공합니다. 블로그는 또한 기술의 새로운 트렌드, 리더십 및 팀 협업에 대한 지혜를 공유하여 테크 회사 개선을 위해 추천합니다.

노트 스레드

하나를 넘어서는 확장: 에어비앤비가 다중 제품 환경을 위해 데이터 아키텍처를 발전시킨 방법

Airbnb의 Homes, Experiences, Services로의 확장은 오프라인 데이터 웨어하우스를 위한 데이터 모델링 프레임워크의 개편을 필요로 했습니다. 핵심 과제는 데이터 사일로와 기술 부채를 피하기 위해 일관성과 유연성 사이의 균형을 맞추는 것이었습니다. 그들은 중앙 집중식 원칙과 분산형 모델링 지침을 결합한 균형 잡힌 접근 방식을 선택했습니다. 세 가지 기본 원칙은 일관성을 보장했습니다. 하이브리드 모델 없음, 일관된 식별자 명명, 명확한 네임스페이스 구성입니다. 모델링 지침은 팀이 공유 속성 대 고유 속성, 향후 진화 및 다운스트림 소비자 기반으로 별도 또는 단일 모델 중에서 선택할 수 있도록 했습니다. Listings, Availability, Location, Guest interactions와 같은 제품별 도메인은 고유한 속성으로 인해 별도 모델을 선택했습니다. 반대로 Messaging, Payments, Customer Support와 같은 교차 도메인 개념은 통합된 보기를 위해 단일 모델의 이점을 얻었습니다. 오프라인 데이터 웨어하우스는 분석을 위해 원시 프로덕션 데이터를 표준화하는 중요한 번역 계층 역할을 합니다. 레거시 테이블 마이그레이션을 포함한 데이터 부채 관리는 신중한 커뮤니케이션과 검증을 필요로 하는 중요한 작업이었습니다. 이 프레임워크는 Airbnb의 진화하는 데이터 요구 사항에 대한 확장 가능하고 일관된 기반을 제공했습니다.
CdXz5zHNQW_hwlCx2ZBf5.jpeg

Sitar-agent: 안정적인 동적 구성 사이드카를 대규모로 구축하기

Airbnb는 수천 개의 서비스 인스턴스에 동적 구성 변경 사항을 안정적으로 전달하기 위해 경량 Kubernetes 사이드카인 sitar agent를 개발했습니다. 구성 전달은 개발자가 Git 또는 UI를 통해 값을 생성하거나 업데이트하는 것으로 시작되며, 이 값은 Sitar Service에 저장됩니다. 주기적으로 구성의 전체 상태가 압축된 스냅샷으로 패키징되어 AWS S3에 업로드됩니다. 서비스 pod가 시작되면 sitar agent는 먼저 이 S3 스냅샷을 마운트된 디스크로 다운로드하여 빠른 부트스트랩을 가능하게 합니다. 그런 다음 스냅샷 생성 이후의 변경 사항에 대해 Sitar Service와 동기화하고 메인 애플리케이션 컨테이너에 준비 상태를 알립니다. 시작 후 에이전트는 몇 초마다 Sitar Service를 폴링하여 업데이트를 지속적으로 확인합니다. 메인 애플리케이션 컨테이너는 값을 캐싱하고 파일 변경을 감지하는 Sitar 클라이언트 라이브러리를 사용하여 마운트된 디스크에서 구성을 읽습니다. 주요 설계 결정은 사소한 비용 절감보다 안정성, 운영 안전성 및 다국어 지원을 우선시하여 sitar agent를 메인 컨테이너에 통합하는 대신 별도의 사이드카 컨테이너로 유지하는 것이었습니다. 이 시스템은 에이전트가 Sitar Service를 폴링하는 풀 모델을 사용하며, 로드 감소를 위해 서버 측 캐시 및 토큰 기반 데이터베이스 액세스로 최적화되었습니다. 로컬 온디스크 키-값 저장소에 대해 Airbnb는 SQLite의 우수한 동시성, 성능 및 다국어 지원으로 인해 레거시 Sparkey 기반 구현 대신 SQLite를 선택했습니다. SQLite의 내장 Write-Ahead Logging은 쓰기 중 동시 읽기를 허용하며, RocksDB의 높은 성능이지만 더 복잡한 모델보다 더 간단한 운영 모델이 선호되었습니다. 이 견고한 사이드카 설계는 Airbnb의 방대한 서비스 플릿 전반에 걸쳐 중요한 구성이 빠르고 안정적으로 전달되도록 보장합니다.
CdXz5zHNQW_7QO75wfm4Y.jpeg

역사가 당신을 배신할 때, 지리를 빌려라

COVID-19 팬데믹은 역사적 패턴을 교란하여 전통적인 모델을 신뢰할 수 없게 만들었기 때문에 예측에 어려움을 안겨주었습니다. 수요 회복은 백신 출시 및 국경 재개방 시기가 다양하여 비동기적이고 지리적으로 불균등했습니다. 각 회복 시장의 현지 데이터를 기다리는 것은 장기간 맹목적으로 예측하는 것을 의미했을 것입니다. Airbnb의 해결책은 시간상으로만 뒤돌아보는 대신 지리적으로 옆을 살펴보는 것이었습니다. 그들은 회복이 순차적으로 전개되며 일부 통로가 다른 통로보다 먼저 변화를 경험한다는 것을 관찰했습니다. 주요 신호는 평균 예약 리드 타임이었는데, 이는 혼란 중에 압축되고 회복 중에 길어졌습니다. 유럽과 북미와 같은 지역 간의 이러한 리드 타임 변화 시점을 비교함으로써, 그들은 한 시장이 다른 시장의 경험을 바탕으로 재개방에 어떻게 반응할 가능성이 있는지 추론할 수 있었습니다. 이를 통해 초기 영향을 받은 통로의 사후 확률을 나중에 영향을 받은 통로에 대한 유익한 사전 확률로 사용할 수 있었습니다. 이러한 사전 확률 전파 메커니즘은 현지 데이터가 부족한 시장에서도 실시간 학습 및 예측을 가능하게 했습니다. 이 접근 방식은 세분화된 데이터와 계층적 베이지안 모델링 프레임워크를 갖춘 글로벌 입지를 요구했습니다. 이 방법론은 새로운 제품 기능 출시 또는 규제 변경의 영향을 예측하는 것과 같이 위기 외에도 적용 가능합니다. 이를 통해 초기 채택 시장에서 즉시 학습하여 아직 변화를 경험하지 않은 시장에 대한 예측에 정보를 제공할 수 있습니다.
CdXz5zHNQW_7QiYuy1bLj.png

통합 지식 그래프 인프라를 활용한 Airbnb의 아이덴티티 그래프 확장

Airbnb는 성능 향상을 위해 PaaS 그래프 데이터베이스에서 내부 지식 그래프 인프라 구축으로 전환했습니다. 신뢰와 안전에 필수적인 ID 그래프는 초기에 관계형 데이터베이스를 사용하다가 SaaS 그래프를 사용했지만 확장성과 지연 시간 문제를 겪었습니다. JanusGraph와 DynamoDB를 기반으로 구축된 새롭게 내부적으로 관리되는 인프라는 통합 플랫폼을 제공합니다. 맞춤형 트랜잭션 및 병렬 쿼리 실행과 같은 주요 최적화는 Airbnb의 성능 요구 사항을 충족하기 위해 구현되었습니다. 이 플랫폼은 스키마 강제 적용을 통해 멀티 테넌트 운영을 지원합니다. Gremlin 쿼리 재작성을 포함한 클라이언트 측 쿼리 최적화는 성능을 더욱 향상시켰습니다. 내부 그래프 인프라는 확장성을 크게 높이고 시스템 안정성을 개선했습니다. 다양한 쿼리 패턴에서 성능 향상이 이루어져 읽기 API 응답 시간이 단축되었습니다. 자체 관리 시스템은 사고 해결 시간을 단축합니다. 새 시스템은 이전 솔루션의 쓰기 QPS의 10배까지 확장되었습니다. 마이그레이션 결과 복잡한 쿼리의 P99 지연 시간이 상당히 감소했습니다. Airbnb의 지식 그래프는 이제 중요한 사용 사례를 지원합니다.
CdXz5zHNQW_2oSLFFmQhV.jpeg

Viaduct 1.0과 Airbnb 데이터 메쉬의 미래

Viaduct는 Airbnb의 데이터 중심 서비스 메시로, 이제 안정적인 API를 갖춘 커뮤니티 주도 프로젝트로 출시되었습니다. 다양한 데이터 소스에 액세스하고 상호 작용하기 위한 GraphQL 기반 인터페이스 역할을 합니다. Viaduct의 목표는 조직의 데이터에 대한 중앙 스키마를 제공하는 동시에 분산 개발을 가능하게 하는 것입니다. GraphQL Federation과 달리 Viaduct는 공유 멀티 테넌트 런타임에서 호스팅되는 모듈을 통해 개발을 분산합니다. 팀은 SDL과 리졸버를 사용하여 모듈을 생성하여 도메인 로직에 집중함으로써 기여합니다. Viaduct는 또한 페더레이션 아키텍처 내에서 서브그래프로 기능할 수 있습니다. 1.0 릴리스에는 새로운 기능, 주석을 통한 안정성 및 자동화된 릴리스가 포함됩니다. Airbnb는 GitHub를 사용하여 아키텍처 토론에 참여하며 커뮤니티 참여에 전념하고 있습니다. 이 기사는 Viaduct의 기능을 보여주는 GraphQLConf 2026에서 Airbnb 엔지니어들의 예정된 토론을 강조합니다. 여기에는 확률적 테스트, 모니터링, 샤딩 솔루션 및 LLM을 사용한 모의 데이터 생성이 포함됩니다. 이 발표는 데이터 계층을 통합하거나 프로젝트에 기여하려는 사람들의 참여를 장려합니다.
CdXz5zHNQW_TNP3iklsC1.jpeg

대규모에서 안정적으로 모니터링

핵심 문제는 관찰 가능성 시스템이 모니터링하는 인프라가 실패할 때 함께 실패할 수 있어 순환 종속성이 발생한다는 것입니다. Airbnb는 많은 조직과 마찬가지로 메트릭 파이프라인이 관찰하는 시스템과 동일한 시스템에 의존하는 문제를 겪었습니다. 특히 장애 발생 시 안정적인 모니터링을 보장하기 위해 이 종속성 체인을 끊어야 했습니다. 이를 해결하기 위해 Airbnb는 Cloud 팀이 관리하는 전용 Kubernetes 클러스터를 사용하여 컴퓨팅을 격리했습니다. 네트워킹을 재고하여 맞춤형 Envoy 기반 Layer 7 인그레스 레이어를 구축하여 텔레메트리를 위한 서비스 메쉬를 우회하고 우선순위 지정 및 격리를 보장했습니다. 메트릭은 고유하게 높은 볼륨을 가지므로 전용 네트워크 경로는 혼잡 및 잠재적 중단을 방지합니다. Airbnb는 또한 관찰 가능성 스택 자체를 모니터링하여 잠재적인 문제를 감지하는 메타 모니터링을 구현했습니다. 메타 모니터링의 중요한 부분은 모니터링 시스템의 실패를 감지하기 위한 "Dead Man's Switch" 메커니즘의 사용입니다. 이 전반적인 접근 방식은 관찰 가능성 설정의 침묵하는 실패로부터 보호하는 강력한 신호 체인을 만듭니다. 핵심은 모니터링을 프로덕션 시스템으로 취급하여 관찰하는 시스템보다 안정성이 뛰어나도록 보장하는 것입니다. 이는 신속한 사고 대응을 가능하게 하고 사용자 및 비즈니스 신뢰를 유지하는 데 중요합니다. 이러한 원칙은 보편적으로 적용되며 강력한 시스템 설계를 위해 실패 도메인을 격리하는 것을 포함합니다.
CdXz5zHNQW_IA1cJHBdof.jpeg

스키퍼: 에어비앤비의 임베디드 워크플로우 엔진 구축

Airbnb는 보험금 청구와 같은 복잡한 워크플로우의 견고한 실행이라는 과제에 직면했습니다. 외부 오케스트레이션 엔진과 같은 기존 솔루션은 운영 복잡성 및 공급업체 종속성과 같은 단점이 있었습니다. 이러한 문제를 해결하기 위해 Airbnb는 각 서비스 내에서 실행되는 내장형 워크플로우 엔진인 Skipper를 구축했습니다. Skipper는 간결성, 단일 실패 지점 없음, 기존 데이터베이스 사용을 우선시합니다. Skipper 설계의 핵심은 개별 작업을 캡슐화하는 로직과 액션을 정의하는 워크플로우를 포함합니다. 내구성은 액션 결과를 데이터베이스에 체크포인트하는 리플레이 메커니즘을 통해 달성됩니다. 리플레이를 통해 워크플로우는 중단 후 중단된 지점에서 다시 시작할 수 있습니다. 상태 필드는 효율성을 위해 지속되며, 시그널을 사용하여 워크플로우의 상태를 업데이트합니다. Skipper를 사용한 워크플로우 테스트는 설정할 큐가 없거나 모의할 인프라가 없기 때문에 단순화됩니다. 이 접근 방식은 종속성을 추가하거나 성능을 저하시키지 않고 견고한 실행을 보장합니다.
CdXz5zHNQW_p4tursIQ0n.png

에어비앤비에서 내결함성 메트릭 저장 시스템 구축

에어비앤비는 초당 5천만 개의 샘플과 2페타바이트의 시계열 데이터를 처리하기 위해 자체 내부 스토리지 시스템을 개발했습니다. 이러한 변화는 진화하는 제품과 인프라 전반에 걸친 광범위한 코드 계측으로 인해 생성되는 엄청난 양의 데이터 때문에 필요했습니다. 주요 엔지니어링 과제는 이 방대한 데이터 세트를 고성능으로 지속적으로 저장하고 제공하는 것이었습니다. 이러한 규모를 관리하기 위해 에어비앤비는 안정적인 그룹화 및 속성을 위해 서비스 또는 프로세스별로 테넌트를 격리하는 다중 테넌트 아키텍처를 채택했습니다. 테넌트 워크로드를 격리하기 위해 셔플 샤딩을 구현하여 테넌트가 노드의 하위 집합에만 쓰고 쿼리되도록 함으로써 내결함성을 향상시켰습니다. 특히 테넌트 온보딩 및 구성 관리와 같은 운영 복잡성은 온보딩을 자동화하고 구성 업데이트를 단순화하는 통합 제어 평면으로 해결되었습니다. 시스템의 주요 요구 사항은 초당 5천만 개 이상의 샘플을 처리하고, 수많은 대시보드 및 경고를 지원하며, 낮은 쿼리 실행 시간을 유지하는 것이었습니다. 섀도우 클러스터를 사용한 초기 검증에서는 안정성 문제, 압축 지연, 특히 대규모 데이터 페이로드에서 느린 쿼리 성능이 드러났습니다. 이러한 문제를 해결하기 위한 첫 단계는 단일 클러스터의 안정성을 보장하는 것이었으며, 벤치마킹, 가드레일, 쿼리 경로 격리를 통해 쓰기, 읽기 및 압축을 안정화하는 데 중점을 두었습니다. 이 시스템은 3개 영역에 배포된 영역 인식 상태 저장 구성 요소로 내결함성을 갖추었습니다. 효과적인 플릿 관리 및 시스템 보호를 위해 복제본당 제한 및 테넌트 수준 제어가 구현되었습니다. 이후 장애의 폭발 반경을 줄이고 유연성을 향상시키기 위해 다중 클러스터 아키텍처가 채택되었습니다. 그러나 이 다중 클러스터 접근 방식은 메트릭 검색, 쿼리 및 운영 오버헤드에서 복잡성을 야기했습니다. 이는 테넌트-클러스터 매핑을 위한 도구와 Kubernetes 연산자를 사용한 자동화된 배포 전략으로 완화되었습니다. 사용자 정의 개선 사항이 적용된 Promxy의 도입은 클러스터 간 쿼리 및 경고를 용이하게 했습니다. 이 여정에서 얻은 주요 교훈은 클러스터 간 쿼리의 상당한 비용과 자동화 및 표준화된 배포를 통해 달성되는 배포 일관성의 중요성입니다. 철학은 중요한 고유한 "애완동물"이 아닌 "가축"과 유사하게 클러스터를 일회용 리소스로 취급하는 방향으로 발전하여 더 쉬운 확장 및 유지 관리가 가능해졌습니다. 궁극적으로 이 플랫폼을 구축하려면 아키텍처 혁신, 운영 엄격성, 기대치 관리의 문화적 변화가 조화를 이루어야 했습니다.
CdXz5zHNQW_oUKNz5mUz5.jpeg

개인 정보 보호 우선 연결: 에어비앤비에서의 소셜 경험 강화

Airbnb는 Experiences를 통해 커뮤니티 연결을 강조하며 더욱 소셜한 플랫폼으로 진화하고 있습니다. 플랫폼은 내부 사용자 데이터와 공개 프로필을 구분하여 사용자 개인 정보 보호를 우선시합니다. 사용자는 자신의 프로필 공개 범위를 제어하여 Experiences에서 어떤 정보를 공유할지 선택할 수 있습니다. 이를 위해 Airbnb는 고유한 사용자 ID와 프로필 ID를 사용하여 다양한 맥락에서 유연한 개인 정보 설정을 가능하게 합니다. 이를 통해 사용자는 호스트 및 게스트 프로필과 같이 필요에 따라 분리된 여러 프로필을 가질 수 있습니다. Airbnb는 Himeji라는 권한 시스템을 사용하여 최소 권한 액세스와 강력한 데이터 보안을 보장합니다. 구현 과정에는 자동 감사, 팀 협업, AI 지원 리팩토링이 포함되어 올바른 식별자 사용을 보장했습니다. 타입 안전성과 엄격한 테스트는 마이그레이션 중 데이터 무결성을 유지하는 데 중요했습니다. 궁극적으로 Airbnb의 개인 정보 보호 원칙은 소셜 기능과 개인 정보에 대한 사용자 제어 간의 균형을 맞추는 것을 목표로 합니다. 이 접근 방식은 Airbnb 커뮤니티 내에서 연결과 개인 정보 보호를 모두 촉진하도록 설계되었습니다. 이 시스템은 사용자가 다른 사람들과 자신 있게 연결하고 공유할 수 있도록 하기 위해 마련되었습니다.
CdXz5zHNQW_og2U0LeKfU.png

OpenTelemetry와 vmagent를 활용한 대용량 메트릭 파이프라인 구축

이 마이그레이션은 대규모 메트릭 파이프라인을 StatsD에서 OpenTelemetry 및 Prometheus로 이전하는 것을 포함하며, 메트릭 수집을 선행하는 것을 목표로 했습니다. 초기에는 내부 서비스에 대한 OpenTelemetry 프로토콜(OTLP) 계측과 OSS 워크로드에 대한 Prometheus 계측에 중점을 두었으며, StatsD는 대체 수단으로 사용되었습니다. 공유 메트릭 라이브러리를 활용한 이중 쓰기 접근 방식은 OTLP로의 전환을 용이하게 했습니다. 그 결과 성능이 향상되었고 히스토그램과 같은 Prometheus 기능에 액세스할 수 있게 되었습니다. 그러나 높은 카디널리티 메트릭으로 인해 성능 저하가 발생했으며, 이는 특정 서비스에 대해 델타 시간성을 사용하여 해결되었습니다. 비용을 절감하고 변환을 가능하게 하기 위해 vmagent를 사용한 Prometheus 기반 집계 파이프라인이 구현되었습니다. Prometheus의 rate() 함수가 재설정 이벤트로 인해 특정 카운터를 과소 집계하는 문제가 발생했습니다. 이 문제를 해결하기 위해 집계 중에 제로 주입을 구현했으며, 이는 사용자에게 투명하게 이루어졌습니다. 이를 통해 카운터 문제를 해결하고 데이터의 정확한 표현을 보장했습니다. 마지막으로 팀은 이러한 변경 사항을 구현함으로써 미래 지향적인 메트릭 인프라를 구축했습니다.
CdXz5zHNQW_RLxATemjkf.jpeg

에어비앤비로의 여정 — 조나단 우다드

전직 프로 미식축구 선수였던 조나단 우다드는 코딩에 대한 열정을 키운 후 소프트웨어 엔지니어링으로 경력을 전환했습니다. 그는 Airbnb의 Connect 엔지니어링 견습 프로그램에 참여하여 배우고 성장할 수 있는 새로운 환경을 찾았습니다. 이 견습 프로그램은 그의 전환에 중요한 구조화된 학습, 팀 협업, 멘토십을 제공했습니다. 프로그램 기간 동안 그는 처음에는 고려하지 않았던 분야인 백엔드 엔지니어링을 탐구했습니다. 그는 뛰어난 성과를 거두어 결국 Airbnb의 보안 개발 엔지니어링 팀에서 정규직을 얻었습니다. 그의 업무는 신원 및 접근 관리와 취약성 관리에 초점을 맞추고 있으며, LLM 통합과 관련된 새로운 과제에 직면하고 있습니다. 우다드는 미식축구와 보안 엔지니어링 사이에, 특히 압박감이 심한 상황과 팀워크 측면에서 유사점을 발견합니다. 그는 자신의 성공을 팀과 Airbnb의 협업 문화 덕분이라고 생각합니다. 그는 비전통적인 기술 경력을 장려하기 위해 자신의 경험을 공유합니다. 현재 그는 졸업생 호스트로서 새로운 견습생들을 지원할 수 있습니다. 그는 자신의 경험을 바탕으로 신속한 의사 결정을 내리면서 이 일이 흥미롭다고 생각합니다.
CdXz5zHNQW_IrlwC4WsW0.png

코로나19가 우리의 예측 모델에 미친 영향 (그리고 다음 충격을 대비하기 위해 우리가 구축한 것)

에어비앤비의 재무 계획에 필수적인 예측 모델은 코로나19 팬데믹 기간 동안 심각한 혼란을 겪었습니다. 핵심적인 문제는 역사적으로 안정적이었던 예약과 여행 날짜 간의 관계가 매우 불안정해졌다는 것이었습니다. 이를 해결하기 위해 에어비앤비는 예측을 총 예약액과 리드 타임 구성 요소로 분리했습니다. 그들은 예약 리드 타임과 관련된 변화하는 비율을 처리하도록 특별히 설계된 B-DARMA 모델을 개발했습니다. 놀랍게도 총 예약액이 회복된 후에도 리드 타임 구성은 지속적인 변화를 보였고, 팬데믹 이전 패턴으로 돌아가지 않았습니다. 에어비앤비는 이러한 장기적인 변화를 모니터링하고 정량화하기 위해 분포 발산 지표를 사용했으며, 이는 모델 상태 진단에 필수적인 도구가 되었습니다. 이러한 지속적인 변화는 수익 예측, 현금 흐름 및 운영 결정에 직접적인 영향을 미쳤으며, 정확한 분포 모델링의 중요성을 강조했습니다. 예측을 개선하기 위해 그들은 구조적 단절로부터 학습하는 능력을 개발하여 모델이 변화에 적응할 수 있도록 했습니다. 이러한 구성 요소를 분리하고 분석함으로써 에어비앤비는 구조적 변화를 감지하고 적응할 수 있는 더욱 탄력적인 예측 모델을 만들었습니다.
CdXz5zHNQW_gEWW6pSp6G.jpeg

판매자에서 선구자로: Airbnb가 얻은 관측 가능성 소유권에 대한 힘겨운 교훈

에어비앤비는 관찰 가능성 플랫폼을 벤더 관리 서비스에서 오픈 소스 기술 기반의 자체 솔루션으로 이전했습니다. 주요 동기는 비용 절감과 데이터 및 워크플로우에 대한 더 큰 제어 권한을 확보하기 위함이었습니다. 초기 이전 전략은 복잡한 서비스를 먼저 처리하는 것이었지만, 이는 비효율적인 것으로 드러났습니다. 수정된 전략은 실행 가능성을 증명하고 견고한 기반을 구축하기 위해 더 간단한 서비스를 이전하는 데 집중했습니다. 새로운 접근 방식은 너무 많은 변경 사항으로 사용자를 압도하지 않기 위해 즉각적인 쿼리 개선보다 완전한 이전을 우선시했습니다. 기존 대시보드와 알림을 새로운 시스템에 매핑하기 위한 번역 도구를 구축했습니다. 직접적인 번역 대신 쿼리 의도를 이전하고, 잘못된 패턴을 수정하는 데 집중했습니다. 메타데이터 엔진을 구현하여 새로운 시스템에서 정확한 메트릭 유형을 보장했습니다. 널리 이해되는 쿼리 언어인 PromQL을 채택하고, 쿼리 생성에 도움이 되는 AI 기반 도구를 통합했습니다. 또한, 이번 이전으로 구식 알림 프레임워크를 교체할 수 있었습니다. 이러한 포괄적인 개편은 우수한 도구, 일관된 데이터, 그리고 현저히 개선된 개발자 경험으로 이어졌습니다.
CdXz5zHNQW_LyZMbgTKXx.jpeg

사용자들이 여행을 탐험할 수 있도록 여행지를 추천합니다.

에어비앤비 팀은 여행 계획 초기 단계에서 사용자를 돕기 위해 목적지 추천 모델을 개발했습니다. 이 모델은 아직 목적지나 여행 날짜를 결정하지 못한 사용자의 어려움을 해결합니다. 이 모델은 검색 및 예약과 같은 에어비앤비 플랫폼에서의 사용자 활동을 분석하여 사용자의 목적지 의도를 예측합니다. 주요 혁신은 다양한 신호를 통합하고, 활성 및 비활성 사용자 행동의 균형을 맞추며, 위치 정보를 통합하는 것입니다. 이 모델은 변환기 아키텍처를 사용하여 사용자 활동을 토큰으로 처리하여 사용자 선호도를 이해합니다. 훈련 데이터는 예약에 가까운 활성 사용자와 초기 계획 단계의 비활성 사용자를 모두 수용하도록 특별히 설계되었습니다. 다중 작업 학습은 지역 수준 및 도시 수준의 목적지를 모두 예측하여 위치 이해도를 향상시키는 데 사용됩니다. 이 모델은 자동 제안 및 중단된 검색 이메일 알림을 제공하여 사용자가 잠재적인 목적지를 발견하도록 돕습니다. 자동 제안에서는 도시 추천을 제공하여 특히 비영어권 지역에서 예약 증가를 이끌어냅니다. 중단된 검색 이메일은 추천 지역의 숙소를 특징으로 하여 예약 완료를 장려합니다. 탐색 단계에 초점을 맞춰 이 모델은 영감을 주고, 결정 마찰을 줄이며, 사용자 참여를 향상시키는 것을 목표로 합니다. 이 프레임워크는 여행 시간 및 가격 선호도를 포함하여 전체 여행 계획 경험 전반에 걸쳐 개인화를 위한 기반을 제공합니다.
CdXz5zHNQW_p9tvPsoHId.jpeg

문화 문제는 아니었다: 에어비앤비에서 알림 개발 수준 향상시키기

에어비앤비의 "코드형 관측성(OaC)"은 소프트웨어 개발 방식을 따라 코드 형태로 알림, 대시보드, SLO(서비스 수준 목표)를 정의합니다. 이 프로세스는 엄격한 알림 정의를 보장하지만, 실제 운영 환경에서 알림 동작을 검증하는 것은 큰 과제였습니다. 이 격차로 인해 과도한 알림 발생 또는 사고 누락이 발생하여 개발자 워크플로우를 방해했습니다. 이를 해결하기 위해 에어비앤비는 코드 제출 전에 알림 동작을 미리 보고 검증할 수 있는 접근 가능한 피드백 루프를 구축했습니다. 이 혁신은 개발 주기를 몇 주에서 몇 분으로 획기적으로 단축시켰습니다. 에어비앤비의 OaC 목표는 제품 팀이 플랫폼 팀으로부터 즉시 사용 가능한 모니터링을 받아 "제로 터치" 방식으로 도입하는 것입니다. 그러나 30만 개의 알림을 관리하는 것은 OaC 변경 사항을 반복하고 검증하는 데 비용과 위험을 초래했습니다. 기존의 코드 리뷰와 단위 테스트는 실제 데이터로 알림이 어떻게 동작할지 예측할 수 없었으며, 이로 인해 몇 주가 걸리는 검증 프로세스가 필요했습니다. 에어비앤비는 로컬 우선 개발, 변경 보고서, 과거 데이터에 대한 대량 백테스팅에 초점을 맞춰 OaC 플랫폼을 재구축했습니다. 이를 통해 엔지니어는 알림 템플릿을 빠르고 효율적으로 검증할 수 있었습니다. 주요 교훈으로는 참신함보다 호환성을 우선시하고, 강력한 안전 장치를 구현하며, 향상된 개발자 경험을 위해 전체 개발 표면 영역을 소유하는 것이 있었습니다. 그 결과 30만 개의 알림을 Prometheus로 성공적으로 마이그레이션하고, 개발 주기를 단축했으며, 알림 노이즈를 크게 줄여 알림 위생 문화를 조성하는 성과를 거두었습니다.
CdXz5zHNQW_p1JPMKjgtj.jpeg

학술 출판물 & 에어비앤비 기술: 2025년 연말 결산

2025년 에어비앤비는 여행 및 생활 플랫폼 개선에 초점을 맞춰 AI 및 머신러닝 연구를 크게 발전시켰습니다. KDD 및 CIKM과 같은 주요 머신러닝 컨퍼런스에 적극적으로 참여하는 한편, NLP 및 최적화 중심 행사에서도 입지를 넓혔습니다. 연구원들은 논문을 발표하고, 연구 결과를 발표하며, 협력을 증진하여 학계에 기여했습니다. KDD는 인터리빙, 반사실적 평가, 청중 확장에 대한 논문을 통해 검색 및 랭킹에 집중했습니다. CIKM에서는 추천, 지도 최적화, 숙소 랭킹 방법의 발전을 선보였습니다. EMNLP에서 에어비앤비는 에이전트 인 더 루프(agent-in-the-loop) 및 요약 기술을 포함한 LLM 기반 고객 지원에 대한 연구를 발표했습니다. COLING에서는 고객 지원을 위한 지식 표현에 대한 논문을 처음으로 발표했습니다. 에어비앤비는 또한 MIT CODE에서 장기 랭킹 역학 및 데이터 기반 의사 결정에 대한 연구를 발표했습니다. 그들의 결과는 혁신적인 AI 애플리케이션을 통해 검색, 추천, 고객 경험에서 진전을 보여주었습니다. 에어비앤비의 연구는 신진 연구자를 멘토링하고 오픈 소스 기술 탐구를 장려하는 것을 포함했습니다.
CdXz5zHNQW_o6nHxfcfpR.jpeg

대규모 동적 구성 변경 사항 보호

에어비앤비의 Sitar 플랫폼은 서비스 재시작을 피하고 신속한 대응을 가능하게 하기 위해 동적 구성 변경을 관리합니다. 이 플랫폼은 네 가지 핵심 요소로 구축되었습니다: 개발자용 레이어, 제어 평면, 데이터 평면, 그리고 클라이언트 구성 요소입니다. 개발자 레이어는 Git 기반 워크플로우를 사용하여 버전 관리 및 협업을 통해 구성을 생성하고 검토하는 것을 용이하게 합니다. 제어 평면은 변경 롤아웃을 조율하며, 스키마 유효성 검사, 권한 부여, 그리고 단계적 릴리스를 보장합니다. 데이터 평면은 서비스 에이전트에 대한 구성 업데이트의 확장 가능한 저장 및 안정적인 배포를 제공합니다. 각 서비스의 에이전트는 구성을 가져와 로컬에 캐싱하여 빠른 접근과 복원력을 확보합니다. 주요 설계 선택 사항으로는 Git 기반 워크플로우, 단계적 롤아웃, 그리고 제어 평면과 데이터 평면의 분리가 있습니다. 이 아키텍처는 더 안전하고 예측 가능한 롤아웃을 가능하게 하여 팀이 구성을 관리하는 데 더 많은 유연성을 제공합니다. 사고 완화는 더 빠르며, 문제 위치를 파악하고 해결하기 위한 통합 관찰 도구가 있습니다. 이 플랫폼은 개발자 경험을 간소화하고 안전성, 관찰 가능성, 그리고 사용성을 지속적으로 개선합니다. 에어비앤비는 Sitar를 지속적으로 개선하고 있으며, 롤아웃 전략, 테스트, 그리고 사고 대응에 중점을 두고 있습니다. 이 작업은 강력하고 적응 가능하며 개발자 친화적인 인프라를 유지하는 데 매우 중요합니다.
CdXz5zHNQW_A3Qsjaew7k.png

나의 에어비앤비 여정 — 안나 술키나

에어비앤비의 수석 엔지니어링 디렉터인 안나 술키나는 기술 업계에서의 여정을 공유합니다. 그녀는 오빠와 우크라이나의 초기 컴퓨팅 시대에 영감을 받아 프로그래밍을 공부하게 되었습니다. 미국으로 이민 온 후, 그녀는 언어 장벽에 직면했는데, 이는 처음에는 프로그래밍 자체보다 더 어려웠습니다. 그녀의 경력은 하드웨어 진단에서 프론트엔드, 그리고 결국 인프라로 발전했으며, 리더십 책임도 증가했습니다. 그녀는 중요한 사건들이 있었던 트위터에서 근무하며 복잡한 시스템에서 불가피한 실패를 대비한 설계를 하는 것의 중요성을 배웠습니다. 안나는 또한 트위터에서 GraphQL 채택을 주도하여 생산성 향상을 이끌었습니다. 그녀는 제품에 대한 애정과 개발자 경험을 개선할 기회를 보고 에어비앤비에 합류했습니다. 에어비앤비에서 그녀는 엔지니어를 위한 안정적인 플랫폼 구축과 강력한 문화를 조성하는 데 집중하고 있습니다. 그녀는 회사의 기존 시스템과 혁신적인 문제 해결 능력의 균형, 그리고 원격 근무의 가능성을 강조합니다. 마지막으로, 안나는 자신의 경력, 장거리 트레일 러닝, 전략, 그리고 팀워크 사이의 유사점을 제시합니다.
CdXz5zHNQW_IkUUz4P0hR.jpeg

나의 에어비앤비 여정: 피터 콜스

피터 콜스(Peter Coles)는 에어비앤비의 정책 담당 최고 경제학자이자 데이터 과학 책임자로서, 밀워키의 공립학교 교육을 거쳐 스탠퍼드 대학교에서 경제학 박사 학위를 취득했습니다. 어린 시절부터 시장에 대한 그의 깊은 관심은 어린 시절 바위 판매 사업으로 시작되었습니다. 학업 경쟁에 열정적으로 참여했던 그는 프린스턴 대학교에서 수학을 전공한 후 경제학을 공부했습니다. 스탠퍼드 대학교에서의 대학원 과정은 노벨상 수상자인 존 레빈(Jon Levin)의 영향을 받아 연구에서 단순화를 강조했습니다. 에어비앤비에 합류하기 전, 콜스는 하버드 경영대학원에서 시장 설계 선구자인 알 로스(Al Roth)와 함께 강의했습니다. 그곳에서 그는 매칭 메커니즘을 연구하고 질로우(Zillow) 및 크레이그리스트(Craigslist)와 같은 회사에 대한 사례 연구를 작성했습니다. 기술 산업으로 전환한 그는 이베이(eBay)에 합류하여 시장 설계 및 데이터 과학 이니셔티브에 집중했습니다. 에어비앤비에서는 단기 임대 및 도시에 미치는 영향을 분석하기 위해 경제학 팀을 설립했습니다. 또한 조직의 광범위한 질문에 답하고 포렌식 스타일의 조사를 수행하기 위해 중앙 전략 및 통찰(CSI)을 공동 설립했습니다. 현재 그는 정책 고려 사항을 모델링하고 에어비앤비의 사회적 영향을 평가하며 학술 연구원들과의 협력을 촉진하는 노력을 주도하고 있습니다.
CdXz5zHNQW_AKkOKvPMHS.jpeg

현지인으로 지불하기

에어비앤비, 14개월 만에 20개 이상의 현지 결제 수단 도입으로 접근성 향상 및 결제 과정 간소화 에어비앤비는 지난 14개월 동안 전 세계적으로 20개 이상의 현지 맞춤형 결제 수단을 성공적으로 출시하여 게스트의 접근성을 높이고 결제 과정을 간소화했습니다. 이러한 현지 결제 수단(LPM)에는 디지털 지갑, 은행 송금, 현지 결제 시스템 등이 포함되며, 기존의 카드 결제를 넘어선 다양한 옵션을 제공합니다. LPM 제공은 전환율을 높이고, 신용카드 사용률이 낮은 신규 시장을 개척하며, 은행 계좌가 없는 사람들에게도 결제 기회를 제공합니다. 에어비앤비는 광범위한 조사를 통해 300개 이상의 결제 옵션을 파악하고, 구조화된 프레임워크를 사용하여 통합할 최적의 결제 수단을 선정했습니다. 에어비앤비의 현대화된 결제 플랫폼은 도메인 주도 아키텍처를 기반으로 구축되어 유연성과 확장성을 위해 결제 로직을 분리했습니다. 'Payments LTA'로 알려진 이 플랫폼 재구축 노력은 모놀리식 시스템에서 서비스 지향 시스템으로 전환하여 시장 출시 시간을 단축했습니다. 서드파티 제공업체 통합에 중요한 역할을 하는 처리 하위 도메인은 커넥터 및 플러그인 기반 아키텍처를 채택했습니다. 이러한 전략과 다단계 거래(MST) 도입은 새로운 PSP의 통합 시간을 크게 단축하고 복잡한 결제 흐름을 표준화했습니다. LPM 통합은 다양한 API와 외부 앱과의 상호 작용 필요성으로 인해 어려움이 있었습니다. 에어비앤비는 엔드투엔드 행동을 분석하고 이를 리디렉션, 비동기, 직접의 세 가지 기본 흐름으로 표준화했습니다. 이 통합 프레임워크는 상당한 코드 재사용성을 가능하게 하고 새로운 결제 수단 통합에 대한 엔지니어링 노력을 줄였습니다. 비동기 결제 오케스트레이션은 외부 사용자 행동 및 성공적인 결제에 대한 웹훅 알림을 관리하도록 재설계되었습니다. 중앙 YAML 구성을 활용하는 구성 기반 접근 방식은 로직을 통합하고 자동화된 코드 생성을 가능하게 하여 결제 수단 통합을 간소화했습니다. 이를 통해 통합이 대부분 선언적으로 이루어져 출시 시간을 몇 달에서 몇 주로 단축했습니다. 결제 위젯은 백엔드 구성에 따라 UI 및 유효성 검사 규칙을 동적으로 렌더링하여 맞춤형 결제 경험을 보장합니다. 자체 PSP 에뮬레이터를 통한 향상된 테스트 용이성은 개발자가 불안정한 외부 샌드박스에 의존하지 않고도 결제 시나리오를 철저히 테스트할 수 있도록 했습니다.
CdXz5zHNQW_E1JU738XpJ.jpeg

에어비앤비의 Key-Value 스토어에서 정적 속도 제한에서 적응형 트래픽 관리로

에어비앤비의 키-값 저장소인 Mussel은 원래 단일 클라이언트가 시스템을 압도하는 것을 방지하기 위해 간단한 QPS 속도 제한을 사용했습니다. 트래픽이 증가하고 더 복잡해짐에 따라, 이 방식은 비용 변동과 트래픽 왜곡으로 인해 불충분한 것으로 드러났습니다. 이를 해결하기 위해 Mussel은 다층 품질 보증 (QoS) 시스템을 구현하도록 발전했습니다. 첫 번째 계층인 자원 인식 속도 제어 (RARC)는 실제 백엔드 비용을 반영하여 행, 바이트, 지연 시간을 고려한 요청 단위 (RU)로 요청을 청구합니다. 이 시스템은 각 호출자에 대해 정적 RU 할당량을 가진 토큰 버킷을 사용합니다. 두 번째 계층인 부하 분산은 용량이 부족하거나 핫스팟이 발생할 때 실시간 보호 기능을 제공합니다. 이는 트래픽 중요도, 시스템 스트레스를 나타내는 지연 시간 비율, 그리고 CoDel에서 영감을 얻은 큐잉 정책을 결합합니다. 이를 통해 높은 우선순위 트래픽은 응답성을 유지하고, 지연 시간이 증가할 때 다른 트래픽을 점진적으로 줄일 수 있습니다. 세 번째 계층인 핫키 감지 및 DDoS 방어는 특정 데이터를 대상으로 하는 동일한 요청의 급증을 식별하고 완화합니다. 이는 실시간 감지를 위해 메모리 내 top-k 카운터를 사용하고, 디스패처 포드에서 로컬 캐싱을 사용하며, 중복된 핫키 조회를 위해 스토리지 계층에 하나의 요청만 보내도록 요청 병합을 사용합니다. 이러한 계층화된 제어는 Mussel이 트래픽 급증을 처리하고 안정성을 유지하는 능력을 크게 향상시켰습니다. 주요 내용은 개념 검증을 위한 초기 영향의 가치, 확장성을 위한 로컬 제어 루프 선호, 그리고 서로 다른 시간 척도로 작동하는 메커니즘 사용을 포함합니다. 이 정교한 QoS 스택은 Mussel이 극심하고 변동적인 트래픽 조건에서도 빠르고 안정적으로 유지되도록 보장합니다.
CdXz5zHNQW_D4i1N1yN56.jpeg

Airbnb에서 차세대 키-값 저장소 구축하기

Airbnb는 진화하는 실시간 데이터 요구 사항을 충족하기 위해 핵심 키-값 저장소인 Mussel을 V1에서 V2로 재설계했습니다. Mussel V2는 클라우드 네이티브 NewSQL 백엔드를 사용하여 V1의 운영 복잡성, 용량 제한 및 일관성 문제를 해결합니다. 주요 개선 사항으로는 자동화된 Kubernetes 배포, 더 나은 용량 관리를 위한 동적 범위 샤딩, 유연한 일관성 옵션 등이 있습니다. 새로운 아키텍처는 API 호출을 변환하는 상태 비저장 Dispatcher 서비스와 내구성을 위한 Kafka를 사용하는 이벤트 기반 쓰기 경로를 특징으로 합니다. 대량 로딩 기능은 상태 비저장 컨트롤러와 고처리량을 위한 상태 저장 워커 플릿으로 강화되어 유지됩니다. 자동화된 Time-To-Live(TTL) 만료는 이제 토폴로지 인식 기능을 갖추고 대규모에서 더 효율적입니다. V1에서 V2로의 마이그레이션은 다운타임 및 데이터 손실 없이 제로 다운타임 및 데이터 손실을 보장하기 위해 이중 쓰기 및 섀도우 읽기를 사용하는 복잡한 블루/그린 전략을 사용했습니다. 얻은 중요한 교훈은 일관성 복잡성을 관리하는 것과 범위 기반 파티셔닝을 위한 사전 분할의 중요성입니다. Kafka는 마이그레이션 과정에서 최종 일관성을 유지하는 데 중요한 역할을 했습니다. Mussel V2는 대량 수집, 고속 쓰기 및 저지연 읽기를 단일 플랫폼에서 성공적으로 통합하여 엔지니어링 팀을 위한 데이터 인프라를 단순화합니다.
CdXz5zHNQW_xJf1iLzWz1.jpeg

5년 후의 Viaduct: 데이터 중심 서비스 메시 현대화

Viaduct, Airbnb의 데이터 중심 서비스 메시, 오픈소스로 공개 Airbnb의 데이터 중심 서비스 메시인 Viaduct가 이제 오픈소스로 공개되었습니다. 지난 5년 동안 Airbnb에서 Viaduct의 사용량은 크게 증가하여 트래픽은 8배, 팀 수는 두 배로 늘었습니다. Viaduct는 세 가지 핵심 원칙, 즉 중앙 스키마, 호스팅된 비즈니스 로직, 그리고 재진입성을 기반으로 계속 발전해 왔습니다. 중앙 스키마는 회사 전체의 데이터를 통합하여 Viaduct를 핵심 데이터 메시로 만들었습니다. 서버리스 플랫폼을 통해 Viaduct 내에서 직접 비즈니스 로직을 호스팅함으로써 개발자의 운영을 간소화했습니다. 재진입성은 호스팅된 로직이 GraphQL 프래그먼트 및 쿼리를 통해 다른 로직과 결합될 수 있도록 하여 모듈성을 유지합니다. 최근의 대대적인 개편인 "Viaduct Modern"은 개발자가 사용하는 Tenant API를 node 및 field resolver의 두 가지 resolver 유형으로 단순화하여 과거의 복잡성을 해결했습니다. 이 현대화는 또한 tenant 모듈성을 도입하여 "tenant 모듈"을 단일 팀이 소유하고 GraphQL을 통해 구성되는 스키마 및 코드의 단위로 공식화했습니다. 프레임워크 모듈성 또한 개선되어 GraphQL 실행 엔진, tenant API, 그리고 호스팅된 코드 간의 추상화 경계가 더욱 강화되었습니다. 새로운 엔진 API는 동적으로 형식이 지정되는 반면, tenant API는 정적으로 형식이 지정되어 독립적인 진화를 가능하게 합니다. Viaduct는 Classic 및 Modern Tenant API를 새로운 엔진에서 동시에 실행하여 점진적인 마이그레이션을 제공합니다. 다른 개선 사항으로는 향상된 관찰 가능성, 스키마 우선 개발 및 직접 바이트코드 생성을 통한 더 빠른 빌드 시간, 그리고 Kubernetes 스케일링 및 블래스트 반경 완화를 위한 디스패처가 있습니다. Airbnb는 커뮤니티 기여를 통해 이점을 얻기 위해 Viaduct를 오픈소스로 공개하며, 대규모 및 초기 GraphQL 프로젝트 모두에 가치가 있을 것이라고 믿습니다. Modern API는 현재 알파 단계에 있지만, 새로운 엔진은 전체 프로덕션 환경에서 사용되고 있습니다.
CdXz5zHNQW_Ry0cTKX3TG.jpeg

데이터 중심 서비스 메시를 활용한 서비스 지향 아키텍처의 관리

에어비앤비는 마이크로서비스 기반 아키텍처의 모듈성을 개선하기 위해 데이터 중심 서비스 메시인 Viaduct를 개발했습니다. 기존 서비스 메시는 절차 중심인 반면, Viaduct는 GraphQL 스키마를 핵심 구성 원리로 사용하여 데이터에 집중합니다. 이 스키마는 타입, 쿼리, 뮤테이션을 정의하여 서비스 종속성을 소비자로부터 추상화합니다. Viaduct를 통해 데이터 소비자는 직접적인 종속성 없이 여러 마이크로서비스의 정보에 접근할 수 있어 아키텍처를 단순화합니다. 중앙 스키마는 API 및 데이터베이스 스키마 변경을 더 쉽게 만들어 데이터 민첩성을 향상시키고 조정 노력을 줄입니다. Viaduct는 파생 데이터를 위해 서버리스 함수를 통합하여 마이크로서비스의 수와 복잡성을 최소화합니다. graphql-java로 구축된 이 시스템은 세분화된 필드 선택, 데이터 관찰 가능성, 요청 내 캐싱과 같은 기능을 제공합니다. GraphQL 생태계의 도구를 활용하며 에어비앤비 API 트래픽의 상당 부분을 지원합니다. Viaduct는 대규모 서비스 지향 아키텍처에서 흔히 나타나는 스파게티와 같은 종속성 그래프와 관련된 문제를 해결합니다. 데이터 중심 접근 방식으로의 전환은 데이터 접근을 간소화하고 전반적인 시스템 유지 관리성을 개선하는 것을 목표로 합니다. 아키텍처는 깨끗한 스키마로 시작하여 수많은 핵심 엔티티를 포함하도록 성장했습니다. 이미 프로덕션 환경에 배포된 이 솔루션은 에어비앤비의 SOA 진화에 대한 의지를 보여줍니다.
CdXz5zHNQW_YzRZpul0zT.jpeg

Airbnb의 JVM 모노레포를 Bazel로 마이그레이션하기

Airbnb은 4.5년에 걸쳐 방대한 JVM 모노레포를 Gradle에서 Bazel로 마이그레이션했습니다. 전환의 주요 이유는 Bazel의 뛰어난 속도, 안정성 및 통합된 빌드 인프라였습니다. Bazel의 캐싱 및 원격 실행은 빌드 및 테스트 시간을 크게 단축하여 개발자 생산성을 향상시켰습니다. 마이그레이션은 비결정적인 빌드 및 리소스 경합으로 인한 Gradle의 불안정성을 해결했습니다. Airbnb의 Viaduct 서비스에 대한 개념 증명은 Bazel의 효과를 입증하여 더 광범위한 채택으로 이어졌습니다. 중요한 구성 요소는 개발자 노력을 최소화하고 공존하는 빌드 시스템을 유지하기 위한 자동화된 빌드 파일 생성기였습니다. 이 생성기는 소스 파일을 효율적으로 구문 분석하고, 종속성 순환을 관리하며, 세분화된 빌드 그래프를 지원했습니다. 마이그레이션에는 다중 버전 타사 라이브러리 지원과 같은 문제를 해결하고 배포 호환성을 보장하는 작업도 포함되었습니다. 마지막으로, 서비스에 대한 시작 및 통합 테스트를 포함한 엄격한 테스트를 통해 Bazel 빌드 배포의 정확성을 검증했습니다. 전반적인 결과는 개발자 만족도를 높인 크게 개선된 빌드 시스템입니다.
CdXz5zHNQW_RVap6w2FjE.jpeg

대규모 환경에서의 끊김 없는 Istio 업그레이드

Airbnb는 성공적으로 Istio 서비스 메시를 14회 업그레이드했으며, 수십 개의 Kubernetes 클러스터와 수천 대의 VM에 걸쳐 수만 개의 파드를 관리했습니다. 그들의 업그레이드 프로세스는 제로 다운타임과 점진적인 롤아웃을 우선시하며, 사용자 개입 없이 독립적인 업그레이드를 가능하게 합니다. 아키텍처는 Istiod를 위한 관리 클러스터와 여러 워크로드 클러스터를 포함합니다. 업그레이드는 현재 및 새 Istio 버전을 동시에 실행하는 카나리 모델을 따릅니다. 이는 컨트롤 플레인(Istiod) 및 데이터 플레인(istio-proxy) 업데이트를 조정하여 달성됩니다. 중요한 점은 이전 istio-proxy 버전은 최신 Istiod와 함께 사용되지 않으며, 원자적으로 업데이트된다는 것입니다. 중앙 관리 파일인 rollouts.yml은 네임스페이스에 걸쳐 원하는 Istio 버전 배포를 지시합니다. Kubernetes의 경우, Krispr라는 자체 도구가 CI 및 파드 승인 중에 배포에 Istio 개정 레이블을 삽입합니다. 이 메커니즘은 자주 배포되지 않는 워크로드도 업그레이드를 보장합니다. 가상 머신(VM)의 경우, 업그레이드는 VM 태그에 따라 아티팩트를 설치하는 온-호스트 데몬인 mxagent에 의해 관리됩니다. 중앙 컨트롤러인 mxrc는 rollouts.yml에 맞게 이러한 태그를 업데이트합니다. Mxrc는 또한 VM 상태를 모니터링하여 통제된 업그레이드 프로세스를 보장합니다. 이 접근 방식은 인프라 업그레이드와 애플리케이션 배포를 효과적으로 분리합니다. Airbnb의 지속적인 유지보수 및 안전 투자는 이러한 복잡하고 대규모 Istio 업그레이드를 가능하게 했습니다.
CdXz5zHNQW_deZowKwyHD.jpeg

에어비앤비에서 쿠버네티스에 분산 데이터베이스를 사용하여 고가용성을 달성하기

전통적으로 조직들은 데이터베이스 확장을 위해 샤딩을 사용하며 비용이 많이 드는 독립형 서버를 사용했지만, 이 접근 방식은 데이터 수요가 증가함에 따라 유지보수에 문제가 있음을 입증했습니다. 높은 가용성, 낮은 지연 시간, 확장성을 합리적인 비용으로 갖춘 클라우드에서 수평적으로 확장 가능한 오픈 소스 데이터베이스를 안정적으로 실행하는 것은 상당한 과제입니다. 에어비앤비는 안정성과 운영성을 향상시키기 위해 여러 쿠버네티스 클러스터에 분산 데이터베이스 클러스터를 배포하는 혁신적인 전략을 채택했습니다. 쿠버네티스에서 데이터베이스와 같은 상태 저장 서비스를 관리하는 것은 어렵습니다. 특히 노드 교체 및 업그레이드와 관련하여 쿠버네티스는 데이터 분산 인식 기능이 부족합니다. 이를 완화하기 위해 에어비앤비는 AWS EBS를 사용하여 스토리지 볼륨을 노드에 연결했으며, 쿠버네티스 영구 볼륨 클레임을 통해 새 가상 머신에 자동으로 다시 연결할 수 있도록 했습니다. 사용자 정의 쿠버네티스 연산자를 개발하여 노드 교체 이벤트를 관리하고, 이를 데이터베이스 시작, 사전 예방적 인프라, 계획되지 않은 오류로 분류했습니다. 데이터베이스 시작 및 사전 예방적 이벤트의 경우, 연산자는 교체 전에 모든 노드가 실행 중인지 확인하고 안전한 삭제를 조정하기 위해 파드 퇴거를 가로챕니다. 계획되지 않은 오류는 조정할 수 없지만, 실패한 하드웨어가 수정될 때까지 교체를 차단하여 지속적인 유지보수가 보호됩니다. 높은 지역적 가용성을 보장하기 위해 에어비앤비는 각 데이터베이스를 서로 다른 AWS 가용 영역에 있는 세 개의 독립적인 쿠버네티스 클러스터에 배포하여 문제의 파급 효과를 제한합니다. 데이터베이스 클러스터의 과잉 프로비저닝은 전체 AZ, 쿠버네티스 클러스터 또는 한 구역의 모든 스토리지 노드가 다운되더라도 충분한 용량을 보장합니다. AWS EBS는 노드 교체를 위한 빠른 다시 연결과 우수한 내구성을 제공하여 세 개의 복제본만으로도 높은 가용성 클러스터를 지원합니다. EBS의 지연 시간 급증은 스토리지 읽기 시간 초과를 구현하고 복제본에서 읽기를 허용하여 지연 시간을 줄이고 AZ 간 비용을 방지하며, 오래된 읽기 기능을 통해 읽기 성능을 더욱 최적화합니다. AWS EBS 및 사용자 정의 연산자를 활용하는 이 다중 클러스터 쿠버네티스 전략을 통해 오픈 소스 분산 스토리지 시스템은 클라우드 환경에서 높은 가용성, 낮은 지연 시간 및 확장성을 달성하여 강력한 데이터 관리를 가능하게 합니다.
CdXz5zHNQW_5ISBolXzut.jpeg

SwiftUI 성능 이해 및 개선

에어비앤비는 2022년에 SwiftUI를 도입하여 엔지니어 생산성을 향상시켰지만 새로운 성능 문제를 야기했습니다. 이러한 문제를 해결하기 위해 에어비앤비는 성능에 중요한 코드 패턴을 식별하고 검증하는 새로운 툴링을 개발했습니다. 에어비앤비의 기능 아키텍처는 선언적 UI 패턴과 단방향 데이터 흐름 시스템을 사용하므로 SwiftUI 도입이 간소화되었습니다. 그러나 이러한 아키텍처를 사용하는 SwiftUI 기능은 예상만큼 성능이 좋지 않았으며, 고성능 기능을 구축하려면 SwiftUI의 성능 특성을 이해하는 것이 중요합니다. SwiftUI의 뷰 차이 알고리즘은 뷰 본문을 다시 평가해야 하는 시점을 결정하는 데 사용되지만 종종 간과되고 공식적으로 문서화되지 않습니다. 이 알고리즘은 뷰에 저장된 각 속성을 비교하지만, 일반적인 코드 패턴은 이를 혼동시켜 불필요한 뷰 본문 평가로 이어질 수 있습니다. 이를 해결하기 위해 에어비앤비는 뷰에 대한 Equatable 적합성을 생성하는 새로운 @Equatable 매크로를 개발하여 엔지니어가 차이를 비교할 때 어떤 속성을 비교할지 선택적으로 결정할 수 있도록 했습니다. 이 접근 방식을 통해 뷰가 차이를 비교할 수 있도록 보장하고 나중에 회귀가 발생하는 것을 방지할 수 있습니다. 또한 에어비앤비는 뷰 본문이 너무 복잡하고 더 작고 차이 비교가 가능한 조각으로 리팩터링해야 할 때를 엔지니어가 식별하는 데 도움이 되는 맞춤형 SwiftLint 규칙을 구현했습니다. 뷰를 더 작은 조각으로 나누면 SwiftUI는 실제로 변경된 뷰 부분만 효율적으로 업데이트하여 기능이 복잡해짐에 따라 성능을 유지할 수 있습니다.
CdXz5zHNQW_IYTQREK32w.jpeg

에어비앤비의 임펄스를 사용한 부하 테스트

에어비앤비의 시스템-레벨 로드 테스트는 신뢰성 및 효율성을 위해 필수적입니다. 병목 현상, 용량 평가, 성능 기준 설정 및 오류 감지를 위해 로드 테스트는 내부 로드 테스트-서비스 프레임워크입니다. Impulse는 4개의 주요 구성 요소를 포함합니다. 로드 생성기, 트래픽 수집기, 의존성 모커), 테스트 API 생성기입니다. 로드 생성기는 서비스 소유자가 문맥 인식 로드 테스트를 수행할 수 있도록 요청을 생성하고 의존성을 모방합니다. 트래픽 수집기는 업스트림 및 다운스트림 트래픽을 캡처하여 Impulse가 생산 트래픽을 정확하게 재생할 수 있습니다. 의존성 모커는 다운스트림 응답에 레이턴시를 추가하여 서비스 간의 간섭을 제거하고 통신 비용을 줄입니다. 테스트 API 생성기는 CI 단계에서 HTTP API를 생성하여 로드 테스트 도구가 이러한 API에 트래픽을 보낼 수 있도록 허용하여 비동기 흐름을 동기 흐름처럼 연습할 수 있습니다. Impulse는 수동적인 노력을 최소화하고 에어비앤비의 관찰 스택과 원활하게 통합하여 팀이 잠재적인 문제를 적극적으로 해결할 수 있도록 설계되었습니다. 프레임워크는 팀이 서비스의 잠재적인 문제를 확인하고 해결하는 데 도움이 되었습니다. Impulse는 현재 고객 지원 백엔드 서비스에 구현 중이고 회사 전체의 팀에서 검토 중입니다.
CdXz5zHNQW_MMZuwGyO3E.jpeg

대규모 청취, 학습 및 지원: 머신 러닝이 에어비앤비의 음성 지원을 어떻게 변화시키는가...

에어비앤비는 사용자 이해도를 높이고 상담원을 보다 효과적으로 지원하기 위해 머신러닝을 활용하여 대화형 음성 응답 시스템(IVR)을 개선했습니다. 이 IVR 시스템은 실시간으로 듣고, 이해하고, 응답하여 통화자가 자연스럽게 문제를 설명하고 즉각적인 지원을 받을 수 있도록 합니다. 시스템은 자동 음성 인식, 문의 사유 감지, 언어 모델을 사용하여 사용자를 이해하고 상담원을 지원합니다. 자동 음성 인식 시스템은 오류를 줄이도록 개선되었으며, 통화자의 문의 의도를 파악하기 위한 문의 사유 감지 모델이 개발되었습니다. 도움말 문서 검색 시스템은 사용자에게 관련 정보를 제공하고, 의역 모델은 사용자가 상담원에게 연결되기 전에 해결책을 이해했는지 확인합니다. 이 시스템은 사용자 만족도를 향상시키고, 사람의 개입 필요성을 줄였으며, 보다 직관적인 음성 지원 경험을 제공합니다.
CdXz5zHNQW_Xyuw3fwzOq.jpeg

Airbnb가 숙소의 평생 가치를 측정하는 방법

에어비앤비는 게스트에게 숙소의 가치를 결정하기 위해, 숙소 수명 가치(LTV, Listing Lifetime Value)를 계산하는 프레임워크를 사용합니다. 이 프레임워크는 기준 LTV, 증분 LTV, 마케팅 유도 증분 LTV를 포함합니다. 기준 LTV는 머신러닝과 숙소 데이터를 사용하여 365일 동안의 총 예약을 추정합니다. 증분 LTV는 카니발라이제이션(자체 경쟁) 문제를 해결하여 각 숙소가 추가하는 가치를 추정합니다. 마케팅 유도 LTV는 에어비앤비의 이니셔티브가 숙소 가치에 미치는 영향을 측정합니다. 기준 LTV의 정확한 측정은 중요하며, 시간에 따른 모델 훈련 및 평가가 필요합니다. 증분성을 고려하는 것은 공급과 수요를 예약과 연결하는 생산 함수를 추정하는 것을 포함합니다. 특히 팬데믹 기간 동안의 불확실성을 처리하기 위해 실제 예약으로 LTV 추정치를 업데이트했습니다. 이 LTV 프레임워크는 에어비앤비가 가치 있는 숙소를 식별하고, 공급 전략을 알리고, 내부 이니셔티브를 평가하는 데 도움이 됩니다. 이 방법은 에어비앤비 체험과 같은 다른 영역으로도 확장될 수 있습니다. 프레임워크의 지속적인 개발은 호스트와 게스트 모두에게 더 나은 경험을 제공하는 것을 목표로 합니다.
CdXz5zHNQW_bq2A63Ci4v.jpeg

에어비앤비 검색을 위한 임베딩 기반 검색

에어비앤비의 검색 기능은 게스트가 완벽한 숙소를 찾는 데 매우 중요한 역할을 하지만, 방대한 숙소 목록과 복잡한 검색어 때문에 어려운 과제입니다. 이를 해결하기 위해 에어비앤비는 임베딩 기반 검색(EBR) 시스템을 구축하여 초기 후보 숙소를 더 작은 범위로 좁혔습니다. EBR 시스템은 훈련 데이터 구성, 모델 아키텍처 설계, 온라인 서비스 전략 개발이라는 세 가지 주요 구성 요소로 이루어져 있습니다. 훈련 데이터 파이프라인은 대조 학습을 활용하여 숙소와 검색어를 숫자 벡터로 매핑합니다. 모델 아키텍처는 기존의 투 타워 네트워크 설계를 따르며, 하나의 타워는 숙소 목록에 대한 특징을 처리하고 다른 타워는 검색어와 관련된 특징을 처리합니다. 숙소 타워는 매일 오프라인으로 계산되어 온라인 지연 시간을 줄입니다. 온라인 서비스를 위해 에어비앤비는 근사 최근접 이웃(ANN) 솔루션을 탐색했고 속도와 성능 간의 균형이 더 나은 역색인 파일(IVF)을 선택했습니다. IVF 솔루션은 미리 숙소를 클러스터링하고 클러스터 할당을 표준 검색 필터로 처리하여 상위 클러스터에서 숙소를 검색합니다. A/B 테스트 결과 EBR 시스템은 전체 예약 건수에 통계적으로 유의미한 증가를 가져왔으며, 검색 시 쿼리 컨텍스트를 효과적으로 통합하고 숙소 순위를 더 정확하게 매기는 데 기여했습니다. 이 시스템은 검색 및 이메일 마케팅 운영에 완전히 출시되었습니다.
CdXz5zHNQW_ZoLewXZBkI.jpeg

LLMs를 사용한 대규모 테스트 마이그레이션 가속화

에어비앤비는 LLM(대규모 언어 모델)을 활용한 접근 방식을 사용하여 약 3,500개의 리액트 컴포넌트 테스트 파일을 Enzyme에서 React Testing Library(RTL)로 마이그레이션했습니다. 초기에는 이 작업이 1.5년이 걸릴 것으로 예상했지만, 실제로는 6주 만에 완료했습니다. 마이그레이션에는 테스트 파일을 리팩토링하는 작업이 포함되었으며, 원래 테스트의 의도와 코드 커버리지를 유지했습니다. 또한, 유효성 검사, 리팩토링 단계 및 재시도 루프를 포함한 자동화된 파이프라인을 구축했습니다. LLM은 컴포넌트 코드와 관련된 테스트를 포함한 추가적인 컨텍스트를 제공받아 성공률을 개선했습니다. "샘플, 튜닝 및 스윕" 접근 방식을 사용하여 프롬프트와 스크립트를 개선하여 완료율을 75%에서 97%로 향상시켰습니다. 자동화는 마이그레이션의 대부분을 효율적으로 처리했으며, 작은 부분만 수동으로 수정했습니다. 이 프로젝트는 테스트 의도와 코드 커버리지를 유지하면서 수동 마이그레이션보다 훨씬 빠르고 저렴한 것으로 입증되었습니다. 이 경험은 대규모 코드 변환을 위한 LLM의 강력한 능력을 보여줍니다. 에어비앤비는 개발자 생산성을 높이기 위해 LLM의 사용을 확대할 계획이며, 또한 대규모로 복잡한 문제를 해결하는 것을 좋아하는 엔지니어를 채용하고 있습니다.
CdXz5zHNQW_HzB4Yizqpc.jpeg

지도 검색 순위 개선

에어비앤비는 지도 인터페이스에 대한 랭킹 알고리즘을 개선하여 게스트와 호스트를 더 잘 연결하도록 노력해왔다. 초기에는 예약 확률에 기반한 랭킹 알고리즘이 사용되었으나, 지도에서 사용자의 주의가 핀에 균등하게 분산되는 경우에는 이 접근 방식이 작동하지 않았다. 사용자 경험을 개선하기 위해 에어비앤비는 다양한 사용자 주의 모델을 테스트했으며, 지도 핀의 수를 제한하거나 예약 확률에 기반한 2티어 핀을 생성하는 등 다양한 방법을 시도했다. 이러한 변경으로 예약 및 사용자 만족도가 đáng kể하게 개선되었다. 또한, 에어비앤비는 지도 중심을 재설정하는 알고리즘을 개발하여 예약 확률이 가장 높은 목록을 표시하게 하여 예약 및 지도 이동이 줄어들었다. 이러한 진전에도 불구하고, 지도에 모든 목록을 표시하는 것은 여전히 도전적인 과제로, 향후 작업의 초점이 될 것이다.

에어비앤비, KDD 2024에서

에어비앤비는 스페인 바르셀로나에서 열린 2024년 KDD 컨퍼런스에서 큰 영향을 미쳤습니다. 전체 3개의 ADS 트랙 논문, 1개의 워크샵, 그리고 7개의 워크샵 논문과 초청 강연이 주요 컨퍼런스 논문에 수락되었습니다. 연구 주제는 딥 러닝 및 검색 랭킹, 온라인 실험 및 측정, 그리고 양면 시장으로 범위했습니다. 양면 시장 최적화 워크샵에서 논의된 에어비앤비의 기여는 이러한 플랫폼의 생산자와 소비자를 해결하기 위한 콘텐츠 랭킹, 추천 시스템, 데이터 마이닝의 진화를 다루었습니다. 개인화를 위한 게스트 의도 모델링에 대한 에어비앤비의 연구는 여행 계획을 예측하고 여러 사용자 의도 신호를 생성하기 위해 딥 러닝 접근 방식을 사용합니다. 또한 에어비앤비는 경제 모델링과 인과 추론 기술을 결합하여 게스트 세그먼트의 가격 민감성을 추정하는 게스트 수요 이해에 대한 논문을 발표했습니다.

에어비앤비로의 나의 여정 | 비자야 카자

비자야 카자는 에어비앤비의 최고 보안 책임자(CSO) 겸 신뢰 및 안전 엔지니어링 책임자로서 커뮤니티 보호 및 인프라 보안 기술을 개발하는 팀을 이끌고 있습니다. 또한 에어비앤비 기술 다양성 위원회의 공동 책임자이기도 합니다. 인도의 대가족에서 자란 비자야는 어릴 적부터 학업적으로 뛰어난 성과를 내도록 교육받았으며, 과학과 수학에 대한 강한 애착을 갖고 대학에서 전기 공학을 전공했습니다. 대학 졸업 후, 시스코에서 소프트웨어 엔지니어로 일하게 되었고, 좋아하는 매니저를 따라 우연히 보안 분야에 발을 들여놓게 되었습니다. 시스코에서 17년 동안 10억 달러 규모의 보안 제품 포트폴리오 제품 개발을 이끌었으며, 이후 파이어아이와 모바일 보안에 중점을 둔 샌프란시스코의 스타트업인 룩아웃에서 근무했습니다. 비자야는 에어비앤비의 CSO직 제안을 받았을 때 처음에는 주저했지만, 회사의 비전과 미션에 깊은 인상을 받았습니다. 긍정적인 사용자 경험을 제공하고자 하는 회사의 헌신과 미션 중심적인 접근 방식에 이끌려 2019년 에어비앤비에 합류했습니다. 비자야는 사용자와 플랫폼 보호라는 공동의 미션을 공유하지만, 각기 다른 기술, 위협 및 중점 분야를 가진 두 팀, 즉 신뢰 및 안전 팀과 보안 팀을 이끌고 있습니다. 업무 외적으로 비자야는 즉흥 코미디를 즐겨 왔는데, 이를 통해 순발력 있게 생각하고 새로운 상황에 즉각적으로 대응하는 등 리더십에 대한 귀중한 교훈을 얻었습니다. 그녀는 다른 사람들에게 직업적인 좌절에 직면했을 때 집중력을 유지하고, 침착함을 잃지 않고, 끈기 있게 앞으로 나아가라고 조언합니다.

데이터에서 통찰력으로: 에어비앤비의 공급 세분화

에어비앤비는 데이터 기반 세그먼테이션을 사용하여 호스트의 가용성 패턴을 이해합니다. 이 과정에는 가용성율, 연속성 및 계절성과 같은 요소를 분석하여 유사한 프로필을 가진 호스트를 구분하는 것이 포함됩니다. K-평균 군집 알고리즘을 적용하여 에어비앤비는 호스트의 가용성 패턴에 따라 8개의 구별되는 호스트 군집을 식별합니다. 이러한 군집에는 "항상 켜져 있는", "짧은 계절", "이벤트 동기" 등이 포함되어 있으며, 각 군집은 고유한 특성과 선호도를 가지고 있습니다. 에어비앤비는 이러한 세그먼트를 A/B 테스트를 통해 검증하고, 알려진 속성과 상관관계를 맺으며, 사용자 경험 연구를 통해 실제 행동과 일치하는지 확인합니다. 이 세그먼트 모델은 결정 트리 알고리즘을 사용하여 모든 목록에 확장되고 데이터 웨어하우스에 통합되어 다양한 팀에서 사용할 수 있습니다. 이러한 접근 방식은 에어비앤비가 호스트를 더 잘 지원하고 전체 사용자 경험을 개선하기 위한 대상 전략, 제품 및 메시지를 개발하는 데 도움이 됩니다.

에어비앤비에서 사용자 신호 플랫폼 구축하기

에어비앤비는 사용자 경험을 개인화하여 향상시키기 위해 사용자 신호 플랫폼(User Signals Platform, USP)이라는 스트림 처리 플랫폼을 개발했습니다. 이 플랫폼은 사용자 참여 데이터를 활용하여 예약 과정에서 맞춤형 상호작용을 제공합니다. 데이터 파이프라인 레이어와 온라인 서빙 레이어로 구성되어 있으며, 거의 실시간 처리를 위해 Flink 스트리밍과 데이터 수정 및 백필을 위해 배치 처리를 사용합니다. USP는 사용자 신호, 사용자 세그먼트 및 세션 참여와 같은 다양한 사용자 이벤트 처리를 지원합니다. 또한 이벤트 지연, 수신 지연, 작업 지연 및 변환 지연과 같은 지표를 사용하여 스트리밍 작업의 성능을 측정합니다. 이 플랫폼은 개발자가 스트리밍 구성 요소를 신경 쓰지 않고 변환 및 사용자 세그먼트를 정의할 수 있도록 허용합니다. Flink 작업의 안정성을 개선하기 위해 에어비앤비는 작업 관리자가 실패할 때 연속적인 처리를 보장하기 위해 대기 태스크 관리자를 사용합니다.

에어비앤비의 비전 트랜스포머를 사용하는 AI 구동 사진 투어

에어비앤비는 게스트 경험을 향상시키기 위해 16가지 다른 방 유형으로 목록 사진을 분류하고 조직하는 AI 기반 사진 투어 기능을 개발했습니다. 모델 정확도를 개선하기 위해 에어비앤비는 사전 훈련, 다중 작업 학습, 앙상블 학습 및 지식 증류를 사용했습니다. 사전 훈련 과정에서는 수백만 개의 에어비앤비 목록 사진에서 Vision Transformer 모델을 훈련했습니다. 다중 작업 학습은 시각적 해석을 개선하는 다양한 데이터셋을 사용했습니다. 앙상블 학습은 여러 모델의 강점을 결합하여 견고한 예측을 가능하게 하였고, 지식 증류는 정확도를 희생하지 않고 효율적으로 배포할 수 있었습니다. AI 기반 사진 투어는 2023년 겨울 출시의 일부로 출시되었고, 에어비앤비는 사용자 경험을 개선하기 위해 지속적으로 모델을 개선하고 있습니다.

대규모 웹에서 Bazel 적용하기

에어비앤비는 최근 구글의 오픈 소스 빌드 툴인 Bazel을 백엔드, 웹, iOS 플랫폼을 아우르는 유니버설 빌드 시스템으로 채택했습니다. 1,100만 줄이 넘는 코드로 구성된 대규모 웹 모노리포는 맞춤형 빌드 스크립트와 캐싱 로직으로 인해 유지 보수가 어려웠고 확장성이 좋지 않았습니다. 이러한 문제를 해결하기 위해 에어비앤비는 Bazel로 마이그레이션하여 복잡성, 병렬 처리, 캐싱 및 성능을 제공했습니다. 마이그레이션 프로세스는 2021년에 시작되었지만 구글 외에 대규모 웹에서 Bazel을 통합하는 산업 전례는 공개되지 않았습니다. 팀은 원격 환경으로 큰 파일을 전송할 때 발생하는 성능 문제를 해결해야 했으며, 마이그레이션 원칙을 수립하여 전체 성능을 개선하거나 유지하고 마이그레이션 중에 모노리포에 기여하는 개발자의 영향을 줄였습니다. Bazel을 위한 저장소를 준비하기 위해 팀은 사이클 브레이킹과 자동화된 BUILD.bazel 파일 생성을 수행했습니다. 또한 TypeScript, ESLint 및 Jest를 활성화하고 캐싱을 도입하여 입력 크기를 줄이고 성능을 개선했습니다. 후퇴를 방지하기 위해 팀은 테스트를 "숨김"에서 "필수"로 이동시키기 위해 규칙 속성을 사용하고, Jest 설정을 대체하는 동안 테스트를 실행하지 않도록 하여 단일 소스 진실을 보장했습니다. 또한 마이그레이션 준비 여부를 확인하기 위해 테스트 런타임, 코드 커버리지 통계 및 실패율과 같은 메트릭을 사용하여 Bazel 이전과 이후를 비교하는 스크립트를 작성했습니다. CI 마이그레이션과 함께 팀은 개발자가 로컬에서 Bazel을 실행하여 CI 실패를 재현하고 반복할 수 있도록 보장했습니다. 개발자가 익숙한 도구를 계속 사용하고 유익할 때 Bazel을 선택할 수 있도록 로컬 Bazel 경험을 제공했습니다.

에어비앤비에서 위치 검색을 개선하는 과정: 추정에서 강화 학습으로의 여정

에어비앤비는 세계 여행 방식을 완전히 바꾸었습니다. 그러나 다양한 위치와 재산 유형이 있는 재고에 의해 게스트에게 관련된 옵션을 제공하는 것이 점점 더 복잡해졌습니다. 이러한 도전을 해결하기 위해 에어비앤비는 위치 검색 프로세스를 개선하는 데 머신 러닝 및 강화 러닝 기법을 사용하여 혁신적인 변화를 일으켰습니다. 초기에는 에어비앤비가 검색 유형에 따라 맵 영역을 정의하는 데 휴리스틱스를 사용했지만, 이러한 휴리스틱스는 다양한 검색 유형을 구별하거나 새로운 데이터에 적응하는 데 제한이 있었습니다. 에어비앤비는 다음으로 통계를 사용하여 위치 검색을 개선하는 데 데이터셋을 구축했습니다. 각 여행 목적지에 대한 데이터셋은 그 목적지에서 게스트가 예약한 목록을 기록했습니다. 그러나 통계적 접근 방식도 제한이 있었고, 특정 검색 매개변수와 관계없이 모든 검색을 동일하게 처리했습니다. 이러한 제한으로 인해 에어비앤비는 위치 검색이 더 고급 기법, 즉 머신 러닝을 필요로 할 수 있다고 믿었습니다. 에어비앤비는 다양한 검색 매개변수, 예를 들어 게스트 수와 체류 기간,를 학습하고 각 검색에 대한 더 관련된 맵 영역을 예측할 수 있는 머신 러닝 모델을 구축했습니다. 머신 러닝 시스템은 예약된 목록의 회수율을 7.12% 증가시키고, 검색 맵 영역의 크기를 40.83% 줄였습니다. 이러한 결과는 플랫폼에서 취소되지 않은 예약자의 누적 증가율이 +1.8%로 나타났습니다. 에어비앤비는 다음으로 강화 러닝을 위치 검색 프로세스에 도입했습니다. 이렇게 하면 시스템이 게스트의 상호작용에서 지속적으로 학습하고 예약 행위에 따라 검색 맵 영역을 조정할 수 있었습니다. 강화 러닝 시스템은 덜 여행하는 지역을 더 많이 탐색하고, 자주 검색 및 예약되는 지역을 덜 탐색하여 취소되지 않은 예약자의 누적 증가율이 0.51% 증가하고, 5성 여행 평가율이 0.71% 증가했습니다. 에어비앤비의 휴리스틱스에서 고급 머신 러닝 및 강화 러닝 모델로의 여정은 복잡한 시스템을 변환하는 데이터 주도 접근 방식의 힘을 보여줍니다. 이러한 변환은 에어비앤비와 같은 규모에서 운영하는 회사의 경우 2.66%의 취소되지 않은 예약자 증가와 같은 주요 업적을 가져왔습니다.

Automation Platform v2: Airbnb에서 대화형 AI 개선

Airbnb의 자동화 플랫폼 v2는 대규모 언어 모델(LLM) 애플리케이션을 지원하는 대화형 AI 플랫폼입니다. 이 플랫폼을 통해 개발자는 고객 지원 효율성 및 응답 속도를 향상시키는 LLM 애플리케이션을 구축할 수 있습니다. 체인 오브 썬 워크플로우, 콘텍스트 관리, 가드레일 프레임워크와 같은 여러 핵심 구성 요소를 포함합니다. 체인 오브 썬 워크플로우는 LLM을 추론 엔진으로 사용하여 어떤 도구를 사용하고 어떤 순서로 사용할지 결정합니다. 콘텍스트 관리는 LLM이 필요한 콘텍스트 정보에 액세스할 수 있도록 보장하고, 가드레일 프레임워크는 LLM과의 통신을 모니터링하여 이를 도움이 되고 관련이 있으며 윤리적임을 확인합니다. 플랫폼은 변환적 기술을 수용하고 체인 오브 썬 도구 기능을 확장하며 LLM 애플리케이션 시뮬레이션을 조사하는 등 지속적으로 발전하고 있습니다.

리버베드 데이터 하이드레이션 — 파트 1

에어비앤비의 테크 스택의 일부인 Riverbed는 시스템 레코드 스토어에서 데이터 소비를 최적화하여 읽기 최적화 스토어를 업데이트합니다. 람다 아키텍처를 사용하여 스트리밍 및 배치 구성 요소를 구현합니다. 스트리밍 측면에서는 변경 데이터 캡처(CDC) 이벤트에서 물질화된 뷰를 구성하는 데 중점을 두고 있습니다. 알림 파이프라인은 알림 이벤트를 소비하고 의존 데이터 소스를 쿼리하여 물질화된 뷰를 구축하고, 싱크 스토어에 씁니다. 조인 연산은 DAG와 같은 구조를 사용하여 데이터 소스를 효율적으로 조인하고, 메타데이터에 대한 JoinConditionsDag 및 결과 저장에 대한 JoinResultsDag를 활용합니다. 스티치 연산은 조인된 결과를 사용 가능한 모델인 StitchModel로 변환합니다. Riverbed는 Apache Hive 및 Kafka를 포함하여 여러 싱크를 지원하여 유연성을 제공합니다. 스트리밍 시스템은 CDC 이벤트에서 물질화된 뷰를 효율적으로 업데이트하여 확장성, 효율적인 데이터 가져오기 및 향상된 필터링 및 검색 기능을 가능하게 합니다. 다음 블로그 포스트에서 논의되는 소스 파이프라인은 동시성 및 버전 관리에 중요한 역할을 합니다. DAG 기반 데이터 구조를 활용하여 Riverbed는 스트리밍 데이터 조인을 최적화하여 메모리 사용량을 줄이고 효율성을 개선합니다.

에어비앤비 규모의 건물 엽서 만들기

에어비앤비의 미디어 팀은 새로운 목적지 매칭 알고리즘을 활용하여 단체 여행 예약을 위한 엽서 생성 시스템을 개발했습니다. 이 시스템에는 현지화된 텍스트 레이아웃, 디자인 유연성, 고성능이 필요했습니다. 현지화된 텍스트 레이아웃 문제를 해결하기 위해 인기 예약 목적지에 대한 번역 형식을 수동으로 지정하는 타협점을 찾았습니다. 유연한 템플릿 데이터 모델을 통해 텍스트 위치와 색상을 쉽게 구성할 수 있었습니다. 성능을 개선하기 위해 비동기식 엽서 생성 플로우를 구현하여 지연 시간을 최소화하고 기존 미디어 서비스 인프라를 활용했습니다. 목록별 아트웍, 인기 목적지, 분류 태그 및 기본 대체 태그를 기반으로 엽서를 목적지와 일치시키는 매칭 알고리즘이 개발되었습니다. 인기 목적지에 대한 엽서를 미리 생성하여 일반 엽서 사용을 최소화했습니다. 이 솔루션은 내부 툴링, 이미지 및 텍스트 처리 기능, 목적지 매칭 로직의 필요성을 강조합니다. 엽서는 호평을 받았으며, 에어비앤비의 단체 여행 경험을 향상시키는 데 있어 미디어 기능이 얼마나 강력한지 보여줬습니다.

개인 데이터 분류

에어비앤비의 데이터 분류 시스템은 개인 데이터를 식별하고 보호하여 신뢰와 준수를 보장합니다. 이 시스템은 세 가지 기둥으로 구성되어 있습니다. 카탈로그화하여 데이터를 찾고, 감지하여 개인 데이터를 확인하고, 조정하여 분류를 확인합니다. 자동 감지에서는 메타데이터, 콘텐츠 및 머신 러닝을 사용하여 개인 데이터를 분류합니다. 인간의 입력은 잘못된 긍정의 경우를 최소화하고 해결을 용이하게 하기 위해 분류를 확인합니다. 품질 지표는 회수, 정밀도 및 속도를 평가하여 효율성을 확인합니다. 도전 과제로는 후처리 분류, 일관되지 않은 분류 및 프로세스 비용이 있습니다. 에어비앤비는 이러한 도전 과제를 해결하기 위해 데이터 생성 시 데이터 스키마에 데이터 분류를 통합하는 "왼쪽으로 이동"을 옹호합니다. 이러한 접근 방식은 데이터 소유자가 데이터를 관리하고 주석을 달 수 있도록 하여, 계보 정보를 사용하여 자동 주석을 생성하고 수동 노력을 줄입니다. 에어비앤비의 데이터 분류 시스템은 유사한 도전 과제에 직면한 조직들에게 포괄적인 프레임워크를 제공하여 데이터 보호 및 준수를 촉진합니다.

Apache Flink® on Kubernetes

에어비앤비의 스트리밍 처리 아키텍처는 Hadoop Yarn에서 Kubernetes로 진화했으며, Flink가 Spark Streaming을 대체하여 주요 플랫폼이 되었다. 이 전환에는 Airflow를 작업 스케줄러로 제거하고 가벼운 스트리밍 작업 스케줄러를 도입하는 것이 포함되었다. Kubernetes로의 이동은 개발자 경험 개선, 향상된 모니터링 및 서비스 검색을 용이하게 하였다. 현재 아키텍처는 5개의 주요 구성 요소로 구성되어 있다: 작업 구성, 이미지 관리, CI/CD, Flink 포털 및 Flink 작업 런타임. Kubernetes 기반 아키텍처의 이점으로는 개발자 속도 향상, 작업 가용성 및 지연 개선, 비용 절감이 있다. 향후 작업은 작업 가용성 향상, 작업 자동 크기 조정 활성화 및 Flink Kubernetes Operator 탐색에 초점을 둘 것이다.

에어비앤비가 리액트를 원활하게 업그레이드하는 방법

Airbnb의 프론트엔드는 React Upgrade System을 사용하여 React 18로 업그레이드되었습니다. 이는 긴 기능 브랜치를 요구하지 않고 점진적이고 테스트 가능한 업그레이드를 허용합니다. 모듈 별칭 및 환경 대상은 React 버전을 별도의 빌드 아티팩트 및 런타임 환경으로 나눕니다. TypeScript 불일치 문제는 시뮬레이션, 유형 추가 및 점진적 TypeScript 오류 수정을 통해 처리되었습니다. 포괄적인 테스트에는 시각적 회귀, 통합 및 유닛 테스트가 포함되었습니다. 유닛 테스트는 React 16 및 18에서 모두 실행되었습니다. 점진적 롤아웃은 React 16 및 18 환경으로의 트래픽을 제어하여 내부 테스트 및 점진적 표면 업그레이드를 허용했습니다. 시스템은 React 19 캐나리 릴리스를 테스트하는 데 사용할 수 있었습니다. 이를 통해 React 18을 가리키지 않고도 테스트할 수 있었습니다. React 18 기능, 예를 들어 새로운 루트 API 및 동시 렌더링을 채택한 후 성능 개선이 관찰되었습니다. 시스템은 지속적인 업그레이드 노력을 촉진하여 큰 일회성 변경을 피할 수 있습니다. React 팀의 후방 호환성에 대한 집중은 이러한 업그레이드 접근 방식을 용이하게 했습니다. Airbnb의 프론트엔드는 이제 React 19 베타에서 실행되고 있어 향후 React 업그레이드에 대한 선두를 차지하고 있습니다.

웹에서 텍스트 크기 조정을 재고하는 것

에어비앤비의 웹 접근성 개선 노력은 텍스트가 200% 확대될 때 읽을 수 있도록 보장하는 데 초점을 두었습니다. 데스크톱에서는 브라우저 줌이 효과적이었지만, 모바일 기기에서는 뷰포트가 제한되어 있어 어려움이 있었습니다. 에어비앤비는 텍스트 크기만을 조정하는 글꼴 크기 조정을 선택했습니다. 글꼴 크기 조정을 지원하기 위해 에어비앤비는 rem 단위를 선택했습니다. 이는 루트 요소에 기반하여 글꼴 크기에 따라 비례하여 크기가 조정되는 방식입니다. 이렇게 하면 텍스트 크기가 일관적으로 조정되며 다른 레이아웃 요소에는 영향을 미치지 않습니다. 에어비앤비는 이 전환을 자동화하고 디자이너들이 디자인 단계에서 글꼴 크기 조정을 시뮬레이션할 수 있는 도구를 제공하여 전환을 용이하게 하였습니다. 두 가지 CSS-in-JS 시스템, React-with-Styles와 Linaria에서 전환을 관리하는 것은 추가적인 도전이었습니다. 에어비앤비는 Linaria의 사용자 지정 속성 지원 및 post-CSS 플러그인을 활용하여 대부분의 글꼴 관련 속성을 전환했습니다. 필요한 경우 px 단위를 사용할 수 있는 탈출구도 제공되었습니다. 이러한 접근성 개선의 구현은 'Resize Text'와 관련된 보고된 문제의 수가 대폭 줄어들고 시각 장애가 있는 개인의 사용 경험을 개선했습니다. 사용자 요구를 우선하고 최고의 실천을 채택함으로써 에어비앤비는 포괄적인 웹 디자인에 대한 헌신을 보여주었습니다.

애니메이션: iOS에서 호스트 패스포트를 생동감 있게 하는 것

2023년에 Airbnb는 호스트와 게스트 사이의 연결을 강화하는 개인화된 프로필을 통해 '호스트 패스포트'를 도입했습니다. 패스포트는 검색 결과에 표시되어 예약하기 전에 호스트와 그들의 거주 공간에 대해 게스트가 배울 수 있습니다. 애니메이션을 만들기 위해 Airbnb는 UIKit과 선언적 전환 프레임워크를 사용했습니다. 패스포트는 책처럼 회전하고 펼쳐지며, 페이지를 넘기는 효과를 위해 투명한 뷰를 사용합니다. 애니메이션 프레임워크와의 통합은 검색 결과에서 모달 뷰로의 원활한 전환을 가능하게 합니다. 애니메이션은 각자의 타이밍 곡선이 있는 동기화된 움직임, 회전 및 그림자로 구성되어 있습니다. Airbnb는 실제 탄성감을 위해 스프링 타이밍을 사용했지만 모달 전환 타이밍과 맞출 있도록 이를 조정했습니다. 결과적으로는 호스트를 게스트에게 소개하고 Airbnb 경험을 향상시키는 원활하고 시각적으로 매력적인 애니메이션이 탄생했습니다.

Airbnb 브랜드미터: AI를 사용하여 소셜 미디어 데이터에서 브랜드 인지도 측정

에어비앤비의 자연어 이해 기법인 브랜도미터(Brandometer)는 소셜 미디어 데이터에서 브랜드 인식을 정량화합니다. 브랜도미터는 단어 임베딩(word embeddings)과 코사인 유사도(cosine similarity)를 사용하여 "에어비앤비"와 관련된 단어의 관련성을 계산하여 브랜드 인식을 측정합니다. 데이터는 노이즈와 희소성의 영향을 완충하기 위해 정리 및 처리됩니다. 다양한 단어 임베딩 모델이 탐색되었으며, DeBERTa가 작은 데이터 세트에서 가장 잘 수행됩니다. 점수를 안정화하기 위해 평균 및 순위 기법이 사용됩니다. 보정된 점수는 평균 분산(Average Variance Across Different Periods, AVADP)과 같은 지표를 사용하여 평가됩니다. 브랜도미터는 산업 분석, 새로운 인식의 식별 및 캠페인의 영향 추적에 유용한 것으로 입증되었습니다. 향후 개선 사항에는 더 나은 콘텐츠 세분화 및 데이터 기반의 강화가 포함됩니다. 소셜 미디어에서 브랜드 인식을 포착함으로써 브랜도미터는 고객 경험을 향상시키기 위한 귀중한 통찰력을 제공합니다.