MSA로 전환하면 DB, 캐시뿐 아니라
👉 파일 저장 전략도 반드시 분리해야 한다.

많은 시스템이 초기에 이렇게 시작한다.

Service → Local File System (/uploads)
 

하지만 서비스가 확장되는 순간 문제가 터진다.

  • 서버마다 파일 불일치
  • 스케일 아웃 불가
  • 배포 시 파일 유실
  • CDN 연계 어려움

이 문제를 해결하는 핵심이 바로
👉 Object Storage (MinIO)다.


📌 MinIO란 무엇인가

MinIO는 S3 API를 지원하는 오픈소스 Object Storage다.

👉 특징

  • AWS S3 호환
  • 고성능 (Go 기반)
  • On-premise 구축 가능
  • 분산 스토리지 지원
  • 대용량 파일 처리 최적화

즉,
👉 **“파일을 DB가 아닌 스토리지로 분리하는 구조”**를 만든다.


📌 왜 MSA에서 MinIO가 필요한가

MSA의 본질은 책임 분리다.

  • DB → 정형 데이터
  • Redis → 상태/캐시
  • MinIO → 파일

잘못된 구조:

Order Service → DB (이미지 저장)
 

올바른 구조:

Order Service → MinIO (파일 저장)
→ DB (메타데이터)
 

👉 역할 분리

  • DB: 파일 정보 (URL, size, type)
  • MinIO: 실제 파일

📌 MinIO가 빛을 발하는 5가지 핵심 영역


1. 파일 저장 분리 (File Storage Decoupling)

기존:

Service → Local Disk
 

문제:

  • 서버마다 파일 다름
  • 확장 불가

MinIO 적용:

Service → MinIO
 

👉 효과

  • 모든 서비스에서 동일 파일 접근
  • Stateless 구조 유지
  • 서버 확장 자유

2. Presigned URL 기반 업로드

MSA에서 중요한 포인트:

👉 파일은 서버를 거치지 않는다

흐름:

Client → Service (URL 요청)
→ MinIO Presigned URL 발급
Client → MinIO 직접 업로드
 

👉 효과

  • 서버 부하 감소
  • 대용량 파일 처리 가능
  • 트래픽 절감

👉 핵심
“파일은 API 서버를 통과시키지 않는다”


3. 대용량 파일 처리

예:

  • PDF
  • ZIP
  • 영상
  • 연구 데이터

MinIO는:

  • Multipart Upload 지원
  • 스트리밍 다운로드
  • 병렬 업로드

👉 효과

  • 안정적인 파일 처리
  • 네트워크 효율 증가

4. 이벤트 기반 처리 (Event-driven)

MinIO는 이벤트 발행이 가능하다.

파일 업로드 → Event 발생 → Service 처리
 

활용:

  • 이미지 리사이징
  • PDF 파싱
  • 바이러스 검사
  • 메타데이터 추출

👉 효과

  • 비동기 처리
  • 서비스 간 결합도 감소

5. 보안 및 접근 제어

MinIO는 정책 기반 접근 제어 제공

  • Bucket 정책
  • 사용자별 권한
  • Presigned URL 만료

👉 효과

  • 외부 접근 통제
  • 임시 다운로드 링크
  • 보안 강화

📌 Redis vs MinIO 역할 비교

구분                                           Redis                                                         MinIO
목적 캐시 / 상태 파일 저장
데이터 Key-Value Object (파일)
TTL 있음 없음
사용 예 세션, 락, 캐시 이미지, PDF, 영상

👉 핵심
Redis는 “빠른 데이터”, MinIO는 “큰 데이터”


📌 실무 아키텍처 예시

[ Client ]

[ API Gateway ]

┌───────────────┬───────────────┐
│ User Service │ File Service │
└───────────────┴───────────────┘

[ MinIO ]

[ DB ]
 

📌 실무 적용 포인트


1. 파일 서비스 분리 (File Service)

권장:

file-service
 

역할:

  • 업로드 URL 발급
  • 다운로드 URL 생성
  • 파일 메타데이터 관리

👉 다른 서비스는 직접 MinIO 접근 금지


2. Bucket 전략 설계

예:

user-profile/
product-image/
documents/
temp/
 

👉 환경별 분리

  • dev / stage / prod

3. 파일 메타데이터 관리

DB에는 반드시 저장

file_id
file_name
content_type
size
url
created_at
 

👉 파일과 DB 정합성 유지


4. CDN 연계 고려

MinIO 앞단에 CDN 붙이면:

  • 글로벌 서비스 가능
  • 다운로드 속도 개선

5. 삭제/정합성 전략

문제:

  • DB에는 있는데 파일 없음
  • 파일은 있는데 DB 없음

👉 해결

  • Soft delete
  • 정기 배치 정리
  • 이벤트 기반 동기화

📌 언제 MinIO를 써야 하는가

✔ 추천

  • 이미지/파일 업로드 서비스
  • 연구 데이터 / 문서 관리
  • 대용량 파일 처리
  • SaaS 서비스

❌ 비추천

  • 파일 거의 없는 시스템
  • 단순 CRUD API

📌 결론

MSA에서 파일을 서비스에 붙여두는 순간
👉 확장성과 안정성은 무너진다.

MinIO를 도입하면:

  • 파일 저장 분리
  • 서버 Stateless 유지
  • 대용량 처리 가능

📌 한 줄 정리

👉 “파일은 DB가 아니라 Object Storage에 맡겨라”

LIST

+ Recent posts