전체 아카이브를 압축 해제하지 말고 한 파일만 얻기 — ARCX 소개

발행: (2026년 3월 20일 AM 05:43 GMT+9)
4 분 소요
원문: Dev.to

Source: Dev.to

개요

대부분의 아카이브 형식은 간단한 작업을 불필요하게 비싸게 만듭니다: 파일 하나가 필요해서 전체를 다운로드하고 압축을 풀어야 합니다.
저는 이를 해결하기 위해 ARCX라는 압축 아카이브 형식을 만들었습니다.

ARCX는 tar+zstd와 같은 교차 파일 압축과 ZIP과 같은 인덱스 기반 랜덤 접근을 결합하여, 큰 아카이브에서 단일 파일을 나머지를 압축 해제하지 않고도 밀리초 안에 가져올 수 있습니다.

GitHub:

설치

cargo install arcx

벤치마크 (5개의 실제 데이터셋)

데이터셋ARCX 읽은 바이트TAR+ZSTD 읽은 바이트감소율
Python ML326 KB63.1 MB198× 적음
Build Artifacts714 KB140.4 MB202× 적음
다른 3개 데이터셋≈ 200 ms 파일당 ~200 MB 아카이브에서 조회tar+zstd 대비 최대 200× 적은 데이터 읽음
압축 오버헤드tar+zstd 대비 약 3 %

사용 사례

  • CI/CD 파이프라인 (아티팩트 조회)
  • 부분 읽기가 가능한 클라우드 스토리지
  • 대규모 코드베이스
  • 패키지 레지스트리

현대 시스템은 전체 아카이브가 아니라 즉시 필요한 하나의 파일을 요구하는 경우가 많습니다.

ARCX 작동 방식

  1. 블록 기반 압축 – 아카이브를 독립적으로 압축된 블록들로 나눕니다.
  2. 이진 매니페스트 인덱스 – 아카이브 끝에 저장되어 각 파일을 블록 오프셋에 매핑합니다.
  3. 직접 오프셋 읽기 – 클라이언트는 다음을 수행할 수 있습니다:
    • 인덱스에서 파일을 조회한다.
    • 해당 블록으로 이동한다.
    • 그 블록만 압축 해제한다.

이렇게 하면 전체 아카이브를 스캔하거나 압축을 푸는 대신 간단한 매니페스트 조회와 단일 블록 읽기로 대체됩니다.

포맷 비교

포맷압축 강도접근 속도
ZIP약함빠름
tar+zstd강함느림
ARCX강함빠름

제한 사항 및 향후 작업

  • ARCX는 스트리밍을 위해 설계되지 않음 (tar와 같이). 매니페스트가 끝에 기록되므로 읽기 전에 아카이브가 완전해야 합니다.
  • 원격/S3 범위 읽기 워크플로는 아직 완전하게 벤치마크되지 않았습니다.
  • 메타데이터/인덱스 오버헤드는 매우 많은 파일 수에 대해 아직 최적화 중입니다.
  • Rust 기반 전체 추출 벤치마크는 진행 중입니다.

아직 초기 단계 – 피드백을 환영합니다.

0 조회
Back to Blog

관련 글

더 보기 »