sparql

2 개의 포스트

gitlab

GitLab Transcend 해커톤: 개발자들이 GitLab Orbit에서 만든 것 (새 탭에서 열림)

GitLab Orbit 해커톤은 코드·머지 리퀘스트·파이프라인·배포·소유권을 연결한 실시간 코드 그래프가 AI 에이전트의 시스템 이해 문제를 해결할 수 있음을 보여줬다. 1,576명이 참가해 265개 프로젝트를 만들었고, 참가자들은 변경 영향 분석, 테스트 최적화, 마이그레이션 비용 산정, 보안 취약점 추적 같은 반복적인 실무 문제에 집중했다. 특히 에이전트의 실행 속도뿐 아니라 근거와 책임성을 확보하는 것이 중요하다는 점이 강조됐다. ## GitLab Orbit와 해커톤 규모 - GitLab Orbit는 다음 정보를 관계형 그래프로 연결하고 최신 상태로 유지한다. - 소스 코드와 의존성 - 머지 리퀘스트 - CI 파이프라인 - 배포 정보 - 팀과 코드 소유권 - AI 에이전트는 코드 작성에는 강하지만, 변경 사항이 시스템 전체에 미치는 영향 파악에는 취약하다. - Orbit를 사용하면 “무엇이 이 변경에 의존하는가”, “어떤 테스트가 영향을 받는가”, “문제 발생 시 담당 팀은 누구인가” 같은 질문을 단일 쿼리로 처리할 수 있다. - 해커톤에는 1,576명이 등록했고, 265개의 Showcase Track 프로젝트가 제출됐다. - 별도로 26명의 기여자가 Orbit 코드베이스에 61개의 개선 사항을 병합했다. ## 개발자들이 가장 많이 해결하려 한 문제 - 70개 팀이 변경 사항의 잠재적 영향 범위를 분석하는 도구를 만들었다. - 하위 호출자 - 영향받는 파이프라인 - 관련 팀과 소유자 - 30개 이상의 팀은 코드베이스 온보딩과 이해를 돕는 도구를 개발했다. - 그 밖에도 다음 문제가 주요 주제로 등장했다. - 장애의 근본 원인 분석 - 아키텍처 드리프트 탐지 - 불안정한 파이프라인 진단 - 여러 저장소에 걸친 CVE 추적 - 공통점은 기존에는 Git, CI, 배포 도구, 대시보드에 흩어진 정보를 사람이 직접 조합해야 했다는 점이다. - Orbit는 단순히 에이전트를 자동화하는 것이 아니라, 실행에 필요한 시스템 맥락과 통제 수단을 함께 제공한다. ## 시스템 통합과 자동화 ### Sankofa: 상황별 세 가지 에이전트 - 기술 구현 부문 우승작이다. - 사용자의 업무 상황에 따라 세 에이전트가 작동한다. - **Radar**: 머지 리퀘스트가 열리면 변경의 영향 범위와 관련 파이프라인, 담당 팀을 분석한다. - **Guide**: 이슈가 할당되면 작업 시작에 필요한 요약 보고서를 작성한다. - **Shield**: 보안 취약점이 발생하면 코드 그래프를 한 번 탐색해 취약점의 전파 경로를 추적한다. - 취약점의 영향을 여러 저장소와 의존성에 걸쳐 수동으로 추적하던 작업을 자동화했다. ### Stayed Shipped: AI 코드의 실제 운영 여부 추적 - AI 에이전트가 지난달 병합한 변경 중 실제 운영 환경에 남아 있는 비율을 확인한다. - 이후 시니어 개발자가 조용히 수정하거나 대체한 변경도 추적한다. - 기존 대시보드가 제공하지 못하는 “AI가 만든 코드가 실제로 살아남았는가”라는 지표를 제시한다. ## 마이그레이션 비용과 작업 계획 ### Carver: 레거시 마이그레이션 견적 - 디자인·사용성 부문 우승작이다. - 사용자가 원하는 마이그레이션을 입력하면 Orbit의 의존성 그래프를 분석해 다음을 산출한다. - 작업 단위 수 - 예상 기간 - 수행 순서 - 위험 요소 - 예시로 AngularJS에서 Angular로의 전환을 약 9주간의 인력 작업과 약 10달러의 생성 비용으로 추정한다. - 테스트되지 않은 핵심 서비스처럼 위험도가 높은 부분은 별도로 표시한다. - Orbit에서 실제 서비스를 찾지 못하면 임의의 수치를 만들지 않고 사용자에게 실제 코드 위치를 확인한다. ### Marshal: 조직 전체의 자율 마이그레이션 - 조직 단위 목표를 선언하면 영향받는 저장소를 찾고 작업 순서를 계획한다. - 작업을 여러 웨이브로 나누어 머지 리퀘스트를 생성하고, 대상 저장소가 누락되지 않았는지 확인한다. - Carver가 통제 가능한 견적과 설명에 집중한다면, Marshal은 최대한의 자율 실행을 지향한다. ## 영향 기반 테스트와 정밀한 리팩터링 ### CrossCut: 변경에 필요한 테스트만 실행 - 영향력 부문 우승작이다. - 머지 리퀘스트에서 변경된 심볼을 찾고, Orbit의 호출 그래프를 따라 실제로 영향을 받는 테스트를 계산한다. - 모델의 추측 없이 그래프 탐색만으로 테스트 파이프라인을 구성한다. - 대규모 또는 여러 저장소에 걸친 테스트 스위트에서 CI 실행량을 90% 이상 줄일 수 있다. ### OrbitWeaver: 의존성 순서를 반영한 리팩터링 - 벡터 유사도 검색이 아니라 정확한 영향 범위를 사용한다. - 영향을 받는 모든 파일을 매핑하고 의존성 순서에 따라 수정한다. - 단순한 의미적 유사성보다 실제 코드 그래프가 안전한 자동 리팩터링에 적합하다는 점을 보여준다. ## 시맨틱 웹과 에이전트 거버넌스 ### Transcend: Orbit 위에 새로운 추론 계층 구축 - 아이디어 품질 부문 우승작이다. - Orbit API를 단순히 호출하는 대신 OWL, SPARQL, RDF를 활용한 시맨틱 웹 기반 추론 엔진을 추가했다. - 기본 API만으로는 어려운 다음 작업을 수행한다. - 전이적 폐쇄 계산 - 코드베이스와 외부 지식 그래프의 조인 - 코드와 관련 논문, 저자, 발표 연도의 연결 - 예를 들어 코드베이스가 구현한 지식 그래프 임베딩 기법의 클래스명과 이를 뒷받침한 논문 정보를 함께 조회한다. ### Universal Agent OS: 에이전트의 책임성과 검증 - 에이전트 자체보다 에이전트를 통제하는 거버넌스 계층을 만든다. - 다음 절차를 강제한다. - 먼저 사용자 인터뷰 수행 - 코딩 전 계획 수립 - 의사결정 근거 보존 - 결과 검증 - AI가 작성하는 코드의 비중이 커질수록 빠른 실행보다 누가 어떤 근거로 결과를 승인했는지가 중요해진다는 문제의식을 담고 있다. ## Orbit 자체에 대한 커뮤니티 기여 - Contribute Track에서는 26명이 Orbit에 직접 61개의 머지 리퀘스트를 병합했다. - 주요 개선 내용은 다음과 같다. - C++20 concepts 지원 - Go 패키지 선언 지원 - Kotlin 코루틴 지원 - Ruby 람다 지원 - 온톨로지 수정 - CI에서 발생하던 SIGPIPE 버그 수정 - 첫 Orbit 쿼리 튜토리얼 작성 - `max_depth`와 `max_hops` 차이를 포함한 문서 정리 - 참가자들은 Orbit를 활용한 애플리케이션뿐 아니라 기반 플랫폼 자체도 개선했다. 실무에서는 AI 에이전트에 코드를 바로 작성하게 하기보다, 먼저 변경 영향 분석·관련 테스트 선택·소유 팀 확인·근거 기록을 Orbit로 연결하는 것이 효과적이다. 특히 대규모 저장소에서는 정확한 의존성 그래프가 CI 비용 절감과 안전한 리팩터링의 기반이 될 수 있다.

netflix

넷플릭스의 고처리량 그래프 추상화: 1부 (새 탭에서 열림)

넷플릭스의 Graph Abstraction은 분석 중심의 OLAP가 아니라, 밀리초 수준의 지연 시간과 초당 수백만 건의 처리량이 필요한 OLTP 그래프 서비스를 위해 설계됐다. 이 시스템은 약 650TB 규모의 그래프 데이터를 초당 약 1,000만 건의 연산으로 처리하며, KV·TimeSeries·EVCache 등 기존 데이터 추상화를 조합해 실시간성과 비용 효율을 확보한다. 강한 타입의 스키마와 사전 정의된 관계를 활용해 데이터 품질, 쿼리 계획, 탐색 중복 제거를 개선하는 것이 핵심이다. ## OLAP와 OLTP 그래프의 차이 - **OLAP 그래프** - 대규모 그래프를 대상으로 개방형·알고리즘 중심의 분석을 수행한다. - RDF/SPARQL, Property Graph/Gremlin·openCypher, SQL 등을 사용한다. - 낮은 지연 시간이나 높은 처리량보다 심층 분석과 유연성이 중요하다. - **OLTP 그래프** - 초당 수백만 건의 연산과 밀리초 단위의 탐색 응답을 요구한다. - 높은 성능을 위해 최종적 일관성(eventual consistency)을 허용할 수 있다. - 시작 노드 지정, 최대 탐색 깊이 제한 등 쿼리 복잡도 제약을 둔다. - 스트리밍 처리나 사용자 경험과 직접 연결되므로 높은 글로벌 가용성이 필요하다. - Netflix Graph Abstraction은 이러한 OLTP 요구를 대상으로 만들어졌다. ## 넷플릭스의 주요 활용 사례 - **Real-Time Distributed Graph(RDG)** - 넷플릭스 생태계의 엔터티와 상호작용 사이의 동적 관계를 표현한다. - 기존 RDG 구현이 Graph Abstraction에 통합됐다. - **Social Graph** - Netflix Gaming 내부의 소셜 연결을 모델링한다. - 사용자 참여도 향상에 활용된다. - **Service Topology** - 넷플릭스 내부 서비스 간 관계를 나타낸다. - 실시간 및 과거 데이터를 분석해 장애 발생 시 근본 원인 분석을 지원한다. ## 기존 데이터 추상화 위에 구축한 아키텍처 - 저장소와 캐시를 새로 개발하지 않고 Netflix Online Datastore 생태계의 추상화를 활용한다. - **KV Abstraction** - 노드와 엣지의 최신 상태를 저장한다. - 모든 실시간 그래프 쿼리를 위한 인덱스로 사용된다. - **TimeSeries Abstraction** - 선택적으로 연결할 수 있다. - 시간에 따른 그래프 변화와 과거 상태를 조회할 수 있다. - **EVCache** - 밀리초 단위의 낮은 지연 시간을 달성하기 위한 캐시 계층이다. - 더 특화된 캐시 계층도 실험 중이다. - **Data Gateway Control Plane** - 그래프 스키마를 관리한다. - KV와 TS 데이터셋의 생성, 삭제, 구성 및 프로비저닝을 자동화한다. ## 강한 타입의 Property Graph 모델 - 그래프는 여러 타입의 노드와 엣지로 구성된다. - 노드와 엣지는 각각 속성(properties)을 가질 수 있다. - 속성 타입을 강하게 지정해 다음을 보장한다. - 필터링을 효율적으로 수행한다. - 데이터 내보내기(export)의 일관성을 유지한다. - 잘못된 형식의 데이터 입력을 방지한다. - 엣지는 의미에 따라 다음 중 하나로 정의된다. - **단방향 엣지**: 한 방향으로만 탐색한다. - **양방향 엣지**: 양쪽 방향의 관계를 표현한다. ## 네임스페이스와 물리적 격리 - 그래프 데이터는 **네임스페이스(namespace)**라는 독립 단위로 분리된다. - 각 네임스페이스는 Control Plane 설정에 따라 특정 물리 저장 계층과 연결된다. - 전용 하드웨어 또는 공유 하드웨어에 배포할 수 있다. - 프로비저닝 자동화는 다음 요구사항을 바탕으로 비용 효율적인 하드웨어 구성을 결정한다. - 목표 처리량 - 허용 지연 시간 - 데이터셋 크기 - 워크로드의 중요도 ## 명시적 그래프 스키마와 엣지 매핑 - 각 네임스페이스에는 명시적인 그래프 스키마가 연결된다. - 스키마는 다음을 정의한다. - 노드 타입과 엣지 타입 - 허용되는 속성과 타입 - 노드 간 허용 관계 - 엣지 방향 - 관계는 **엣지 매핑(edge mapping)**의 집합으로 표현된다. - 출발 노드 타입 - 엣지 타입 - 도착 노드 타입 - 단방향 또는 양방향 여부 - 예를 들어 `account -owns-> profile`은 단방향이고, `profile -linked_to- device`는 양방향으로 설정할 수 있다. - 엣지별 속성 스키마를 통해 `registration_time`은 TIMESTAMP, `status`는 STRING처럼 허용된 속성명과 타입을 지정한다. ## 스키마를 활용한 최적화 Graph Abstraction 서버는 시작 시 스키마를 읽어 가능한 관계를 나타내는 인메모리 메타데이터 그래프를 구축한다. - **데이터 품질 보장** - 스키마와 맞지 않는 노드, 엣지, 속성의 쓰기를 거부한다. - 데이터 내보내기 결과의 일관성을 높인다. - **쿼리 계획 수립** - 사용자 요청을 처리할 수 있는 탐색 경로를 빠르게 구성한다. - **엣지 중복 제거** - 같은 노드 타입 사이의 양방향 엣지를 탐색할 때 중복 경로 처리를 줄인다. - **불가능한 경로 제거** - 스키마상 존재할 수 없는 관계를 탐색 대상에서 제외한다. - 필터 조건이나 속성 타입이 맞지 않는 경로도 제거한다. - 서버는 Control Plane을 주기적으로 조회해 변경된 스키마를 반영한다. - 향후에는 엣지 카디널리티를 이용해 쿼리 fanout을 줄이고, 타입 안전한 데이터 접근 계층과 스키마 인식형 Gremlin 유사 API를 제공할 계획이다. ## KV 기반 실시간 인덱스 - 각 네임스페이스는 기본 저장 계층의 하나의 테이블과 연결된다. - 테이블은 고유 ID를 기준으로 레코드를 분할한다. - 하나의 레코드에는 정렬된 여러 key-value 항목이 저장된다. - 결과적으로 네임스페이스는 유연한 접근 패턴을 지원하는 **정렬된 맵들의 맵(map of sorted maps)** 구조를 갖는다. - 노드와 엣지의 모든 실시간 그래프 인덱스는 KV를 기반으로 저장된다. ## 멱등성과 Last-Write-Wins - 동일한 ID와 키에 대한 쓰기는 멱등적으로 처리된다. - 따라서 요청을 여러 번 재시도하거나 request hedging을 수행해도 안전하다. - 멱등성 토큰에는 타임스탬프가 포함된다. - KV는 이 타임스탬프를 이용해 저장 계층에서 **Last-Write-Wins(LWW)** 규칙을 적용한다. - 네트워크 지연이나 일시적 장애가 발생해도 재시도 가능한 쓰기 모델을 제공한다. 실시간·고처리량 그래프 시스템을 구축할 때는 범용 그래프 데이터베이스 하나에 모든 요구를 맡기기보다, 최신 상태 저장소·이력 저장소·캐시·스키마 관리 계층을 목적에 맞게 조합하는 방식이 효과적이다. 특히 강한 스키마와 제한된 탐색 모델을 도입하면 데이터 품질을 높이면서 쿼리 경로와 비용을 사전에 최적화할 수 있다.