📦 MinIO 구축 가이드 (Docker)
1. MinIO란?
MinIO는 AWS S3와 호환되는 오브젝트 스토리지 시스템이다.
파일을 디렉토리 구조가 아닌 버킷 기반으로 저장하며, 대용량 데이터를 안정적으로 저장하고 + 빠르게 꺼내는 시스
2. 왜 MinIO를 쓰는가?
- S3 호환 API 제공 →
AWS S3그대로 대체 가능 Docker환경에서 빠르게 구축 가능온프레미스 구축 가능→ 클라우드 없이 자체 인프라 운영 가능- CI/CD 캐시 저장소로 활용
- 권한/버킷 기반 데이터 관리
→ 현재 프로젝트에서는 CI/CD 캐시 저장을 위한 중앙 객체 스토리지로 MinIO를 사용하고 있습니다.
3. 오브젝트 스토리지 핵심 개념
3-1. Object 구조
오브젝트 스토리지는 데이터를 Object 단위로 저장한다.
각 Object는 아래 3가지로 구성된다 ⤵
- Data (실제 파일 내용)
- Metadata (파일 정보)
- Key (고유 식별자)
3-2. Key 기반 저장 구조(핵심)
오브젝트 스토리지의 핵심은 Key 기반 접근 방식이다.
Key → Index Lookup → Object 즉시 반환
# 디렉토리를 탐색하지 않고 Key 하나로 바로 조회
3-3. Key 기반 접근 장점
디렉토리 탐색 없음
- 파일 시스템:
/a/b/c/file.txt경로 탐색 필요 - Object 스토리지:
user/sy_cache→ 바로 접근
3-4. 파일 스토리지 vs 오브젝트 스토리지
| 구분 | 파일 스토리지 | 오브젝트 스토리지 |
|---|---|---|
| 구조 | 트리 (폴더) | Flat 구조 |
| 접근 방식 | 경로 탐색 | Key 기반 |
| 성능 | 경로 깊어지면 느림 | 일정하게 유지 |
| 확장성 | 제한적 | 거의 무제한 |
4. MinIO 구축(Dokcer)
4-1. MinIO Docker Volume
docker volume create sy0218-minio-data
4-2. docker-compose 추가
minio:
image: minio/minio
container_name: minio_server
environment:
MINIO_ROOT_USER: ${MINIO_USER}
MINIO_ROOT_PASSWORD: ${MINIO_PASSWORD}
ports:
- "${MINIO_API_PORT}:9000"
- "${MINIO_CONSOLE_PORT}:9001"
volumes:
- minio_data:/data
command: server /data --console-address ":9001"
networks:
- sy0218
restart: unless-stopped
volumes:
minio_data:
external: true
name: sy0218-minio-data
4-3. MinIO 실행 및 접속
docker compose up -d
- Console UI:
http:{IP}:{MINIO_CONSOLE_PORT}
4-4. Bucket 생성
1) MinIO UI 접속
2) Create Bucket 클릭
3) Buekct 이름 입력: gitlab-ci-cache
4) Create Bucket 클릭
5. 추가 정리
5-1. DB로 파일 저장하면 안되냐?
DB는 조회 성능을 최적화하기 위해 row 기반 구조 + 인덱스 + 트랜잭션 + 로그 관리 중심으로 설계되어 있다.
즉, 데이터의 "검색과 관계 관리"에 최적화된 시스템이다.
DB에 대용량 파일 저장시 발생하는 문제
- blob 데이터가 row 단위로 저장되며 구조가 커짐
- 인덱스/트랜잭션/WAL 부담 증가
- 백업 및 복제 시 전체 성능 저하 발생
- DB 핵심 기능인 조회 성능까지 영향( 페이지 증폭 + 버퍼풀 오염 )
즉, DB는 파일 저장을 위한 구조가 아닌, 데이터 조회 최적화 구조이기 때문에 대용량 파일 저장에는 비효율적이다.
5-2. MinIO가 효율적인 이유
MinIO는 대용량 데이터 저장 + 탐색을 위해 설계된 오브젝트 스토리지 시스템이다.
- Key 기반 저장 구조 → 경로 탐색 없이 즉시 접근
- 대용량 I/O 최적화 → 파일 저장/조회에 집중된 구조
청크 기반 병렬 I/O: 파일을 청크 단위로 나누고 동시에 업로드/다운로드 가능
- 파일 단위 저장 → DB처럼 row/트랜잭션 오버헤드 없음
5-3. 최종 정리
DB는 조회 성능을 최적화 하기 위해 row 기반 구조, 인덱스, 트랜잭션, 로그 관리 중심으로 설계되어 있다. 따라서 대용량 바이너리 파일 저장시 저장 및 백업 비용 증가 + 성능 저하(페이지 증폭 + 버퍼풀 오염)가 발생하는 구조적 비효율이 존재한다.
이런 이유로, 키 기반 저장 구조와 + 청크 기반 병렬 I/O로 대용량 데이터 저장/조회에 최적화된 오브젝트 스토리지인 MinIO를 중앙 저장소로 사용하였습니다.
'CI|CD Pipeline' 카테고리의 다른 글
| GitLab CI/CD 트러블슈팅 모음(CI/CD) (0) | 2026.05.31 |
|---|---|
| Harbor 설치 가이드(CI/CD) (0) | 2026.05.25 |
| GitLab CI 시작하기(CI/CD) (0) | 2026.05.24 |
| GitLab Variables 등록(CI/CD) (0) | 2026.05.24 |