LabHub

오브젝트 스토리지와 S3 · 파일시스템 vs 오브젝트 스토리지 · 실습

mc 로 버킷과 객체 다루기

LabHub 에서 이어서 보기

목표

S3 호환 스토리지의 기본 조작 — 별칭, 버킷, 객체 업로드, 접두어, 목록, ETag, 복사, 메타데이터 — 를 손으로 익히고 오브젝트 스토리지에 디렉터리가 없다는 사실을 체감한다.

왜 중요한가

S3 API 를 이해하는 것은 특정 벤더를 배우는 일이 아닙니다. AWS S3, MinIO, SeaweedFS, Garage, Ceph RGW 가 전부 같은 API 를 말하기 때문에, 이 API 는 사실상의 이식성 계층입니다. 실제로 2025~2026년 MinIO 커뮤니티 에디션이 배포를 중단했을 때 애플리케이션 쪽 이주 비용이 크지 않았던 이유가 이것입니다 — 엔드포인트와 자격 증명만 바꾸면 코드는 대체로 그대로였습니다. 이 실습에서 특히 기억할 것은 6번 스텝의 ETag 입니다. 단일 파트 업로드에서 ETag 는 내용의 md5 이고, 그래서 업로드가 온전했는지 클라이언트가 스스로 검증할 수 있습니다. 다음 실습에서 멀티파트 업로드의 ETag 가 이것과 어떻게 달라지는지를 다룰 때, 여기서 본 규칙이 출발점이 됩니다.

단계

1. mc alias set local http://127.0.0.1:9000 <액세스키> <시크릿키> 로 별칭을 만든다. 자격 증명은 /opt/fixtures/s3/creds.env 에 있다. mc ls local 이 오류 없이 끝나야 한다.
2. 버킷 lab-media 를 만든다. mc ls local 목록에 나타나야 한다.
3. /opt/fixtures/s3/logo.pnglocal/lab-media/img/logo.png 로 올린다.
4. /opt/fixtures/s3/banner.pngimg/banner.png 로, readme.txtdoc/readme.txt 로, sales.csvdoc/sales.csv 로 올린다.
5. mc ls --recursive local/lab-media 결과를 /root/s3/list.txt 에 저장한다. 정확히 4줄이어야 한다.
6. /root/s3/etag.txtetag=<값>md5=<값> 두 줄을 적는다. logo.png 의 ETag(따옴표 제거)와 로컬 파일 md5 가 같아야 한다.
7. doc/readme.txtdoc/README.txt 로 서버 사이드 복사한 뒤 원본을 지운다. mc ls local/lab-media/doc/README.txt 만 있고 readme.txt 는 없어야 한다.
8. sales.csvtext/csv Content-Type 으로 다시 올린다. mc stat local/lab-media/doc/sales.csv 출력에 text/csv 가 보여야 한다.

참고

단계 8개

  1. S3 별칭 설정하기
  2. 버킷 만들기
  3. 객체 하나 올리기
  4. 접두어로 정리하기
  5. 재귀 목록 뽑기
  6. ETag 와 로컬 해시 비교하기
  7. 서버 사이드 복사 후 원본 지우기
  8. Content-Type 지정해 올리고 확인하기