Dropbox/model-context-protocol

3 개의 포스트

dropbox

범용 콘텐츠 처리 플랫폼 Riviera가 AI와 그 너머를 위해 어떻게 진화했는가 (새 탭에서 열림)

Dropbox의 콘텐츠 처리 플랫폼 Riviera는 파일 미리보기 서비스에서 출발해 Search, Replay, Sign, Dash 등 여러 제품이 공유하는 범용 변환 플랫폼으로 발전했다. 핵심 설계는 파일별·제품별 파이프라인을 따로 만드는 대신, PDF 변환·페이지 이미지 생성·텍스트 추출 같은 작은 변환 작업을 재사용 가능한 플러그인으로 조합하는 것이다. AI 제품의 확산으로 문서와 미디어를 일관된 형태로 준비하는 수요가 커지면서, Dropbox는 Riviera의 기능을 외부 개발자와 설계 파트너에게 API와 Model Context Protocol 도구로 공개했다. ## 미리보기 문제에서 시작된 플랫폼 - Dropbox는 300개가 넘는 파일 형식을 지원하며, 각 형식에서 썸네일, 전체 미리보기, 추출 텍스트, 스트리밍 매니페스트, 메타데이터 등 다양한 결과물을 생성해야 했다. - 파일 형식과 출력물마다 별도 서비스를 만들면 다음 문제가 발생한다. - 동일한 변환 로직이 여러 서비스에 중복됨 - 의존성, 패키지 버전, 설정이 서로 달라짐 - 유지보수와 운영 부담이 커짐 - Riviera는 모든 미리보기를 독립적인 기능으로 보지 않고, 재사용 가능한 작은 변환 단계의 조합으로 정의했다. - 예를 들어 PowerPoint 미리보기는 다음처럼 처리할 수 있다. - PowerPoint를 PDF로 변환 - PDF의 각 페이지를 이미지로 변환 - 생성된 이미지를 Dropbox 화면에서 표시 - PDF를 이미지로 바꾸는 단계는 PDF 자체의 미리보기나 다른 페이지 이미지 생성 작업에도 재사용할 수 있다. ## 조정과 실행을 분리한 아키텍처 - Riviera의 중앙 구성 요소는 변환 요청을 수집하고, 작업을 조합하며, 적절한 백엔드 워커에 분배한다. - 중앙 계층은 다음 기능을 담당한다. - 요청 유효성 검증 - 변환 작업 구성 - 결과 캐싱 - 중복되거나 잘못된 작업 차단 - 각 백엔드 워커는 특정 변환 유형을 담당한다. - 기능별로 독립적인 유지보수와 확장이 가능함 - 특정 변환의 처리량에 맞춰 개별적으로 확장할 수 있음 - 새로운 파일 형식이나 변환 유형을 추가할 때 핵심 인프라를 수정하는 대신 플러그인을 추가하면 된다. - 현재 Riviera는 100개가 넘는 변환 기능을 제공하며, 초당 수십만 건의 변환을 처리한다. - 이 구조 덕분에 핵심 플랫폼은 안정적으로 유지하면서 지원 파일 형식과 제품 기능을 계속 확장할 수 있었다. ## 여러 제품이 공유하는 변환 라이브러리 - Riviera는 처음에는 전담 Previews 팀이 운영하는 내부 서비스였지만, 다른 팀들도 동일한 콘텐츠 처리 문제를 겪고 있다는 사실이 드러났다. - 예를 들어 미리보기용으로 만든 160×160 썸네일은 머신러닝 팀의 이미지 정규화에도 활용할 수 있었다. - 같은 결과물을 여러 소비자가 사용하면 변환을 한 번만 수행하면 됨 - Search 팀은 문서를 검색 인덱싱에 적합한 형태로 준비하기 위해 Riviera를 도입했다. - Sign, DocSend, Replay 같은 제품도 기존 변환 기능을 재사용했다. - 이후 Dropbox는 플러그인 모델을 제품 팀에 개방했다. - Riviera 팀은 핵심 아키텍처를 관리 - 각 제품 팀은 필요한 변환 플러그인을 추가 - 추가된 플러그인은 다른 팀도 사용할 수 있는 공유 자산이 됨 ## Replay가 보여준 플러그인 모델의 효과 - 동영상 리뷰 제품인 Replay는 동영상 트랜스코딩과 조작이라는 복잡한 처리 작업이 필요했다. - Riviera의 미디어 변환 기능을 활용함으로써 Replay 팀은 동영상 처리 인프라를 처음부터 구축하지 않아도 됐다. - 제품 팀이 변환 기능을 요청하면 Riviera가 기존 기능을 노출하거나 새 플러그인을 추가하는 방식이 정착됐다. - 그 결과 기존에는 수개월이 걸릴 수 있었던 기능을 수주 안에 출시할 수 있었고, 새로운 플러그인이 추가될수록 다음 제품의 개발도 빨라졌다. ## Dash와 AI가 만든 새로운 요구 - AI 모델이 문서에 답변하거나 보고서를 요약하려면 먼저 문서가 모델이 처리할 수 있는 일관된 형태로 변환되어야 한다. - 필요한 전처리에는 다음 작업이 포함된다. - 텍스트 추출 - 스캔 문서의 페이지 인식 - 메타데이터 추출 - 다양한 파일 형식의 통일된 표현으로 변환 - 이러한 작업은 본질적으로 AI 모델 자체의 문제가 아니라 콘텐츠 변환 문제이며, Riviera가 기존부터 해결해 온 영역이다. - Dash 팀은 Riviera가 이미 지원하던 수백 가지 파일 형식과 변환 기능을 활용해 별도의 문서 처리 시스템을 새로 만들 필요를 줄였다. - Riviera는 미리보기와 미디어 처리뿐 아니라 검색, 문서 자동화, AI용 콘텐츠 준비에도 적용되는 기반 계층으로 확장됐다. ## 외부 개발자를 위한 공개 - Dropbox는 Riviera에서 축적한 콘텐츠 변환 기능을 API와 Model Context Protocol 도구 형태로 개발자 생태계와 설계 파트너에게 제공하기 시작했다. - 활용 사례로는 다음과 같은 작업이 제시된다. - 콘텐츠 관리 시스템 구축 - 문서 처리 워크플로 자동화 - 파일 검색용 인덱싱 - AI 애플리케이션용 문서 전처리 - 핵심 가치는 제품마다 변환 인프라를 새로 구축하지 않고, 검증된 공통 플랫폼을 이용할 수 있다는 점이다. Riviera의 사례는 대규모 콘텐츠 처리를 제품별 기능이 아니라 재사용 가능한 변환 조합과 플러그인 플랫폼으로 설계해야 한다는 점을 보여준다. 특히 AI 애플리케이션을 만들 때 모델 개발에만 집중하기보다, 다양한 파일을 안정적으로 추출·정규화·변환하는 기반을 먼저 확보하는 것이 실용적인 접근이다.

dropbox

Dropbox가 MCP와 Dash를 활용해 디자인에서 코드로 이어지는 보안 격차를 해소하는 방법 (새 탭에서 열림)

Dropbox는 보안 위협 모델과 실제 코드 구현 사이의 단절을 MCP, 기초 언어 모델, Dash를 결합해 해결하고자 했다. 시스템은 코드 리뷰 시 관련 위협 모델을 자동으로 검색하고, 문서에 정의된 보안 요구사항이 코드에 반영됐는지 비교한다. 분석 결과 구현 PR의 12%만 원래 보안 검토와 연결되어 있었으며, 보안 지식을 코드 리뷰 시점에 자동으로 제공하는 것이 핵심 해결책으로 제시된다. ## 설계와 코드 사이의 보안 격차 - 보안 검토에서는 잠재적 위험, 공격 가능성, 필요한 보호 조치를 위협 모델에 기록한다. - 그러나 개발이 시작되면 위협 모델은 위키나 문서 시스템에 남고, 구현 코드는 별도의 PR에서 관리된다. - 명시적인 링크가 없으면 코드 리뷰어가 과거의 보안 요구사항을 확인하기 어렵다. - Dropbox의 분석 결과: - 구현 PR 중 원래 설계 검토 및 위협 모델을 연결한 비율은 **12%**에 불과했다. - 검증된 79개 쌍 중 **54%**는 보안 검토 후 한 달이 지나서야 PR이 생성됐다. - 보안 검토부터 PR 생성까지의 중앙값은 약 **5주**였다. - 일부 지연은 **11개월 이상**이었다. - 검토 후 2주 이내에 생성된 PR은 **29%**뿐이었다. ## 기존 보안 도구의 한계 - 정적 분석 도구는 코드에 특정 보안 제어가 존재하는지 확인할 수 있다. - 하지만 해당 제어가 설계 검토에서 합의한 요구사항과 일치하는지는 판단하기 어렵다. - 정적 분석은 코드의 패턴은 검사하지만, 설계 의도와 이전에 결정된 보안 맥락은 알지 못하기 때문이다. - 개발자에게 설계 문서와 PR을 직접 연결하도록 요구하거나 알림 봇을 사용하는 방식도 지속적인 준수에 의존한다. - 설계 검토의 약 **15%**는 코드가 먼저 작성된 뒤 사후적으로 진행됐다. - 따라서 자동화 시스템은 기존 검토와 코드를 연결하는 것뿐 아니라, 보안 검토가 필요할 가능성이 있는 작업을 개발 중 조기에 식별하는 역할도 할 수 있다. ## Dash와 MCP를 활용한 컨텍스트 연결 - Dash는 여러 연결된 애플리케이션의 문서를 색인하므로, 기존 위협 모델과 엔지니어링 문서를 통합적으로 검색할 수 있다. - Dropbox는 코드가 리뷰에 제출될 때 관련 위협 모델을 자동으로 검색하도록 시스템을 구축했다. - MCP(Model Context Protocol)는 AI 에이전트가 Dash가 색인한 문서에 접근하도록 하는 연결 계층이다. - 보안 검토 에이전트는 Dash의 MCP 서버를 통해 위협 모델과 관련 문서를 검색하고 읽는다. - 별도의 소스 시스템별 맞춤 통합 없이 여러 컨텍스트를 하나의 에이전트 세션에 결합할 수 있다. ## 요구사항과 구현 코드의 비교 - 코드 리뷰가 시작되면 에이전트는 관련 위협 모델과 보조 문서를 가져온다. - 기초 언어 모델은 문서에 기록된 보안 요구사항과 변경된 코드를 함께 분석한다. - 예를 들어 위협 모델이 특정 엔드포인트에 인증을 요구한다면, 실제 코드가 인증을 강제하는지 판단할 수 있다. - 기존 정적 분석과 달리 단순히 취약한 코드 패턴을 찾는 것이 아니라, **설계 단계의 보안 결정이 구현에 반영됐는지**를 검토한다. - 결과를 별도의 보안 절차가 아니라 개발자가 이미 사용하는 코드 리뷰 과정에 제공하는 것이 중요한 설계 원칙이다. ## 실용적인 결론 보안 검토 문서를 별도로 잘 작성하는 것만으로는 충분하지 않다. 해당 문서의 요구사항이 코드가 검토되는 시점에 자동으로 노출되고 구현과 비교되어야 하며, 이를 위해 조직의 기존 문서 검색 시스템과 MCP 기반 AI 에이전트를 코드 리뷰 흐름에 통합하는 접근이 효과적이다.

dropbox

Dash가 더 스마트한 AI를 위해 (새 탭에서 열림)

Dropbox Dash는 단순한 검색 시스템을 넘어 사용자의 의도를 이해하고 실행하는 에이전트형 AI로 진화하면서, 모델에 제공되는 정보를 정교하게 관리하는 '컨텍스트 엔지니어링'을 핵심 전략으로 채택했습니다. 단순히 많은 정보를 제공하는 것이 아니라 모델이 추론하고 행동하는 데 꼭 필요한 정보만을 선별하여 전달함으로써, AI의 '분석 마비' 현상과 토큰 낭비를 방지했습니다. 결과적으로 이러한 전략적 컨텍스트 관리는 모델의 판단 속도와 작업 정확도를 동시에 높이는 성과를 거두었습니다. ### 도구 정의의 최소화와 통합 인터페이스 구축 * 모델에게 너무 많은 API 호출 선택지를 주면 판단 속도가 느려지고 정확도가 떨어지는 현상이 발생했습니다. 이를 해결하기 위해 개별 서비스(Confluence, Jira, Google Docs 등)의 검색 도구를 하나로 묶은 '유니버설 검색 인덱스' 기반의 단일 도구를 구축했습니다. * Model Context Protocol(MCP)을 활용하여 도구 설명을 간결하게 유지함으로써, 모델의 컨텍스트 창(Context Window)이 사용자 요청이라는 본연의 목적에 더 많이 할애되도록 설계했습니다. * 하나의 일관된 인터페이스를 통해 정보를 검색하게 함으로써 모델의 계획 수립 과정을 단순화하고 효율성을 극대화했습니다. ### 지식 그래프를 통한 맥락적 데이터 필터링 * 단순히 여러 API에서 데이터를 가져오는 것에 그치지 않고, 검색된 결과 중 가장 관련성 높은 정보만 모델에 전달되도록 필터링 시스템을 강화했습니다. * 통합 인덱스 위에 사람, 활동, 콘텐츠 간의 관계를 연결한 '지식 그래프'를 구축하여 사용자별 맞춤형 순위 산출이 가능하게 했습니다. * 모델이 런타임에 방대한 정보를 직접 분석하는 대신, 이미 관계가 정립된 고가치 정보만 수신함으로써 추론의 질을 높이고 성능 저하를 방지했습니다. ### 복잡한 작업을 위한 전담 에이전트 도입 * 검색 쿼리 생성과 같이 복잡한 지침과 예시가 필요한 작업은 메인 모델의 컨텍스트 창을 과도하게 점유하는 문제를 일으켰습니다. * 이를 해결하기 위해 메인 에이전트는 전체적인 계획만 세우고, 구체적인 쿼리 작성은 별도의 '전담 에이전트'에게 위임하는 구조를 도입했습니다. * 역할 분담을 통해 메인 모델은 복잡한 세부 사항에 매몰되지 않고 전체 작업의 흐름에 집중할 수 있으며, 각 에이전트는 자신에게 할당된 컨텍스트 내에서 최적의 결과를 도출합니다. 효과적인 에이전트형 AI를 구축하기 위해서는 무조건 많은 데이터를 입력하기보다 모델이 처리해야 할 정보의 양과 질을 전략적으로 제어해야 합니다. 도구의 통합, 지식 그래프 기반의 정교한 필터링, 그리고 전문 에이전트로의 역할 분담은 성능 향상과 비용 절감을 동시에 달성할 수 있는 실무적인 context engineering 방안이 될 것입니다.