피드로 돌아가기
Dev.toInfrastructure
원문 읽기
개인 클라우드 저장소를 활용한 0원 기반 Stateless S3-Compatible 게이트웨이 구현
How I Turned My Personal Storage Accounts Into a Massive S3 Bucket for $0
AI 요약
Context
취미 프로젝트 및 마이크로서비스 운영 시 발생하는 Object Storage 비용 부담을 해결하기 위해 기존 개인 클라우드 계정의 유휴 공간을 활용하는 방안 모색. 서버 내 파일 캐싱이나 데이터 보관을 완전히 배제한 100% Stateless 구조의 설계가 필요했던 상황.
Technical Solution
- HTTP 오버헤드 최소화 및 스트리밍 성능 확보를 위해 Express 대신 Fastify 기반의 NestJS 아키텍처 채택
- API 서버, Worker 서버, S3-Compatibility 서버로 역할을 분리한 Monorepo 구조를 통해 관심사 분리 및 확장성 확보
- OpenDAL과 Adapter Pattern을 도입하여 다양한 클라우드 제공자(Google Drive, Mega 등)의 서로 다른 API를 단일 인터페이스로 추상화
- Node.js 및 Fastify의 Native Streaming 기능을 활용하여 S3 요청 데이터를 디스크 저장 없이 타겟 저장소로 즉시 Pipe 하는 Pass-through 구조 설계
- Google Drive의 엄격한 권한 검토 프로세스를 우회하기 위해
drive.file스코프를 적용한 최소 권한 원칙(Least Privilege) 기반의 보안 모델 구현 - OAuth 미지원 제공자의 경우-인-플라이(In-flight) 복호화 방식을 통해 스토리지리스(Storageless) 환경에서의 인증 무결성 유지
실천 포인트
- 이기종 API 통합 시 OpenDAL과 같은 추상화 레이어를 도입하여 도메인 로직과 외부 인터페이스 분리 - 대용량 데이터 전송 시 디스크 I/O 병목을 방지하기 위해 Request-to-Response 스트리밍 파이프라인 구축 - 외부 API 연동 시 과도한 권한 요청 대신 특정 리소스에만 접근하는 좁은 범위의 Scope 설정을 통한 보안 심사 리스크 제거