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
복사
•
로그인 후 버킷 생성 가능