FerroRepo
Rust-native universal artifact repository
단일 self-contained binary로 실행되며 Sonatype Nexus Repository 3 및 JFrog Artifactory의 wire protocol을 지원하는 Rust-native universal artifact repository입니다. 기존 Maven, npm, pip, cargo, docker, helm client가 변경 없이 동작합니다. JVM도 운영해야 할 external database도 필요 없고(embedded SQLite + local volume 또는 object storage), 1초보다 훨씬 빠르게 부팅됩니다.
전통적인 Nexus 또는 Artifactory deployment는 단일 artifact를 제공하기 전에도 JVM, 수 GB의 heap, external database가 필요합니다. FerroRepo의 single-binary mode는 이를 self-contained AMI로 제공되는 하나의 hardened binary로 대체합니다. v0.1.0은 18개 package protocol 중 12개를 in-tree conformance test와 함께 완전 연결해 제공합니다 — Maven, npm, OCI / Docker Registry v2, PyPI(PEP 503 family), Cargo(sparse index), Go module proxy, Raw/Generic, NuGet v3, RubyGems, Helm(classic + OCI), APT, YUM/DNF — 여기에 Nexus REST v1 및 Artifactory-compatible admin surface를 더합니다. Storage는 tiered(hot/warm/cold) 구조이며 content-addressed de-duplication과 pluggable S3 / GCS / Azure / MinIO blob backend를 지원합니다. Authentication은 기본 ON입니다. anonymous read는 허용되지만 모든 write 및 admin action에는 authenticated principal이 필요합니다.
해결하고자 하는 과제
Sonatype Nexus Repository 3 및 JFrog Artifactory와 같은 고전적인 아티팩트 리포지토리는 단 하나의 아티팩트만 서비스하려 해도 JVM, 수 기가바이트의 heap 메모리, 외부 데이터베이스가 실행되고 있어야 합니다. 이들은 부팅 속도가 느리고 무거우며 상당한 운영 오버헤드를 유발합니다. 개발팀은 기존의 Maven, npm, pip, cargo, docker, helm 툴링을 그대로 유지하면서, 한층 가볍고 운영하기 쉬운 리포지토리를 원합니다.
작동 원리
- 1
독립된 단일 바이너리로 부팅
FerroRepo는 JVM이나 외부 데이터베이스 없이 단일 프로세스로 실행되며, 메타데이터는 내장 SQLite에, 블롭(blob)은 로컬 볼륨이나 오브젝트 스토리지에 보관합니다. 소형 인스턴스에서 1초 미만으로 부팅되며 보안이 강화된 독자적 AMI 형태로 배포됩니다.
- 2
기존 클라이언트를 변경 없이 가리키도록 설정
FerroRepo는 Nexus Repository 3 및 Artifactory의 온와이어 HTTP 프로토콜을 통신하므로 Maven, npm, pip, cargo, docker, helm, apt/yum 클라이언트를 변경 없이 그대로 가리킬 수 있습니다. v0.1.0에서는 18개 프로토콜 중 12개가 완벽히 구현되었으며, in-tree conformance tests가 함께 제공됩니다.
- 3
스토리지 계층화 및 블롭 중복 제거
스토리지는 hot/warm/cold 계층형으로 구성되며, 콘텐츠 주소 지정 기반의 블롭 중복 제거를 처리합니다. 블롭 백엔드는 object_store를 통해 S3 / GCS / Azure / MinIO로 교체할 수 있습니다. 인증은 기본적으로 설정되어 있으며, 익명 읽기는 허용되지만 쓰기 및 관리 작업 시 적절한 범위를 가진 인증된 principal이 필요합니다.
주요 특징
Nexus 3 + Artifactory wire-compatible — 기존 build tool(Maven / npm / pip / cargo / docker / helm)이 변경 없이 동작합니다.
JVM 및 external DB가 필요 없는 single binary; sub-second boot, SQLite + pluggable S3 / GCS / Azure / MinIO blob storage 지원.
18개 protocol 중 12개를 conformance test와 함께 연결; auth는 기본 ON(anonymous read, authenticated write).
포함 사항
- 자체 포함형 Amazon Linux 2023 AMI(Graviton / arm64, t4g, c7g, m7g, r7g 인스턴스 클래스 작동)
- JVM 및 외부 데이터베이스가 필요 없는 단일 바이너리 서버(내장 SQLite 메타데이터, 로컬 볼륨 또는 오브젝트 스토리지의 블롭, 1초 미만으로 부팅)
- 18개 프로토콜 중 12개 완전 연동(Maven, npm, OCI / Docker Registry v2, PyPI (PEP 503 패밀리), Cargo sparse index, Go module proxy, Raw/Generic, NuGet v3, RubyGems Compact Index, Helm classic + OCI, APT, YUM/DNF) 및 Nexus REST v1 / Artifactory 호환 관리 인터페이스
- hot/warm/cold 계층형 스토리지 및 콘텐츠 주소 지정 방식의 블롭 중복 제거
- object_store를 통해 교체 가능한 S3 / GCS / Azure / MinIO 블롭 백엔드
- 인증 기본 활성화(익명 읽기 허용, 모든 쓰기 및 관리 작업 시 인증 필수, 내장 사용자 또는 OIDC 연동, 최초 부팅 시 인스턴스별 유일한 랜덤 관리자 비밀번호 생성)
- abyo software 지원 ([email protected], 영업일 기준 1일 내 첫 피드백 제공, Private Offer를 통한 Enterprise 티어는 Critical 이슈에 대해 1시간 내 회신하는 24/7 SLA 포함)
주요 활용 사례
JVM과 외부 데이터베이스를 가동하지 않는 단일 바이너리로 Nexus나 Artifactory를 교체하려는 팀
기존 Maven, npm, pip, cargo, docker, helm 클라이언트 구성을 변경하지 않고 그대로 작동하는 wire-compatible 아티팩트 리포지토리를 사용하려는 경우
CI/CD 파이프라인을 위한 부팅이 빠르고 오버헤드가 적은 단일 노드 패키지 레지스트리
익명 읽기를 허용하면서 인증으로 쓰기를 보호하는 퍼블릭 미러 지원 리포지토리 운영
자주 묻는 질문
어떤 패키지 에코시스템이 지원되나요?
v0.1.0은 18개 프로토콜 중 12개를 in-tree 적합성 테스트와 함께 완전히 연결했습니다: Maven, npm, OCI / Docker Registry v2, PyPI (PEP 503 family), Cargo (sparse index), Go module proxy, Raw/Generic, NuGet v3, RubyGems (Compact Index), Helm (classic + OCI), APT, YUM/DNF. 남은 6개(Conan, Conda, CRAN, Hex, CocoaPods, Bazel)는 범위 선언만 되어 있으며 현재 501을 반환합니다. 솔직히 말씀드리면, 이 미구현 프로토콜들은 아직 작동하지 않습니다.
정말 JVM과 외부 데이터베이스가 필요 없나요?
맞습니다. FerroRepo는 JVM이 없는 단일 프로세스로 실행되며, 메타데이터는 내장형 SQLite 데이터베이스에, 블롭은 로컬 볼륨 또는 객체 스토리지에 유지합니다. 운영할 외부 데이터베이스는 없습니다. 기존의 Nexus나 Artifactory가 단 하나의 아티팩트를 서비스하기 전에도 JVM, 기가바이트 단위의 힙, 외부 데이터베이스를 필요로 하는 반면, FerroRepo는 이를 단일 하드닝된 바이너리로 대체하여 소형 인스턴스에서 1초 미만으로 부팅됩니다.
스토리지는 어떻게 구성되나요?
스토리지는 콘텐츠 주소 지정 방식의 블롭 중복 제거 기능이 있는 계층형 hot/warm/cold 방식입니다. 블롭 백엔드는 object_store를 통해 S3 / GCS / Azure / MinIO 간에 플러그인 형태로 교체 가능하며, 메타데이터는 내장형 SQLite에 저장됩니다.
인증은 어떻게 작동하나요?
인증은 기본적으로 활성화되어 있으며 보안이 기본(secure-by-default)으로 설정되어 있습니다. 익명 읽기는 허용되지만, 모든 쓰기 및 관리 작업에는 적절한 권한 범위를 가진 인증된 보안 주체(principal)가 필요합니다. 내장 사용자 또는 외부 OIDC 발급자와의 연동을 지원하며, 첫 부팅 시 각 인스턴스에 고유한 임의의 admin 비밀번호가 생성됩니다. 기본 비밀번호나 공유 비밀번호는 절대 사용되지 않습니다.
여러 노드로 확장할 수 있나요?
현재는 불가능합니다. 지원되는 토폴로지는 SQLite 메타데이터와 S3의 블롭 계층을 사용하는 단일 노드(단일 바이너리)입니다. 수평 확장되는 멀티 노드 / Postgres 메타데이터 토폴로지는 로드맵에 있으며 아직 지원되지 않습니다. 솔직히 말씀드리면, 현재로서는 멀티 노드 구성이 제공되지 않습니다.
요금제 모델
시간당 software fee + EC2(t4g / c7g / m7g / r7g class, Arm). instance type별 metered 과금.