본문 바로가기
CI|CD Pipeline

MinIO 구축 가이드(CI/CD)

by 세용융용융용 2026. 5. 31.

📦 MinIO 구축 가이드 (Docker)



1. MinIO란?

MinIOAWS 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