본문 바로가기
SingleStoreDB/Support Bulletin

MinIO 설치부터 SingleStore USD 연동까지 - [Support Bulletin 15]

by 에이플랫폼 [Team SingleStore Korea] 2025. 9. 9.

안녕하세요! 에이플랫폼 Support Bulletin의 열다섯 번째 이야기입니다. 😊

모든 데이터를 한 곳에서, 빠르고 유연하게 처리하는 것. 많은 분들이 SingleStore를 통해 이루고 싶은 목표일 텐데요. 특히 대용량 데이터를 S3와 같은 오브젝트 스토리지에 저장하고, DB 테이블처럼 자유롭게 활용할 수 있게 해주는 SingleStore의 USD 기능은 그 핵심이라 할 수 있습니다.

이번 글에서는 바로 이 USD 기능을 200% 활용하기 위한 실용적인 가이드를 준비했습니다. 온프레미스 환경에서도 S3처럼 손쉽게 오브젝트 스토리지를 구축할 수 있는 인기 오픈소스인 MinIO를 활용하여 오브젝트 스토리지를 구축하고, 이를 SingleStore에 연동하는 과정을 알기 쉽게 보여드리겠습니다.

 

※ 중요: 현재 MinIO는 SingleStore의 공식 인증(Certified) 스토리지가 아니므로, 본 가이드는 개발 및 테스트 목적으로만 활용하시기를 권장합니다. 실제 운영(Production) 환경에서의 사용은 적절하지 않을 수 있습니다.

 

MinIO란?

MinIO는 아주 간단히 말해 '나만의 S3를 만드는 소프트웨어'라고 할 수 있습니다.

AWS의 S3(Simple Storage Service)는 가장 대표적인 오브젝트 스토리지 서비스지만, 이는 AWS라는 특정 클라우드 환경에서만 사용할 수 있습니다.

만약 우리 회사 서버실(온프레미스)이나 지정된 프라이빗 클라우드 환경에서 S3와 동일한 방식의 오브젝트 스토리지를 구축하고 싶다면 어떻게 해야 할까요? 바로 그럴 때 사용하는 것이 오픈소스인 MinIO입니다.

MinIO는 분산 오브젝트 스토리지 시스템으로, 다음과 같은 핵심적인 특징을 가지고 있습니다.

  • S3 API 호환: MinIO의 가장 큰 장점입니다. AWS S3를 다루기 위해 만들어진 거의 모든 도구나 SDK(소프트웨어 개발 키트)를 코드 변경 없이 MinIO에 그대로 사용할 수 있습니다. 개발자들은 익숙한 방식으로 온프레미스에 구축된 스토리지를 활용할 수 있어, 개발 환경과 운영 환경의 일관성을 유지하기 용이합니다.
  • 가볍고 간단한 설치: MinIO는 Go 언어로 개발되어 단일 실행 파일 형태로 제공됩니다. 복잡한 종속성 없이 하드웨어나 가상 환경에도 빠르고 간단하게 설치하여 실행할 수 있습니다. 쿠버네티스(Kubernetes)와 같은 클라우드 네이티브 환경과도 잘 호환됩니다.
  • 높은 성능과 확장성: MinIO는 대규모 데이터를 처리하기 위해 설계되었습니다. 여러 서버의 디스크를 하나로 묶어 거대한 스토리지 풀을 구성(분산 모드)할 수 있으며, 이를 통해 페타바이트(PB) 규모까지 손쉽게 확장할 수 있습니다. 또한, 데이터 보호를 위해 복제 방식보다 효율적인 이레이저 코딩(Erasure Coding) 기술을 사용하여 안정성을 높입니다.

결론적으로 MinIO는 클라우드에 종속되지 않고, 우리가 원하는 다양한 환경에서든 S3와 동일한 경험을 제공하는 오브젝트 스토리지 솔루션입니다. 그렇기 때문에 SingleStore의 USD 기능과 결합하여 온프레미스 환경의 대용량 데이터를 효율적으로 관리할 수 있습니다.


MinIO설치

MinIO의 개념에 대해 알아보았으니, 이제 직접 설치해 볼 차례입니다.

MinIO의 큰 장점 중 하나는 설치 과정이 간단하다는 점입니다.

이 가이드에서는 On-premise를 기준으로 MinIO 서버를 빠르고 간단하게 실행하는 방법을 단계별로 안내합니다.

아래 절차를 따라 차근차근 진행해 보세요.

⚠️테스트 환경 (VM)
OS: Rocky 9.6
4 vCPU, 8GB RAM
MinIO version RELEASE.2025-09-07T16-13-09Z
MinIO Server의 기본 포트는 9000(server)/9090(console) 이지만, 30191, 30192 포트를 사용했습니다.
  • 방화벽 오픈 (사용 port 확인 필요)
# default
# sudo firewall-cmd --permanent --zone=public --add-port=9000/tcp # server
# sudo firewall-cmd --permanent --zone=public --add-port=9090/tcp # console 

sudo firewall-cmd --permanent --zone=public --add-port=30191/tcp
sudo firewall-cmd --permanent --zone=public --add-port=30192/tcp

sudo firewall-cmd --reload

1. Download (최신버전)

MinIO를 구성할 서버 https://min.io/open-source/download#/linux 에서 architecture에 맞는 설치 파일을 선택해주세요.

wget https://dl.min.io/server/minio/release/linux-amd64/minio
chmod +x minio
sudo mv minio /usr/local/bin

# 설치 확인
minio --version
  • (선택) 파일들을 관리할 OS 그룹 및 유저 생성

시스템 그룹, 계정으로 생성하는 예시이며, 필요시 일반 계정으로 생성해도 됩니다.

# -r : system account
sudo groupadd -r minio-user

# -M : no-create-home / -r : system account
sudo useradd -M -r -g minio-user minio-user

2. 파일들을 관리할 디렉터리 생성

💡아래는 /data/minio를 예로 들었습니다.
운영환경 또는 장시간 테스트 목적이라면 분리된 파일 시스템 사용을 권장합니다.
sudo mkdir /data/minio
sudo chown -R minio-user:minio-user /data/minio/

 


3. 설정 파일 생성

변수명
설명
MINIO_VOLUMES
minio 서버에 사용할 스토리지 볼륨 또는 경로
MINIO_OPTS
minio 서버와 콘솔에 대한 address. (서버의 default port: 9000, 9090)
본 예시에서는 30191, 30192 사용
MINIO_ACCESS_KEY
minio 접속 아이디
MINIO_SECRET_KEY
minio 접속 비밀번호
# address에 사용할 IP는 해당 시스템의 정보로 대체합니다.
sudo vi /etc/default/minio
>>>
MINIO_VOLUMES="/data/minio/"
# default 일 경우 MINIO_OPTS 생략 가능
MINIO_OPTS="--address {Server_IP}:30192 --console-address {Server_IP}:30191"
MINIO_ACCESS_KEY=minioadmin
MINIO_SECRET_KEY=minioadmin
  • (선택) 보안 강화를 위해 랜덤한 KEY (AWS style)를 생성하여 사용할 수도 있습니다.
# ACCESS_KEY용 20byte
openssl rand -hex 10

# SECRET_KEY용 40byte
openssl rand -base64 30
 

4. Systemd 등록

환경에 맞게, minio.sevice 파일을 수정해주세요.

sudo vi /etc/systemd/system/minio.service
>>>
[Unit]
Description=MinIO
Documentation=https://min.io/docs/minio/linux/index.html
Wants=network-online.target
After=network-online.target
AssertFileIsExecutable=/usr/local/bin/minio

[Service]
WorkingDirectory=/usr/local

User=minio-user
Group=minio-user
ProtectProc=invisible

# "=-" : 해당 파일이 없어도 오류로 간주하지 않음
EnvironmentFile=-/etc/default/minio
ExecStartPre=/bin/bash -c "if [ -z \"${MINIO_VOLUMES}\" ]; then echo \"Variable MINIO_VOLUMES not set in /etc/default/minio\"; exit 1; fi"
ExecStart=/usr/local/bin/minio server $MINIO_OPTS $MINIO_VOLUMES

# MinIO RELEASE.2023-05-04T21-44-30Z adds support for Type=notify (https://www.freedesktop.org/software/systemd/man/systemd.service.html#Type=)
# This may improve systemctl setups where other services use `After=minio.server`
# Uncomment the line to enable the functionality
# Type=notify

# Let systemd restart this service always
Restart=always

# Specifies the maximum file descriptor number that can be opened by this process
LimitNOFILE=65536

# Specifies the maximum number of threads this process can create
TasksMax=infinity

# Disable timeout logic and wait until process is stopped
TimeoutStopSec=infinity
SendSIGKILL=no

[Install]
WantedBy=multi-user.target
  • Minio Service 기동 및 관리
# 서비스 기동
$ sudo systemctl start minio.service

# 서비스 중단
$ sudo systemctl stop minio.service

# 서비스 활성화 (시스템 시작시 자동 기동)
$ sudo systemctl enable minio.service

# service 변경시 서비스 갱신
$ sudo systemctl daemon-reload

# service 상태 확인
$ sudo systemctl status minio.service
 

5. MinIO Client 설치

  • 모든 OS 유저가 사용할 수 있도록 설치 (root 권한 필요) 하는 방법
sudo curl https://dl.min.io/client/mc/release/linux-amd64/mc \
-o /usr/local/bin/mc

sudo chmod +x /usr/local/bin/mc
  • 특정 OS 유저만 사용하도록 설치 하는 방법
curl https://dl.min.io/client/mc/release/linux-amd64/mc \
--create-dirs \
-o $HOME/minio-binaries/mc

chmod +x $HOME/minio-binaries/mc
export PATH=$PATH:$HOME/minio-binaries/

mc --help

# PATH 설정
vi .bash profile
>>>
export PATH=$PATH:$HOME/minio-binaries/

6. alias 생성

master_minio 라는 alias를 생성하는 방법입니다.

mc alias set master_minio http://{Server_IP}:30192 minioadmin minioadmin

7. 버킷 생성

singlestore 라는 이름의 버킷을 생성하는 방법입니다.

mc mb master_minio/singlestore

8. 생성한 MiniO 오브젝트 스토리지를 USD로 활용하기

생성한 MiniO 오브젝트 스토리지를 활용하여 SingleStore USD로 활용하는 방법입니다.

CREATE DATABASE {minio_bucket_db}
ON S3 "s3://singlestore"
CONFIG '{"endpoint_url":"http://{minio_bucket_IP}:30192/"}'
CREDENTIALS '{"aws_access_key_id":"minioadmin","aws_secret_access_key":"minioadmin"}';

7. 버킷 생성 을 참고하여 버킷을 미리 생성 후 SingleStore USD를 생성 해야합니다.

버킷이 없는 상태로 USD를 생성하면 아래와 같은 에러가 발생합니다.

ERROR 2470 (HY000): Leaf Error (10.0.1.7:3306): 'minio_db': Failed to upload 'aaddccac/10684185687710780496_4294153301887608199/ref/api_testing/424029211872098198/singlepart_upload_1' because InvalidBucketName: Unable to parse ExceptionName: InvalidBucketName Message: The specified bucket is not valid. (400)

이번 포스팅에서는 오픈소스 MinIO를 활용하여 오브젝트 스토리지를 구축하고, 이를 SingleStore의 USD 기능과 연동하는 방법을 알아보았습니다.

이를 통해 대규모 데이터를 경제적으로 저장하고 SingleStore에서 직접 다룰 수 있는 강력한 데이터 인프라를 구성할 수 있게 되었습니다.

오늘 소개해 드린 내용이 여러분의 데이터 관리 전략에 새로운 아이디어를 제공했기를 바랍니다.

다음 Support Bulletin에서도 유용한 정보로 찾아뵙겠습니다.

감사합니다.