피드로 돌아가기
Dev.toInfrastructure
원문 읽기
MinIO 대체 위해 .NET 10 기반 SQLite 단일 바이너리 S3 저장소 ObjeX 구축
Announcing ObjeX | We Built Our Own S3
AI 요약
Context
MinIO의 오픈소스 라이선스 변경 및 메인테인 유지 중단으로 인한 인프라 불확실성 증대. Erasure Coding이나 Multi-node Cluster 같은 복잡한 분산 저장 기능 없이 단일 서버 환경에서 S3 API 호환성만 필요한 경량 요구사항 발생.
Technical Solution
- .NET 10 및 Blazor Server 기반의 Single Process 구조를 통한 API 서버와 관리 UI의 통합 배포
- SQLite 기반의 메타데이터 관리와 Local File System 저장을 결합한 Zero-Dependency 아키텍처 설계
- SHA256 해시 기반의 2-level Directory Tree 구조를 적용하여 Logical Key와 물리 경로를 분리함으로써 Path Traversal 공격을 원천 차단
- Temporary File 작성 후 File.Move를 수행하는 Atomic Write 방식을 통한 업로드 중단 시 데이터 정합성 보장
- AWS Signature V4 표준을 직접 구현하여 aws-cli 및 boto3 등 표준 S3 Client와의 완전한 호환성 확보
- Prometheus Metrics 엔드포인트 및 Multi-arch Docker Image 제공을 통한 클라우드 네이티브 환경의 관측성 및 이식성 확보
실천 포인트
- 불필요한 Distributed Feature를 제거하고 단일 노드 최적화 설계를 통한 인프라 복잡도 감소 검토 - 보안 강화를 위해 사용자 입력 키를 직접 파일 경로로 사용하지 않고 Hash 기반의 가상 디렉터리 구조 채택 - 데이터 무결성을 위해 쓰기 작업 시 Temporary File 기반의 Atomic Update 패턴 적용