키와 메타데이터로 문서 정리하기

AWSBeginner
지금 연습하기

소개

팀은 S3 버킷 하나에 재무팀과 HR 문서를 저장합니다. 의미 있는 이름과 속성을 지정하고 보고서를 검색한 뒤 최종 정리까지 HR을 보존하면서 재무팀 문서 그룹을 삭제합니다.

먼저 S3에서 파일 저장하고 검색하기를 완료하세요. 새 VM에 CLI 연결과 로컬 문서가 제공되므로 이전 리소스나 개인 자격 증명은 필요하지 않습니다. 명령에는 Terminal을 사용하고 옆의 AWS View 탭에서 저장된 키, 속성, 내용을 비교하세요.

인증 시험 관련 주제

이 실습은 다음 시험 주제에 대한 실습 경험을 제공합니다.

키를 선택하고 팀 문서 업로드하기

이 단계에서는 의미 있는 객체 키로 한 버킷 안에서 두 부서의 문서를 구분합니다.

로컬 디렉터리는 자신의 컴퓨터에 파일을 저장하고 버킷은 S3에 객체를 저장합니다. cd(디렉터리 변경)로 준비된 작업 공간에 들어가세요.

cd /home/labex/project

제공된 documents 디렉터리에는 작은 텍스트 파일 두 개가 있습니다. cat으로 내용을 출력하여 저장할 대상을 확인하세요.

cat documents/revenue.csv
month,revenue
2026-09,42000

CSV 파일은 쉼표로 열을 구분합니다. 여기서는 두 열이 월과 매출이며 이후 각 줄은 하나의 레코드입니다.

cat documents/welcome.txt
Welcome to the reporting team.

aws s3 mb(버킷 생성)로 버킷을 생성하세요. s3://는 로컬 경로가 아닌 스토리지 위치를 식별합니다.

aws s3 mb s3://labex-team-documents

명령은 make_bucket: labex-team-documents를 출력합니다.

재무팀 키는 finance/2026-09/revenue.csv입니다. 슬래시는 이름을 쉽게 그룹화하도록 돕지만 S3가 파일 시스템 디렉터리를 생성하지는 않습니다. 전체 문자열이 하나의 객체 키입니다. 접두사 finance/는 재무팀 문서를 묶고 더 긴 접두사 finance/2026-09/는 그룹을 한 달로 좁힙니다.

Content-Type은 파일의 미디어 형식을 설명하는 표준 메타데이터입니다. text/csv는 쉼표로 구분된 텍스트를 식별합니다. 사용자 지정 메타데이터에는 직접 지정한 설명용 키-값 쌍이 들어갑니다. 여기서 department=finance와 period=2026-09는 보고서를 설명하며 권한을 부여하거나 내용을 변경하지 않습니다.

이 예시는 키의 접두사를 나머지 이름과 구분합니다. 메타데이터는 객체에 속합니다.

키, 접두사, 메타데이터

aws s3 cp는 첫 번째 경로를 두 번째 경로로 복사합니다. --content-type은 형식을 명시적으로 설정합니다. --metadata는 쉼표로 구분한 name=value 쌍을 받습니다. 따옴표는 메타데이터 인수를 하나로 유지합니다. 줄 끝의 역슬래시는 같은 명령을 다음 줄에서 계속합니다.

aws s3 cp documents/revenue.csv s3://labex-team-documents/finance/2026-09/revenue.csv \
  --content-type text/csv \
  --metadata 'department=finance,period=2026-09'

업로드 메시지에는 대상 키가 표시됩니다. 환영 문서를 자체 키와 속성으로 업로드하세요. text/plain은 특별한 문서 형식이 없는 일반 텍스트를 뜻합니다.

aws s3 cp documents/welcome.txt s3://labex-team-documents/hr/welcome.txt \
  --content-type text/plain \
  --metadata 'department=hr'

ls(목록)와 --recursive를 사용하여 폴더처럼 보이는 접두사로 묶는 대신 버킷 전체의 완전한 키를 표시하세요.

aws s3 ls s3://labex-team-documents/ --recursive

두 줄이 finance/2026-09/revenue.csv와 hr/welcome.txt로 끝납니다. 타임스탬프는 달라집니다. AWS View에는 같은 버킷 안에 두 키가 모두 표시됩니다. 부서마다 별도 버킷을 생성하지 않고 이름으로 객체를 정리했습니다.

속성을 확인하고 보고서 검색하기

이 단계에서는 한 부서의 객체를 선택하고 메타데이터를 확인한 뒤 다운로드한 보고서가 원본과 일치함을 증명합니다.

aws s3api는 개별 S3 API 작업을 제공합니다. 상위 수준의 aws s3 명령은 일반적인 파일 작업 흐름을 처리하며 둘 다 같은 객체를 다룹니다. list-objects-v2는 객체 레코드를 나열합니다. --bucket은 컨테이너 이름을 지정하고 --prefix는 S3가 반환하는 키를 해당 문자열로 시작하는 키로 제한합니다.

aws s3api list-objects-v2 --bucket labex-team-documents --prefix finance/

Contents에서 finance/2026-09/revenue.csv를 찾으세요. hr/welcome.txt는 finance/로 시작하지 않으므로 응답에 HR 객체는 없습니다. 접두사는 사용자 지정 메타데이터가 아닌 이름을 필터링합니다. department=finance만으로는 이름이 다른 키가 이 결과에 포함되지 않습니다.

head-object는 본문을 다운로드하지 않고 객체의 속성을 검색합니다. 접두사를 포함한 완전한 키를 제공하세요.

aws s3api head-object --bucket labex-team-documents --key finance/2026-09/revenue.csv

응답에는 text/csv로 설정된 ContentType, ContentLength(저장된 바이트 수), department와 period가 포함된 Metadata 객체가 있습니다. 타임스탬프와 ETag 같은 다른 필드는 저장된 객체를 설명합니다. 메타데이터는 원래 로컬 파일이 아닌 저장된 사본에 연결됩니다.

AWS View에서 finance/2026-09/revenue.csv를 클릭하세요. 펼친 카드에는 Content-Type, 사용자 지정 메타데이터, 실제 저장된 CSV 내용이 표시됩니다. CLI 응답과 비교하세요.

이 예시는 스토리지에서 읽은 속성과 내용을 포함하여 펼친 재무팀 객체를 보여 줍니다.

재무팀 키, 메타데이터, CSV 내용

S3 URI를 원본으로, 새 로컬 파일 이름을 대상으로 사용하여 다운로드하세요. 파일 이름이 키와 같을 필요는 없습니다.

aws s3 cp s3://labex-team-documents/finance/2026-09/revenue.csv retrieved-revenue.csv

검색한 내용을 확인하세요.

cat retrieved-revenue.csv

앞서 확인한 것과 같은 CSV 두 줄이 보여야 합니다. cmp는 로컬 파일 두 개를 바이트 단위로 비교하며 일치하면 아무것도 출력하지 않습니다. 셸의 &&는 비교가 성공했을 때만 메시지를 출력합니다.

cmp documents/revenue.csv retrieved-revenue.csv && echo 'Report content matches'
Report content matches

이는 검색 과정에서 보고서의 바이트가 보존되었음을 증명합니다. 로컬 파일에는 내용이 있습니다. S3에 저장된 속성을 확인해야 할 때는 head-object를 사용하세요.

재무팀 접두사만 삭제하기

이 단계에서는 HR 문서를 보존하면서 재무팀 문서를 삭제합니다.

공유 버킷에는 서로 무관한 작업이 들어갈 수 있습니다. 전체 버킷을 삭제하거나 버킷 루트를 재귀 삭제 대상으로 사용하면 두 부서 모두 영향을 받습니다. 대신 특정 finance/ 접두사를 선택하세요. 마지막 슬래시는 접두사의 일부이며 finance-archive.csv 같은 이름을 이 범위에서 제외합니다.

aws s3 rm은 객체를 삭제합니다. --recursive는 일치하는 모든 키에 작업을 적용하고 --dryrun은 실제로 수행하지 않은 채 예정된 작업을 나열합니다. 먼저 정확한 범위를 미리 확인하세요.

aws s3 rm s3://labex-team-documents/finance/ --recursive --dryrun

드라이 런 출력에는 finance/2026-09/revenue.csv만 표시됩니다. hr/welcome.txt가 표시되어서는 안 됩니다. 이 시점에는 객체가 여전히 존재합니다.

--dryrun을 제거하여 검토한 작업을 수행하세요.

aws s3 rm s3://labex-team-documents/finance/ --recursive

출력은 재무팀 키의 삭제를 확인합니다. 버킷을 다시 조회하세요.

aws s3 ls s3://labex-team-documents/ --recursive

hr/welcome.txt만 남습니다. AWS View에서 남은 객체를 펼치세요. 환영 메시지와 department=hr 메타데이터는 그대로입니다. 목록 조회와 읽기에 성공하면 다른 부서의 문서를 보존하면서 의도한 범위를 삭제했음을 확인할 수 있습니다.

남은 실습 리소스 정리하기

이 단계에서는 남은 실습 문서와 빈 버킷을 삭제합니다.

HR 객체는 재무팀 작업 중 보호되었습니다. 두 부서의 리소스 모두 이 연습에 속하므로 이제 넓은 재귀 대상을 사용하지 않고 정확한 키로 남은 객체를 삭제할 수 있습니다.

aws s3 rm s3://labex-team-documents/hr/welcome.txt

출력은 HR 키의 삭제를 확인합니다. 컨테이너를 삭제하기 전에 버킷 내용을 확인하세요.

aws s3 ls s3://labex-team-documents/ --recursive

성공한 명령은 객체 행을 출력하지 않습니다. rb(버킷 삭제)로 삭제하려면 버킷이 비어 있어야 합니다.

aws s3 rb s3://labex-team-documents

출력은 remove_bucket: labex-team-documents입니다. 스토리지가 계속 응답하는지 확인하세요.

aws s3 ls

이 새 작업 공간에는 버킷 행이 없습니다. AWS View에는 No buckets가 표시됩니다. Unavailable 메시지는 페이지가 상태를 확인할 수 없다는 뜻입니다. 로컬 원본 문서와 다운로드한 문서는 검토용으로 계속 사용할 수 있습니다.

요약

완전한 객체 키와 접두사로 두 부서의 문서를 정리하고 표준 및 사용자 지정 메타데이터를 지정했습니다. S3 API로 속성을 확인하고 다운로드한 바이트를 원본과 비교했습니다. 접두사 범위의 삭제를 미리 확인하고 관련 없는 문서를 보존한 뒤 남은 실습 리소스를 정리했습니다.

예측 가능한 이름 기반 그룹화에는 접두사를 사용하고 객체 설명에는 메타데이터를 사용하세요. 삭제 범위를 신중하게 선택하고 남아 있어야 할 리소스를 확인하세요.