serialization

2 개의 포스트

figma

Rust의 메모리 최적화 (새 탭에서 열림)

Figma는 실시간 협업 파일의 서버 측 로딩 성능과 메모리 사용량을 개선하기 위해 Rust 자료구조를 최적화했다. 특히 노드 속성을 저장하던 `BTreeMap`을 작고 정렬된 벡터로 바꾸어 대용량 파일의 메모리 사용량을 약 25% 줄이고 역직렬화 속도도 높였다. 또한 포인터의 사용되지 않는 상위 비트에 필드 ID를 저장하는 비트 패킹 방식도 검토했지만, 이는 아직 프로덕션에 적용되지 않았다. ## 파일 로딩과 메모리 사용량의 문제 - Figma의 멀티플레이어 시스템은 파일 로딩, 협업자 업데이트 전파, 파일 상태 스냅샷 저장을 담당한다. - 복잡한 노드 그래프를 실시간으로 처리하기 위해 파일의 상당 부분을 메모리에 올린다. - 동적 페이지 로딩을 도입한 뒤 서버에서 디코딩해야 하는 파일 수가 약 30% 증가했다. - 이에 따라 로딩 경로에 있는 Rust 자료구조와 메모리 배치를 최적화할 필요가 생겼다. ## `BTreeMap`이 차지한 메모리 - Figma 파일은 삼각형, 프레임, 텍스트 등 다양한 노드의 집합으로 표현된다. - 각 노드는 색상, 타입, 부모 노드, 위치 같은 속성을 가진다. - 기존에는 속성을 다음과 같은 형태로 저장했다. ```rust BTreeMap<u16, pointer> ``` - `u16`은 속성 ID, 포인터는 속성 값의 위치를 의미한다. - 이 맵은 파일 로딩의 핵심 경로에 있었고, 전체 파일 메모리 사용량의 60% 이상을 차지했다. - 스키마의 속성 수는 200개 미만이며, 하나의 노드에 실제로 존재하는 속성은 평균 약 60개에 불과했다. - 속성 키가 작고 제한적이며, 대부분 특정 노드 유형에만 묶여 있다는 점에서 범용 맵이 과도하다고 판단했다. ## 정렬된 벡터로 자료구조 변경 - `BTreeMap` 대신 속성 ID와 포인터를 저장하는 정렬된 평탄 벡터를 사용했다. ```rust Vec<(u16, pointer)> ``` - 이론적인 복잡도만 보면 벡터가 불리하다. - 검색: `O(n)` - 중간 삽입: `O(n)` - 수정: 위치 탐색 비용 발생 - `BTreeMap`은 일반적으로 `O(log n)` 수준의 연산 제공 - 하지만 실제 파일 로딩에서는 벡터의 연속적인 메모리 배치가 더 유리했다. - CPU는 작은 선형 메모리 영역을 순차적으로 읽고 계산할 때 캐시 효율이 높다. - 결과적으로 역직렬화 속도가 향상됐고, 대용량 파일의 메모리 사용량은 약 25% 감소했다. - 이 사례는 Big O 복잡도만으로 실제 성능을 판단하기보다 데이터 크기와 메모리 지역성까지 고려해야 함을 보여준다. ## 포인터에 필드 ID를 함께 저장하는 비트 패킹 - 일반적인 포인터는 64비트지만, x86 시스템에서는 실제 주소 지정에 하위 48비트만 사용하는 경우가 많다. - 따라서 상위 16비트가 사용되지 않는다는 점에 착안해, 여기에 속성 필드 ID를 저장하는 방법을 검토했다. - 기존에는 속성 ID와 포인터를 별도 값으로 저장했지만, 비트 패킹 후에는 하나의 `u64`에 둘을 함께 담을 수 있다. ```rust Vec<u64> { [field_id_u16, pointer_u48], } ``` - 속성 ID가 정확히 16비트로 표현 가능하다는 점과 포인터의 남는 상위 비트가 맞아떨어졌다. - 이 방식은 메모리 접근과 데이터 구조의 크기를 더 줄일 가능성이 있다. - 다만 포인터의 상위 비트가 항상 사용 가능하다는 보장은 없으며, 하드웨어나 운영체제의 주소 체계가 바뀔 수 있다. - 따라서 해당 최적화는 조사 단계이며 아직 프로덕션에는 적용되지 않았다. 작은 데이터 집합에서는 범용 트리나 맵보다 단순한 연속 배열이 더 빠르고 효율적일 수 있다. Rust에서 성능을 최적화할 때는 이론적 복잡도뿐 아니라 실제 데이터 크기, CPU 캐시 지역성, 포인터 표현 방식, 플랫폼 호환성까지 함께 측정하고 판단하는 것이 중요하다.

datadog

Python에서 Protobuf 파싱하기 (새 탭에서 열림)

Datadog이 Gartner의 2026년 Observability Platforms Magic Quadrant에서 Leader로 선정되었다는 내용이 중심입니다. Datadog은 인프라·애플리케이션·로그·보안·디지털 경험·소프트웨어 배포·AI까지 폭넓은 기능을 하나의 관측성 플랫폼으로 제공한다고 소개합니다. 다만 제공된 본문에는 선정 근거와 평가 세부 내용보다 제품 메뉴와 링크 목록이 대부분 포함되어 있습니다. ## Gartner Magic Quadrant 리더 선정 - Datadog이 Gartner의 **Observability Platforms 부문 Leader**로 이름을 올렸다는 발표입니다. - 링크에는 2026년 Gartner Magic Quadrant 보고서 자료로 연결되는 리소스가 포함되어 있습니다. - 제공된 내용만으로는 Gartner가 평가한 구체적인 점수, 경쟁사 비교, 선정 기준은 확인할 수 없습니다. ## 통합 인프라 모니터링 - 인프라 영역에서 다음 기능을 제공합니다. - 호스트 및 인프라 모니터링 - 메트릭 수집·분석 - 컨테이너와 Kubernetes 모니터링 - 네트워크 및 서버리스 모니터링 - 클라우드 비용, 스토리지, GPU 모니터링 - Kubernetes 오토스케일링과 Cloudcraft를 통해 운영 상태뿐 아니라 클라우드 구조와 비용까지 관리할 수 있도록 구성되어 있습니다. ## 애플리케이션 성능 관찰 - 애플리케이션 영역에는 다음 기능이 포함됩니다. - APM(Application Performance Monitoring) - 서비스 간 의존성 및 범용 서비스 모니터링 - 지속적 프로파일링 - 동적 계측 - AI 에이전트 관측성 - 애플리케이션 추적, 성능 병목 분석, 코드 수준 프로파일링을 하나의 플랫폼에서 수행하는 방향을 제시합니다. ## 로그·데이터 관측성과 보안 - 로그 관리, 민감 데이터 탐지, 감사 추적, Observability Pipelines를 제공합니다. - 데이터베이스, 데이터 스트림, 데이터 품질, 배치 작업도 관찰할 수 있습니다. - 보안 영역에서는 다음 기능을 폭넓게 포함합니다. - 코드 보안 및 SAST - 소프트웨어 구성 분석과 취약점 관리 - 클라우드 보안 형상 관리 - Cloud SIEM - 워크로드 및 애플리케이션·API 보호 - 비밀정보 탐지와 컴플라이언스 ## 디지털 경험과 소프트웨어 전달 - 브라우저·모바일 RUM, 세션 리플레이, 신세틱 모니터링으로 사용자 경험을 측정합니다. - 에러 추적, 제품 분석, 실험 기능을 통해 사용자 행동과 애플리케이션 오류를 함께 분석할 수 있습니다. - CI Visibility, 테스트 최적화, 지속적 테스트, 코드 커버리지, 기능 플래그 등 소프트웨어 개발·배포 과정도 관측 대상에 포함합니다. ## AI 기반 운영과 서비스 관리 - Bits AI Agents, Bits Chat, Bits Investigation 등 AI 기반 조사·자동화 기능을 제공합니다. - GPU 모니터링과 AI 에이전트 관측성을 통해 AI 인프라 및 AI 애플리케이션 운영을 지원합니다. - 이벤트 관리, 인시던트 대응, SLO, 워크플로 자동화, 서비스 카탈로그 등의 기능으로 장애 대응과 운영 프로세스를 연결합니다. - 대시보드, 알림, 노트북, 접근 제어, 거버넌스 콘솔을 통해 플랫폼 전반의 운영 관리도 지원합니다. ## 참고할 점 - 제공된 자료에는 제목과 Datadog 제품 카테고리 목록이 주로 담겨 있으며, 본문 기술 내용이나 Gartner 평가의 상세 근거는 포함되어 있지 않습니다. - URL 경로에 `protobuf-parsing-in-python`이 포함되어 있지만, 해당 Python Protocol Buffers 파싱 글의 본문은 제공되지 않아 기술적 내용은 요약할 수 없습니다. 실제로 도입을 검토한다면 Gartner 보고서 원문에서 평가 기준과 경쟁 제품 비교를 확인하고, Datadog의 수집 비용·데이터 보존 정책·기존 OpenTelemetry 및 로그 파이프라인과의 통합성을 함께 검증하는 것이 좋습니다.