Bigdata, Minio / API

Jeonghak Cho·2025년 3월 31일

Bigdata

목록 보기
11/30

📗MinIO API 활용

CLI, REST API, SDK를 통해 Minio 버킷에 접근해 보자

  • MinIO API 사용 방법 확인하기
    • CLI 사용하기
    • REST API 사용하기
    • PROGRAMMING SKD 사용하기

🔗[목차]

사전 준비

도커 설치

docker run -d \
  --name minio \
  -p 9000:9000 \
  -p 9001:9001 \
  -e MINIO_ROOT_USER=admin \
  -e MINIO_ROOT_PASSWORD=admin123 \
  -v ~/minio/data:/data \
  quay.io/minio/minio server /data --console-address ":9001"

Access Key, Secret Key 생성

도커 설치 시 사용되는 ROOT 사용자 ID, Password는 웹 콘솔 로그인 시 사용한다. API 호출 시에는 웹콘솔 (localhost:9001)에 접속하여 키를 생성한다. 저장 시 json으로 내려받을 수 있다.

  • ACCESS KEY와 SECRET 생김새
4Kj6Q3rWIrab0PVHGQLh
j980yntyJFvGQuvBC6ItSmeGpA0O3usxSmzHFvG8
  • 다운받은 json
{"url":"http://localhost:9001/api/v1/service-account-credentials","accessKey":"4Kj6Q3rWIrab0PVHGQLh","secretKey":"j980yntyJFvGQuvBC6ItSmeGpA0O3usxSmzHFvG8","api":"s3v4","path":"auto"}

MC ( CLI ) 를 통한 MINIO 접근

설치 (Linux)

curl -O https://dl.min.io/client/mc/release/linux-amd64/mc
chmod +x mc
sudo mv mc /usr/local/bin/

버전 확인

ubuntu@DESKTOP-SCOK45O:~$ mc --version
mc version RELEASE.2025-03-12T17-29-24Z (commit-id=c1d5d4cbb4caf05afef3ea06a91a56bd778336de)
Runtime: go1.24.1 linux/amd64
Copyright (c) 2015-2025 MinIO, Inc.
License GNU AGPLv3 <https://www.gnu.org/licenses/agpl-3.0.html>

minio 서버 등록

ubuntu@DESKTOP-SCOK45O:~$ mc alias set myminio http://localhost:9000 admin admin123
mc: Configuration written to `/home/ubuntu/.mc/config.json`. Please update your access credentials.
mc: Successfully created `/home/ubuntu/.mc/share`.
mc: Initialized share uploads `/home/ubuntu/.mc/share/uploads.json` file.
mc: Initialized share downloads `/home/ubuntu/.mc/share/downloads.json` file.
Added `myminio` successfully.
  • myminio → MinIO 서버의 별칭 (임의로 설정 가능)
  • http://localhost:9000 → MinIO 서버 URL
  • admin / admin123 → Access Key / Secret Key

mc alias set myminio http://localhost:9000 4Kj6Q3rWIrab0PVHGQLh j980yntyJFvGQuvBC6ItSmeGpA0O3usxSmzHFvG8

mc alias set myminio2 http://localhost:9000 4Kj6Q3rWIrab0PVHGQLh j980yntyJFvGQuvBC6ItSmeGpA0O3usxSmzHFvG8

버킷 목록 조회

ubuntu@DESKTOP-SCOK45O:~$ mc ls myminio
[2025-03-25 20:10:51 KST]     0B myjobskill/

신규 버킷 생성

ubuntu@DESKTOP-SCOK45O:~$ mc mb myminio/mybucket
Bucket created successfully `myminio/mybucket`

버킷에 파일 업로드

ubuntu@DESKTOP-SCOK45O:~$ mc cp mybucket.py myminio/mybucket/
...tu/mybucket.py: 292 B / 292 B ┃┃ 23.14 KiB/s 0s

ubuntu@DESKTOP-SCOK45O:~$ mc ls myminio/mybucket/
[2025-03-26 11:52:31 KST]   292B STANDARD mybucket.py

ubuntu@DESKTOP-SCOK45O:~$ mc mb myminio2/mybucket2
Bucket created successfully `myminio/mybucket`

MC 명령어

기본 관리

명령어설명예제
mc alias setMinIO(S3 호환) 서버를 별칭(alias)으로 등록mc alias set myminio http://localhost:9000 admin password
mc alias list등록된 MinIO(S3) 서버 목록 조회mc alias list
mc alias remove등록된 서버(alias) 삭제mc alias remove myminio

버킷 및 파일 관리

명령어설명예제
mc ls버킷 및 파일 목록 조회mc ls myminio/
mc mb새로운 버킷 생성mc mb myminio/mybucket
mc rb버킷 삭제 (비어 있어야 함)mc rb myminio/mybucket
mc rm파일 또는 폴더 삭제mc rm myminio/mybucket/myfile.txt
mc cp파일 복사 (로컬 <-> MinIO 간 복사 가능)mc cp myfile.txt myminio/mybucket/
mc mv파일 이동mc mv myfile.txt myminio/mybucket/
mc stat파일 또는 버킷 정보 조회mc stat myminio/mybucket/myfile.txt
mc find파일 검색mc find myminio/mybucket --name "*.txt"
mc tree버킷 및 폴더 구조 트리 형태로 출력mc tree myminio/mybucket

파일 업로드 및 다운로드

명령어설명예제
mc mirror로컬과 MinIO 간 동기화mc mirror /local/path myminio/mybucket/
mc cat파일 내용 출력mc cat myminio/mybucket/myfile.txt
mc head파일의 앞부분 일부 출력mc head myminio/mybucket/myfile.txt
mc diff두 개의 버킷/디렉터리 차이 비교mc diff myminio/mybucket1 myminio/mybucket2

사용자 및 정책 관리

명령어설명예제
mc policy list버킷 정책 목록 조회mc policy list myminio/mybucket
mc policy set버킷 정책 변경 (public, private, readonly 등)mc policy set public myminio/mybucket
mc admin user add새로운 사용자 추가mc admin user add myminio newuser newpassword
mc admin user list등록된 사용자 목록 조회mc admin user list myminio
mc admin user remove사용자 삭제mc admin user remove myminio newuser

MinIO 서버 관리

명령어설명예제
mc admin infoMinIO 서버 정보 확인mc admin info myminio
mc admin config getMinIO 서버 설정 조회mc admin config get myminio
mc admin config setMinIO 서버 설정 변경mc admin config set myminio logger_webhook enable=on
mc admin service restartMinIO 서버 재시작mc admin service restart myminio
mc admin heal손상된 오브젝트 복구mc admin heal myminio/mybucket

암호화 및 보안

명령어설명예제
mc encrypt set버킷 또는 파일 암호화 활성화mc encrypt set sse-s3 myminio/mybucket
mc encrypt info버킷 또는 파일의 암호화 상태 조회mc encrypt info myminio/mybucket

미들웨어 및 로그 관리

명령어설명예제
mc admin traceMinIO 요청 로그 실시간 조회mc admin trace myminio
mc admin logMinIO 서버 로그 조회mc admin log myminio

버전 및 도움말

명령어설명예제
mc versionmc 버전 확인mc version
mc help전체 명령어 목록 및 설명 확인mc help
mc help <명령어>특정 명령어 사용법 확인mc help cp

AWS-CLI를 통한 MINIO 접근

  • 설치
sudo apt update
sudo apt install unzip curl
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install
  • 버전 확인
ubuntu@DESKTOP-SCOK45O:~$ aws --version
aws-cli/2.25.3 Python/3.12.9 Linux/5.15.167.4-microsoft-standard-WSL2 exe/x86_64.ubuntu.24
  • 실행
ubuntu@DESKTOP-SCOK45O:~$ aws --endpoint-url http://localhost:9000 --no-verify-ssl s3 ls
2025-03-25 20:10:51 myjobskill

s3cmd 를 통한 MINIO 접근

설정

vi .s3cfg

host_base = localhost:9000
host_bucket = myjobskill
access_key = 4Kj6Q3rWIrab0PVHGQLh
secret_key = j980yntyJFvGQuvBC6ItSmeGpA0O3usxSmzHFvG8
use_https = False

버킷 목록 조회

ubuntu@DESKTOP-SCOK45O:~$ s3cmd ls
2025-03-25 11:10  s3://myjobskill

REST API 를 통한 MINIO 접근

AWS의 API 도구를 그래도 사용 하는 Minio 는 REST API 호출 시 AWS Signiture를 만드는 작업이 필요하다. 문제는 Signiture 만드는 과정이 매우 복잡하다. 이 문제 때문에 CLI 도구를 통해 API 호출을 하거나 script 로 minio SDK를 통해 호출하는 방법을 사용하는 것이 효율적이다.

REST API 호출 형태

아래와 같이 REST API 호출 시 AWS Signature V4 서명 생성을 해서 입력을 해야 하나 이 과정이 매우 복잡하고 실수할 가능성이 크다.

curl -X GET \
  -H "Authorization: AWS4-HMAC-SHA256 Credential=minioadmin/$(date +%Y%m%d)/us-east-1/s3/aws4_request, SignedHeaders=host;x-amz-date, Signature=<signature>" \
  -H "x-amz-date: $(date -u +"%Y%m%dT%H%M%SZ")" \
  http://localhost:9000/

aws-cli나 mc 도구는 이 서명 생성을 자동으로 처리하므로, 직접 서명을 생성할 필요 없이 해당 도구들을 사용할 수 있다. 하지만 CLI를 사용하면 매번 프로세스를 실행하는 방식이기 때문에, 그에 따른 성능이나 효율성 문제는 있을 수 있다. 특히 고빈도 요청이나 실시간 처리가 필요한 경우, 프로세스마다 외부 시스템과 통신을 하게 되는 구조가 성능 상 불리할 수 있다.이 문제를 해결하려면, 클라이언트 라이브러리나 API를 직접 호출하는 방식을 사용하여 매번 프로세스를 시작하지 않도록 할 수 있다.

  • 소스 생성
    vi mybucket.py
from minio import Minio
from minio.error import S3Error

client = Minio(
    "localhost:9000",
    access_key="4Kj6Q3rWIrab0PVHGQLh",
    secret_key="j980yntyJFvGQuvBC6ItSmeGpA0O3usxSmzHFvG8",
    secure=False 
)

buckets = client.list_buckets()
for bucket in buckets:
    print(bucket.name)
  • 실행
root@DESKTOP-SCOK45O:~# python3 mybucket.py
myjobskill

문제 발생 시 확인 사항

권한 체크

ubuntu@DESKTOP-SCOK45O:~$ mc alias set local http://localhost:9000 admin admin123
Added `local` successfully.

ubuntu@DESKTOP-SCOK45O:~$ mc admin policy list local
writeonly
consoleAdmin
diagnostics
readonly
readwrite

로그 확인

docker logs minio --tail 50
journalctl -u minio --no-pager --lines=50

0개의 댓글