Search

S3 연동 가능한 분산 스토리지 MinIO 구축

생성일
2025/04/27 12:50
태그
AI 요약
날짜
상위 항목
하위 항목

1. 도입 배경

스트리밍 플랫폼에서 채팅을 수집하고 분석하는 시스템을 구축하고 있었다.
채널별 오디오 데이터도 함께 수집하여 Whisper 모델로 변환하고, 이를 기반으로 추가 분석을 하고자 했다.

2. 초기 문제 인식

오디오 파일이 매우 많이 쌓일 예정이었다. (하루 약 15만 건 예상)
파일 저장을 위해 고민했는데, NestJS 서버 로컬에 저장하는 방식은 확장성과 관리 측면에서 한계가 명확했다.
클라우드 스토리지(AWS S3)를 검토했지만
저장 비용
요청 트래픽 비용
업무적으로 이미 사용하고 있고 얼마나 많은 비용이 나오는지 체감하고 있었

3. 대안 탐색

자체 S3 호환 스토리지를 구축할 방법을 검토했다.
대표적인 오픈소스 솔루션으로 MinIO를 발견했다.
MinIO는
S3 API 100% 호환
Docker 기반으로 손쉽게 구축 가능
단일 서버 또는 클러스터 구성이 자유로움
빠른 속도와 높은 관리 유연성을 제공
"S3와 같은 경험을 로컬 환경에서도 거의 비용 없이 얻을 수 있다"는 점에서 채택을 결정했다.

4. MinIO 구축 결정

초기에는 단일 서버 구성이 충분히 적합하다고 판단했다.
데이터 손실을 방지하고 컨테이너 수명과 무관하게 데이터를 유지하기 위해 Docker Named Volume을 사용하기로 했다.

5. 최종 선택 이유

항목
판단 근거
파일 저장비 절감
AWS S3 대비 월 수십~수백 달러 절감 가능
인프라 독립성 확보
클라우드 종속 없이 자체 인프라로 운영 가능
확장성 고려
필요하면 MinIO 분산모드로 확장 가능
개발/운영 편의성
기존 AWS S3 SDK를 그대로 재활용할 수 있어 개발비용 최소화 가능

6. 최종 요약

파일 저장을 효율적이고 경제적으로 관리하고 싶었고,
클라우드 비용과 종속성을 줄이기 위해 자체 오브젝트 스토리지를 구축했다.
MinIO를 선택하고, Docker Volume을 사용해 데이터 영속성까지 확보했다.
현재 구조는 NestJS 서버가 MinIO에 오디오 파일을 업로드하고, Whisper 서버가 이를 가져와 분석하는 구조로 설계되어 있다.

MinIO 서버 생성 방법

1. Docker 설치

이미 설치되어 있으면 스킵
설치 방법 (Mac 기준):
brew install --cask docker
Shell
복사

2. Docker Named Volume 생성

데이터 손실 방지용 전용 볼륨 생성:
docker volume create minio-data
Shell
복사

3. MinIO 컨테이너 생성

명령어:
docker run -d \ --name minio \ -p 9000:9000 \ -p 9001:9001 \ -e MINIO_ROOT_USER=minioadmin \ -e MINIO_ROOT_PASSWORD=minioadmin \ -v minio-data:/data \ minio/minio server /data --console-address ":9001"
Shell
복사
주요 포인트:
9000 포트 → S3 API
9001 포트 → 웹 콘솔
minio-data 볼륨 → 오브젝트 저장
ID/PW: minioadmin / minioadmin

4. MinIO 접속

웹 콘솔 URL:
http://localhost:9001
Plain Text
복사
로그인 후 버킷 생성 가능