# CDC 파일 전송

> Clean Markdown view of GeekNews topic #23401. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=23401](https://news.hada.io/topic?id=23401)
- GeekNews Markdown: [https://news.hada.io/topic/23401.md](https://news.hada.io/topic/23401.md)
- Type: GN+
- Author: [neo](https://news.hada.io/@neo)
- Published: 2025-10-02T09:57:01+09:00
- Updated: 2025-10-02T09:57:01+09:00
- Original source: [github.com/google](https://github.com/google/cdc-file-transfer)
- Points: 2
- Comments: 1

## Topic Body

- **CDC File Transfer**는 Google에서 개발한 오픈 소스 도구로, **Windows와 Linux 간 파일 동기화 및 스트리밍**을 지원함
- 파일을 **변경된 부분만 전송하는 Content Defined Chunking (CDC)** 기술을 활용해, 기존 rsync 대비 최대 30배 빠른 속도를 달성함
- **cdc_rsync**와 **cdc_stream** 두 가지 주요 도구를 제공하며, 각각 파일 동기화와 실시간 스트리밍 기능을 수행함
- Windows 기반 개발자가 Linux 환경에 효율적으로 파일을 배포·테스트하도록 설계되어, **원격 개발·게임 개발환경**에서 탁월함
- **ssh와 sftp 기반 인증**을 지원하며, 사용은 직관적이며, 다양한 플랫폼에 맞는 바이너리를 제공함

---

### 개요 및 프로젝트의 중요성

- **CDC File Transfer**는 Google에서 오픈 소스로 공개한 파일 전송 도구 모음으로, Windows에서 Linux 또는 Windows 간의 **파일 동기화 및 스트리밍**을 빠르고 효율적으로 처리함
- 이 프로젝트는 Stadia 게임 개발 환경을 위해 만들어졌으며, 기존 **scp나 rsync의 한계(느린 전송, 전체 파일 복사, 델타 모드 부재)** 를 해결하기 위해 탄생함
- 핵심 기술은 **FastCDC라는 Content Defined Chunking 알고리듬**이며, 파일 변경 시 실제 변경된 데이터만 전송해 대용량 반복 동기화에 최적화됨
- 오픈 소스임에도 상용 수준의 성능(예: 1500 MB/s 동기화 속도, sshfs 대비 2~5배 빠른 스트리밍)을 제공하며, 클라우드/원격 개발 환경에서 경쟁 서비스보다 확연한 효율을 갖춤

### 주요 도구 설명

#### cdc_rsync

- Windows에서 Linux로 파일 동기화하는 도구이며, 기존 리눅스 rsync의 단점을 극복함
- **시간 및 파일 크기가 일치하는 파일은 신속히 건너뛰고**, 변경된 파일만 효율적으로 전송함
- **FastCDC**를 활용하여, 변경된 데이터의 위치만 감지해 전송함으로써, 최소한의 트래픽과 빠른 전송을 제공함
- 동기화 테스트 결과, Cygwin에서 실행한 rsync보다 약 3배, 표준 리눅스 rsync보다 훨씬 빠른 성능을 보임
- **고속 압축** 지원과, 파일을 바이트 단위까지 검증하는 간단하면서도 효율적인 알고리듬 구조를 갖춤

#### cdc_stream

- Windows의 폴더·파일을 **Linux에서 마치 로컬 파일처럼 실시간으로 스트리밍**해 접근 가능하게 만듦
- 기존 sshfs 구조와 유사하나, **파일 읽기 속도와 캐시 성능**이 최적화되어 있음
- **변경 감지 및 차등 스트리밍**을 통해, 변경된 데이터만 재전송하며 메타데이터 처리도 빠름
- Linux 디렉터리는 readonly로 제공, Windows에서 변경된 파일이 거의 즉시(최대 수 초 수준) Linux에 반영됨
- 게임 데이터 등 대용량 파일 접근이 필요한 개발 환경에서, 실제로 sshfs 대비 2~5배의 성능 향상을 보임

### 지원 플랫폼

- cdc_rsync: Windows x86_64 ↔ Ubuntu 22.04 x86_64 간 주로 지원, 원격 동기화/로컬 동기화 모두 점진적 지원
- cdc_stream: Windows x86_64에서 Ubuntu 22.04 x86_64로의 스트리밍 지원, 반대 방향이나 다른 플랫폼은 미지원

### 인증/설정 방식

- **ssh.exe 및 sftp.exe**를 통한 패스워드 없는 인증 방식(키 기반 인증 권장)
- Windows에서 명령 줄 경로나 환경 변수로 커맨드 세부 경로 지정 가능
- 추가적인 SSH 명령어 옵션, 사용자별 설정 파일(%USERPROFILE%\.ssh\config) 활용 가능
- Google 사내 사용자는 별도의 보안 키 기반 인증 환경 변수 제공

### 사용 예시

#### cdc_rsync 사용 예시

- 파일 동기화: `cdc_rsync C:\path\to\file.txt user@linux.device.com:~`
- 와일드카드 및 디렉터리 전체 재귀 동기화 지원: `cdc_rsync C:\path\to\assets\* user@linux.device.com:~/assets -r`
- 동기화 상태 실시간 확인(-v 옵션), 로컬 파일 간 동기화도 가능

#### cdc_stream 사용 예시

- 디렉터리 스트리밍 시작: `cdc_stream start C:\path\to\assets user@linux.device.com:~/assets`
- 스트리밍 세션 중단: `cdc_stream stop user@linux.device.com:~/assets`
- 와일드카드로 여러 세션 관리 가능

### 문제 해결 및 로깅

- cdc_stream은 백그라운드 서비스 기반 동작, 로그는 기본적으로 `%APPDATA%\cdc-file-transfer\logs` 경로 저장
- 상세 로그 및 디버깅 옵션 제공(verbosirty 레벨 JSON 설정)
- cdc_rsync는 콘솔 로그 출력, `-vvv`, `-vvvv`로 상세 로그 출력 가능
- 실패한 SSH/SFTP 커맨드 추적 및 직접 실행해 문제 원인 분석 용이

### 기술 스택 및 운영 정보

- 주요 개발 언어는 **C++** , 일부 파이썬/빌드관리용 Starlark
- Apache-2.0 라이선스, 8인 이상의 기여자 보유, GitHub 기준 3.3k stars 달성
- 2023년 이후로는 추가 개발 없이 Archived 상태

### 요약

- **CDC File Transfer**는 Windows-Linux 간의 대용량 파일 및 디렉터리 반복 전송에 있어서 **업계 최상위 수준의 효율과 속도**를 제공함
- **원격 개발, 게임, 미디어, 데이터 분석 등 크로스플랫폼 작업환경**에서 동기화와 스트리밍 과정을 크게 단축시키는 이점이 있음
- 타 동기화/스트리밍 툴 대비 **단순성, 빠른 부분 변경 감지, 뛰어난 캐시 기능**으로 강력한 경쟁력을 갖춤
- SSH/SFTP 인증, 다양한 명령 줄 또는 설정 파일 기반의 유연한 환경 설정으로 엔지니어가 쉽게 도입 및 운용 가능함
- 소스 코드 열람 및 커스터마이즈가 가능하며, 오픈 소스 커뮤니티에서 이미 높은 평판과 활용도를 기록 중임

## Comments



### Comment 44483

- Author: neo
- Created: 2025-10-02T09:57:01+09:00
- Points: 1

###### [Hacker News 의견](https://news.ycombinator.com/item?id=45433768) 
* 작년부터 Content Defined Chunking에 대해 다양하게 실험해보고 있음 (특히 [bonanza.build](https://bonanza.build/)). 가장 널리 쓰이는 FastCDC 알고리즘에도 개선 여지가 있다는 걸 발견했으며, lookahead 방식을 활용하면 성능이 크게 향상됨. 이에 대한 구현체로는 [buildbarn/go-cdc](https://github.com/buildbarn/go-cdc) 참조 바람
  * 이 lookahead 방식은 Lempel-Ziv 압축기에서의 “lazy matching”과 매우 비슷해 보임 ([관련 블로그](https://fastcompression.blogspot.com/2010/12/parsing-level-1-lazy-matching.html)). Buzhash와의 비교 결과가 궁금함. 보통 gearhash가 구조가 단순해서 더 빠를 것으로 예상함. 참고로 gear init에는 mt19937 대신 rand/v2의 seeded generator가 더 적합할 수 있음
  * bonanza.build가 상당히 인상적임. 아직도 Bazel을 사용 중이었다면 꼭 써보고 싶음
  * go-cdc를 fastcdc 대신 cdc_rsync에서 사용할 경우 성능 면에서 어느 정도 차이가 발생할지 궁금함
  * AI가 이 분야에 기여할 여지가 있을지 생각해보게 됨. 데이터 압축 ([AI 기반 압축 사례](https://statusneo.com/creating-lossless-compression-algorithms-using-ai/)), RF 변조 최적화 ([논문 링크](https://www.arxiv.org/abs/2509.04805)) 등에서 이미 AI가 유용하게 쓰이고 있음. 작은 모델(특히 SSM 계열)로 chunk 경계 최적화를 학습시키는 것도 가능할 것으로 기대함

* rsync가 이미 content-defined chunk 경계를 rolling hash 조건으로 정의해 사용하고 있지 않음? ([위키 링크1](https://en.wikipedia.org/wiki/Rolling_hash#Content-based_slicing_using_a_rolling_hash), [위키 링크2](https://en.wikipedia.org/wiki/Rolling_hash#Content-based_slicing_using_moving_sum)). rsync 대비 속도 개선은 rolling hash의 효율성과 네이티브 윈도우 실행 파일 사용(윈도우 파일 시스템이 느림) 등 때문이 아닐까 의심됨. 어쨌든 성능 향상이 흥미로우며, 오픈 소스화된 점도 긍정적임. 이 방법이 rsync 내부로도 들어가길 바람
  * rsync는 content-defined chunking을 사용하지 않고, 목적 파일 위에서 고정 크기 블록을 사용함. rolling hash로 소스 파일 어느 위치에서든 해당 블록을 감지해 재전송을 피할 수 있음 ([기술 문서](https://rsync.samba.org/tech_report/node2.html))
  * 레포의 README에서 rsync와의 접근법 차이를 무척 친절하게 설명함
  * rsync는 사실상 정지된 프로젝트로 느껴짐. 오랜 기간 유지되고 있지만, 많은 품질 개선이 누락됐고 지금은 마치 vim처럼 이론상만 관리되고 실제론 발전이 없는 듯한 인상임

* Stadia가 이렇게 또 하나의 장기적인 이득을 남겼다는 게 반가움. 직접 호스팅 버전이 안 나와서 아쉬운데, 요즘 DRM 세상에서 만약 나온다면 곧바로 해적판 취급 받게 됨
  * 셀프 호스팅 게임 스트리밍엔 moonlight와 sunshine 조합이 추천임. 매우 잘 작동함
  * Stadia에서 직접 호스팅이 불가능했다고 들었음. 개발자들이 Stadia 지원을 별도로 빌드해야 했고, 별도의 DirectX 대체 플랫폼이었을 수도 있음. Proton 같은 가벼운 에뮬레이션 환경이었을수도 있지만, 실제로 플레이한 게임들은 Stadia 전용 커스텀 키 바인딩(스태디아 전용 심볼)이 게임 내에 표시됨. 분명한 커스터마이징이 있던 것임. 이 방식은 PlayStation, Xbox, Nvidia의 게임 스트리밍과도 확연히 차별됨. Amazon Luna는 잘 모르겠음
  * 셀프 호스팅 리모트 게임 스트리밍엔 Moonlight/Sunshine(Apollo) 참고 바람. Stadia는 별도의 전용 빌드가 필요해 큰 의미가 없음
  * DRM 시대에 ‘해적판’이란 게 정확히 무슨 의미인지 궁금함. 직접 소유한 PC 게임을 클라우드로 스트리밍하는 것을 의미하는지?
  * "셀프 호스팅 stadia"는 실상 이미 여러 서비스, 툴에서 구현된 바 있음. Steam 자체에 훌륭한 게임 스트리밍 내장되어 있음. Nvidia, AMD도 과거 GPU 드라이버에 해당 기능을 넣었었고, Steam Deck에서도 게임을 스트리밍할 수 있음. Sony의 PS4/PC 스트리밍이나, Microsoft의 Xbox 스트리밍처럼 다양한 사례가 존재함

* Content Defined Chunking이 실제로 어떻게 chunk를 생성하는지 궁금했던 사람은 [이 블로그](https://joshleeb.com/posts/content-defined-chunking.html), [이 블로그](https://joshleeb.com/posts/gear-hashing.html) 두 개가 개념을 매우 쉽게 설명함
  * 고마움. 원래 링크에서 자세한 설명이 부족해 답답했는데, 곧 읽어볼 계획임

* 핵심 문구: "이 remote diffing 알고리즘은 CDC(Content Defined Chunking)를 기반으로 하며, 테스트 결과 rsync보다 최대 30배 빠름(1500MB/s 대 50MB/s)"

* 혹시 이 기능을 rsync 표준 도구에 통합하려는 작업이 진행 중인지 아는 사람 있는지 궁금함. 이 기능이 널리 쓰였으면 좋겠는데 공식 웹사이트만 보면 리눅스-리눅스 간에는 지원이 아예 안 돼서 아쉬움
  * 리눅스-리눅스 지원 및 더 범용적인 호환성에 대한 논의가 [여기 1](https://github.com/google/cdc-file-transfer/issues/56#issuecomment-1375243042), [여기 2](https://github.com/librsync/librsync/issues/242)에 정리되어 있음

* 이 프로젝트도 꽤나 멋지다고 느낌. 비슷한 기능을 내 업무에 맞게 자체 구현한 적이 있는데, 조건이 까다로울 땐 꽤 중요함. 그런데 rsync로부터 시작하는 게 더 쉽지 않았을까 하는 생각이 듦
  * “scp는 전체 파일만 복사하고 delta 모드가 없으며, 작은 파일이 많으면 느리고 압축도 느림”이라고 하지만, rsync에서 -z 옵션을 이용해 압축도 쓸 수 있음([설명](https://docs.rc.fas.harvard.edu/kb/rsync/)). CPU가 충분하면 -z 옵션을 권장하며, 속도도 빨라짐. 아주 빠르진 않아도 scp보단 rsync가 더 나은 출발점이라 생각함
  * “리모트 diffing 알고리즘이 CDC 기반이며, 테스트 결과 rsync보다 최대 30배 빠름(1500 MB/s vs 50 MB/s)”
  * rsync가 일부 분야 특히 게임 개발 등에서는 최적화가 부족한 듯함. 게임 개발에는 수십~수백만 개의 파일과 디렉터리를 복사하는 상황이 잦은데, rsync는 디렉터리/파일 생성을 직렬화하는 성향 탓에 속도가 급격히 저하됨. GNU parallel 등으로 N개의 rsync 작업으로 쪼개 동작시키거나 직접 파일 목록을 생성해서 돌려봤지만, 결국엔 syncthing처럼 프리인덱싱이 가능한 툴로 해결했음

* 이 기술이 git에도 적용될 수 있을지 궁금함. git blob은 길이 정보를 포함해 해시를 만드는데, 데이터 일부만 바꿔도 처음부터 해시를 다시 계산해야 함. CDC라면 훨씬 효율적일 것 같음
  * xet에서 git lfs를 대체하기 위해 CDC 방식이 실제로 적용되었음 ([관련 사례](https://huggingface.co/blog/from-files-to-chunks))
  * 백업 도구인 restic/borg 등도 CDC를 쓰고 있는데, git 대체용은 아직 제대로 시도된 게 있는지 궁금함

* “최신 릴리스의 precompiled 바이너리를 윈도우에 다운로드해 압축 해제하면 됨. 리눅스 바이너리는 윈도우 툴에서 자동으로 ~/.cache/cdc-file-transfer에 배포됨. 별도 설치가 필요 없음”이라는 설명이 인상적임. rsync와 달리 리눅스 목적지에 별도의 서비스 설치 없이 동작하는 점이 좋음. rsync의 이런 점이 살짝 번거로웠음
  * 실제로 rsync의 가장 흔한 사용 방식은 ssh로 원격에서 받는 쪽을 자동 실행시키는 것임. cdc도 동일하게 동작하므로, rsync 사용하려면 별도 서비스 설치가 필요하다는 부분은 오해임

* IBM Aspera도 이 방식과 비슷하게 동작하는지 궁금함. 게임 퍼블리셔 QA로 일할 때 Aspera로 화면 녹화를 업로드했는데, 사무실 인터넷 일반 업로드 속도보다 훨씬 빠른 속도를 보여줬음 ([IBM Aspera 소개](https://www.ibm.com/products/aspera))
