728x90
1️⃣ 도입: 왜 직접 파일 서버를 구축했는가?
평소 AWS S3를 자주 쓰긴 했지만, 이번엔 비용 없이 내 서버에서 직접 이미지 파일을 저장하고 관리해보고 싶었다.
집에 상시 가동되는 서버가 있으니, Docker 기반의 파일 서버를 올려서 MSA 프로젝트의 이미지 업로드용 저장소로 써보기로 했다.
2️⃣ 선택: MinIO를 고른 이유
항목설명
| ✅ S3 API 호환 | Spring에서 기존 S3 클라이언트 그대로 사용 가능 |
| ✅ Docker로 빠른 배포 | docker-compose만 있으면 끝 |
| ✅ Web UI 지원 | 웹에서 파일 업로드/삭제까지 가능 |
| ✅ 정책 기반 접근 제어 | 버킷 단위 public/private 설정 가능 |
| ✅ 무료 | Community Edition으로 충분히 쓸 수 있음 |
3️⃣ 구성: Docker Compose로 MinIO 실행
services:
minio:
image: minio/minio
container_name: minio
ports:
- "9000:9000" # S3 API
- "9001:9001" # Web UI
volumes:
- ./minio-data:/data
environment:
MINIO_ROOT_USER: ${MINIO_USER}
MINIO_ROOT_PASSWORD: ${MINIO_PASSWORD}
command: server /data --console-address ":9001"
networks:
- msa-net
networks:
msa-net:
external: true
📁 .env
MINIO_USER=minioadmin
MINIO_PASSWORD=minioadmin
4️⃣ 연동: Spring Boot에서 MinIO 사용하기
implementation 'io.minio:minio:8.5.6'
🛠 설정
minio:
url: http://minio:9000
access-key: minioadmin
secret-key: minioadmin
bucket: changhome
⚙️ 구성 클래스
@Bean
public MinioClient minioClient() {
return MinioClient.builder()
.endpoint(url)
.credentials(accessKey, secretKey)
.build();
}
5️⃣ 문제: public 접근이 안 되는 이유?
- MinIO 최신 Web UI에서는 Edit Policy 기능이 비활성화된 경우가 있음
- 그래서 CLI 도구인 mc를 설치해서 해결
✅ CLI로 public-read 정책 적용
mc alias set local http://localhost:9000 minioadmin minioadmin
mc anonymous set download local/changhome
6️⃣ 결과: 완성된 나만의 파일 서버
- Spring Boot에서 업로드 API 호출
- MinIO에 저장되고,
- Public 이미지 URL을 바로 반환!
- 향후 S3로 바꾸고 싶을 땐 config만 바꾸면 끝 👌
7️⃣ 마무리: 느낀 점
AWS S3를 대체할 수 있는 좋은 툴이다.
단순 테스트 용도로도 좋고, 비용 절감/로컬 서버 통합 관점에서도 매우 만족스러움.
특히 MSA 환경에서 이미지 처리 전용 파일 서버로 도입해볼 만하다.
MinIO 공식문서: https://min.io/docs/minio
'회고' 카테고리의 다른 글
| Kafka를 도입해 MSA 트래픽 병목을 해결한 실전 경험기 (3) | 2025.07.31 |
|---|---|
| 💥 Spring Boot에서 JSON + 이미지 업로드 시 @RequestPart, @ModelAttribute 삽질기 (1) | 2025.07.27 |
| AWS Free Tier 한계, 이렇게 극복했다 – 집 PC로 완성한 MSA + 자동 배포 환경 (7) | 2025.07.23 |
| 🚀 GitHub Actions + Self-Hosted Runner로 MSA 서비스 CI/CD 구축기 (3) | 2025.07.22 |