오브젝트 스토리지와 S3 · 파일시스템 vs 오브젝트 스토리지 · 실습
mc 로 버킷과 객체 다루기
목표
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.png 를 local/lab-media/img/logo.png 로 올린다.
4. /opt/fixtures/s3/ 의 banner.png 를 img/banner.png 로, readme.txt 를 doc/readme.txt 로, sales.csv 를 doc/sales.csv 로 올린다.
5. mc ls --recursive local/lab-media 결과를 /root/s3/list.txt 에 저장한다. 정확히 4줄이어야 한다.
6. /root/s3/etag.txt 에 etag=<값> 과 md5=<값> 두 줄을 적는다. logo.png 의 ETag(따옴표 제거)와 로컬 파일 md5 가 같아야 한다.
7. doc/readme.txt 를 doc/README.txt 로 서버 사이드 복사한 뒤 원본을 지운다. mc ls local/lab-media/doc/ 에 README.txt 만 있고 readme.txt 는 없어야 한다.
8. sales.csv 를 text/csv Content-Type 으로 다시 올린다. mc stat local/lab-media/doc/sales.csv 출력에 text/csv 가 보여야 한다.
참고
- 별칭 확인:
mc alias list - 재귀 목록:
mc ls --recursive local/lab-media - Content-Type 지정:
mc cp --attr "Content-Type=text/csv" 파일 local/버킷/키 - 흔한 실수 1: 버킷 이름에 대문자나 밑줄을 쓰는 것 — DNS 규칙을 따릅니다.
- 흔한 실수 2:
img/를 폴더로 착각해 따로 만들려는 것 — 키 이름의 일부일 뿐입니다.
단계 8개
- S3 별칭 설정하기
- 버킷 만들기
- 객체 하나 올리기
- 접두어로 정리하기
- 재귀 목록 뽑기
- ETag 와 로컬 해시 비교하기
- 서버 사이드 복사 후 원본 지우기
- Content-Type 지정해 올리고 확인하기