MinIO는 Amazon S3 API를 소스 코드 수준에서 그대로 구현한 오픈소스 오브젝트 스토리지 서버로, Go 언어로 작성돼 있어 단일 바이너리 하나만 실행하면 몇 초 안에 S3 호환 엔드포인트를 띄울 수 있습니다. 클라우드 요금 없이 로컬 디스크를 S3처럼 다루고 싶거나, 앱을 개발할 때 실제 AWS 계정 없이 S3 API를 테스트하고 싶은 사람들이 특히 많이 찾는 프로젝트인데, 그렇다면 MinIO로 S3 호환 오브젝트 스토리지를 어떻게 직접 운영할 수 있을까요?
MinIO란 무엇인가
MinIO는 AWS S3와 동일한 API 규격을 구현한 오픈소스 오브젝트 스토리지 소프트웨어예요. 오브젝트 스토리지는 파일을 폴더 구조가 아니라 고유 키로 식별되는 개별 오브젝트로 저장하는 방식으로, 대용량 파일을 다루거나 애플리케이션이 코드로 직접 파일을 읽고 쓰는 상황에 특히 잘 맞아요. S3 API가 이미 업계 표준처럼 자리 잡은 덕분에, boto3나 aws-sdk 같은 기존 S3 클라이언트 라이브러리를 코드 한 줄 수정 없이 MinIO 엔드포인트로만 바꿔서 그대로 쓸 수 있다는 게 가장 큰 장점이에요.
어떤 상황에서 MinIO를 쓰게 될까
MinIO를 홈서버에 두는 가장 흔한 이유는 다른 셀프호스팅 서비스의 백업 대상으로 쓰기 위해서예요. Immich나 Paperless-ngx 같은 서비스는 S3 호환 스토리지로 외부 백업을 설정할 수 있는 기능을 내장하고 있어서, 클라우드 비용 없이 로컬 네트워크 안에서 이중 백업 체계를 만들 수 있어요. 또 다른 활용 사례는 개발/테스트 환경이에요. 실제 서비스에서 AWS S3를 쓸 예정이더라도, 개발 단계에서는 요금 걱정 없이 로컬 MinIO 인스턴스로 업로드·다운로드 로직을 검증할 수 있어요.
Docker Compose로 설치하기
MinIO는 Docker Compose 하나로 간단히 설치할 수 있고, API 포트와 관리 콘솔 포트를 분리해서 노출해요.
services:
minio:
image: minio/minio:latest
command: server /data --console-address ":9001"
ports:
- "9000:9000"
- "9001:9001"
environment:
MINIO_ROOT_USER: admin
MINIO_ROOT_PASSWORD: change-this-strong-password
volumes:
- minio_data:/data
volumes:
minio_data:
9000번 포트는 S3 API 엔드포인트, 9001번 포트는 버킷 생성과 정책 관리를 할 수 있는 웹 콘솔이에요. 컨테이너를 띄운 뒤 콘솔에 접속해서 버킷을 만들고 액세스 키를 발급하면 바로 S3 클라이언트로 연결할 수 있어요.
버킷 정책으로 접근 권한 제어하기
버킷 정책은 어떤 사용자나 애플리케이션이 특정 버킷에 접근할 수 있는지를 JSON 형식으로 정의하는 규칙이에요. 읽기 전용 정책을 만들어서 백업을 저장만 하고 삭제는 못 하게 제한할 수도 있고, 특정 IP 대역에서만 접근을 허용하는 정책도 만들 수 있어요. mc(MinIO Client) CLI를 쓰면 이런 정책을 명령어 한 줄로 적용할 수 있어서, 서비스마다 최소 권한 원칙에 맞는 전용 액세스 키를 발급해 운영하는 게 안전해요.
# mc로 MinIO 서버 등록
mc alias set homelab http://localhost:9000 admin change-this-strong-password
# 버킷 생성
mc mb homelab/immich-backup
# 읽기 전용 정책 적용
mc anonymous set download homelab/immich-backup
erasure coding으로 디스크 중복성 확보하기
erasure coding은 MinIO가 여러 디스크에 데이터를 분산 저장하면서 일부 디스크가 손상되더라도 나머지 조각으로 원본 데이터를 복원할 수 있게 해주는 기술이에요. RAID와 비슷한 목적이지만 디스크가 아니라 오브젝트 단위로 동작한다는 점이 다르고, 최소 4개의 드라이브를 구성해야 실질적인 중복성을 얻을 수 있어요. 단일 디스크로 운영하는 홈랩 환경이라면 erasure coding의 이점을 온전히 누리기 어렵지만, 여러 디스크를 MinIO에 직접 연결할 수 있다면 별도의 RAID 컨트롤러 없이도 소프트웨어 레벨에서 데이터 안정성을 높일 수 있어요.
결론
MinIO는 AWS 계정이나 클라우드 비용 없이도 S3 API와 완전히 동일한 방식으로 오브젝트 스토리지를 운영할 수 있게 해주는 오픈소스 소프트웨어예요. 다른 셀프호스팅 서비스의 백업 대상으로 쓰든, 개발 환경의 S3 엔드포인트로 쓰든 Docker Compose 하나로 몇 분 안에 준비를 마칠 수 있어요. MinIO에 쌓인 데이터를 다시 rclone으로 외부 클라우드에 한 번 더 복제하거나 TrueNAS Scale 위의 스토리지 풀과 연계하면, 홈랩의 백업 전략을 한 단계 더 탄탄하게 만들 수 있어요.
자주 묻는 질문
Q1. MinIO를 쓰려면 AWS 계정이 필요한가요?
아니요, MinIO는 AWS와 완전히 독립적인 오픈소스 소프트웨어라서 AWS 계정 없이도 S3 API와 동일한 방식으로 오브젝트 스토리지를 운영할 수 있어요.
Q2. MinIO에 저장한 데이터를 AWS S3로 옮길 수 있나요?
네, S3 API를 그대로 구현하고 있어서 mc(MinIO Client)나 rclone 같은 도구로 MinIO와 AWS S3 사이에 데이터를 자유롭게 마이그레이션할 수 있어요.
Q3. 디스크 한 개로도 erasure coding을 쓸 수 있나요?
아니요, erasure coding은 여러 디스크에 데이터를 분산 저장하는 방식이라서 최소 4개 이상의 디스크나 드라이브가 있어야 실질적인 중복성을 확보할 수 있어요.
Q4. Immich나 Paperless-ngx의 백업 대상으로 바로 쓸 수 있나요?
네, 두 서비스 모두 S3 호환 스토리지를 백업 대상으로 지원해서 MinIO의 엔드포인트 주소와 액세스 키만 입력하면 별도 설정 없이 바로 연동할 수 있어요.
Q5. 버킷 정책은 어떻게 관리하나요?
MinIO 콘솔 웹 UI나 mc 명령어로 버킷별 읽기/쓰기 권한, IP 제한, 만료 정책 같은 세부 정책을 JSON 형식으로 정의하고 적용할 수 있어요.
Q6. 운영 환경에서도 MinIO를 믿고 쓸 수 있나요?
네, MinIO는 대규모 데이터 인프라를 다루는 여러 기업에서도 실제 운영 환경에 사용하는 검증된 소프트웨어지만, 홈랩 규모에서는 단일 노드 구성만으로도 충분한 안정성을 얻을 수 있어요.
관련 글


