소개
팀은 일일 CSV 보고서 디렉터리를 게시합니다. 디렉터리를 업로드하고 변경 사항을 게시한 뒤 별도의 보관 자료를 보호하면서 오래되어 필요 없는 저장된 보고서를 삭제합니다.
먼저 키와 메타데이터로 문서 정리하기를 완료하고 버킷, 키, 접두사, 다운로드 개념을 익히세요. 새 VM에 CLI 연결, 로컬 보고서, 보관 자료만 들어 있는 버킷이 제공됩니다. 명령에는 Terminal을 사용하고 옆의 AWS View 탭에서 변경 사항을 관찰하세요.
인증 시험 관련 주제
이 실습은 다음 시험 주제에 대한 실습 경험을 제공합니다.
- Cloud Practitioner (CLF-C02) · 태스크 3.6: S3 디렉터리 동기화와 범위를 지정한 삭제.
- Solutions Architect – Associate (SAA-C03) · 태스크 3.1: S3 디렉터리 동기화와 범위를 지정한 삭제.
- Developer – Associate (DVA-C02) · 태스크 1.3: S3 디렉터리 동기화와 범위를 지정한 삭제.
준비된 보고서 디렉터리 게시하기
이 단계에서는 로컬 보고서 두 개를 daily/ 접두사로 게시하고 파일 이름이 객체 키에 대응하는 방식을 이해합니다.
cd(디렉터리 변경)로 작업 공간에 들어가세요.
cd /home/labex/project
로컬 파일 이름을 나열하는 ls로 준비된 보고서 디렉터리를 확인하세요.
ls reports
목록에는 monday.csv와 tuesday.csv가 있습니다. 둘 다 CSV 파일입니다. 헤더는 열의 이름을 지정하고 각 레코드의 값은 쉼표로 구분됩니다. 파일 내용을 출력하는 cat으로 월요일 보고서를 확인하세요.
cat reports/monday.csv
date,orders
2026-09-28,120
준비된 버킷을 나열하세요. S3 위치에서 --recursive는 버킷 전체의 완전한 키를 표시합니다.
aws s3 ls s3://labex-report-delivery/ --recursive
archive/retention.txt만 존재합니다. 보관 자료는 별도의 작업 흐름에 속하므로 일일 동기화 중 보존해야 합니다.
aws s3 sync는 원본과 대상을 순서대로 받습니다. 원본 디렉터리의 파일을 재귀적으로 살펴보므로 sync에는 --recursive가 필요하지 않습니다. 각 상대 파일 이름은 대상 접두사 아래의 키가 됩니다. 따라서 reports/monday.csv는 daily/reports/monday.csv가 아닌 daily/monday.csv가 됩니다.
aws s3 sync reports/ s3://labex-report-delivery/daily/
명령은 월요일과 화요일 업로드를 출력하며 출력 순서는 달라질 수 있습니다. 전체 버킷을 다시 나열하세요.
aws s3 ls s3://labex-report-delivery/ --recursive
archive/retention.txt, daily/monday.csv, daily/tuesday.csv라는 키 세 개가 보여야 합니다. AWS View에도 같은 객체가 표시됩니다. daily/monday.csv를 클릭하여 저장된 두 줄짜리 CSV 보고서를 읽으세요. 보관 자료는 선택한 daily/ 대상 범위 밖에 유지됩니다.
변경 사항과 새 보고서 동기화하기
이 단계에서는 보고서 하나를 업데이트하고 다른 보고서를 추가한 뒤 변경되지 않은 보고서를 다시 업로드하지 않고 변경 사항을 전송합니다.
양쪽 모두 변경되지 않았다면 같은 원본과 대상으로 sync를 실행해도 안전합니다.
aws s3 sync reports/ s3://labex-report-delivery/daily/
기존 파일이 이미 최신 상태이면 업로드 줄이 없습니다. 로컬에서 S3로 전송할 때 CLI는 대상 키가 없는지, 크기가 다른지, 로컬 파일의 수정 시간이 더 최근인지 고려합니다. 디렉터리를 계속 감시하지는 않습니다. 변경 사항을 게시하고 싶을 때 sync를 실행합니다.
월요일 보고서에 늦게 들어온 주문 25건을 추가하세요. printf는 따옴표로 감싼 텍스트를 출력하고 \n은 줄을 끝냅니다. 셸의 >>는 로컬 파일을 교체하는 대신 뒤에 내용을 덧붙입니다.
printf '2026-09-28,25\n' >> reports/monday.csv
세 줄짜리 결과를 확인하세요.
cat reports/monday.csv
date,orders
2026-09-28,120
2026-09-28,25
수요일 보고서를 생성하세요. 여기서 >는 새 파일을 쓰며 해당 경로의 기존 내용을 교체합니다.
printf 'date,orders\n2026-09-30,150\n' > reports/wednesday.csv
게시하기 전에는 저장된 월요일 보고서가 여전히 두 줄이고 AWS View에 수요일 보고서는 없습니다. 로컬 파일만 편집해서는 S3가 변경되지 않습니다.
다시 게시하세요.
aws s3 sync reports/ s3://labex-report-delivery/daily/
변경된 월요일 보고서와 새 수요일 보고서의 업로드가 보여야 합니다. 화요일은 변경되지 않았으므로 업로드되지 않습니다. 이것은 모든 파일을 무조건 복사하는 대신 변경 사항을 복사하는 증분 전송입니다.
AWS View에서 월요일에는 이제 늦게 들어온 주문이 표시되고 수요일도 나타납니다. 실제 저장된 내용을 비교할 수 있도록 월요일을 별도의 로컬 경로로 다운로드하세요.
aws s3 cp s3://labex-report-delivery/daily/monday.csv retrieved-monday.csv
cmp는 파일을 바이트 단위로 비교합니다. 내용이 일치하면 차이를 출력하지 않고 성공적으로 종료합니다. &&는 비교가 성공한 뒤에만 메시지를 출력합니다.
cmp reports/monday.csv retrieved-monday.csv && echo 'Updated report matches'
Updated report matches
이는 업데이트가 스토리지에 반영되었음을 확인합니다. 명령 성공 메시지만으로는 어떤 바이트가 저장되었는지 알 수 없습니다.
아래 예시는 업데이트 후 저장된 월요일 보고서를 펼친 모습입니다. 수요일이 존재하고 별도의 보관 자료도 버킷에 남아 있습니다.

일일 접두사만 미러링하기
이 단계에서는 관련 없는 보관 자료를 보호하면서 더 이상 필요 없는 대상 보고서를 삭제합니다.
sync 대상은 daily/이며 archive/는 범위 밖에 유지됩니다.

화요일 보고서는 더 이상 게시할 일일 모음에 속하지 않습니다. rm(삭제)으로 해당 로컬 파일만 삭제하세요. 이것은 로컬 파일 시스템 명령이므로 S3 객체를 삭제하지 않습니다.
rm reports/tuesday.csv
일반 sync를 다시 실행하세요.
aws s3 sync reports/ s3://labex-report-delivery/daily/
대상 접두사를 나열하세요.
aws s3 ls s3://labex-report-delivery/daily/ --recursive
화요일이 여전히 나타납니다. 기본적으로 sync는 누락되거나 업데이트된 파일을 복사하지만 대상에만 있는 추가 객체는 그대로 둡니다. 원본 파일만 삭제해서는 저장된 사본이 삭제되지 않습니다.
**미러링(mirror)**은 삭제를 포함하여 대상의 파일 집합을 원본에 맞춥니다. --delete는 일치하는 원본 파일이 없는 대상 키를 삭제합니다. 먼저 실제로 수행하지 않고 예정된 작업을 표시하는 --dryrun과 함께 사용하세요.
aws s3 sync reports/ s3://labex-report-delivery/daily/ --delete --dryrun
드라이 런에는 daily/tuesday.csv의 삭제만 나열되어야 합니다. 월요일과 수요일은 원본과 일치하고 archive/retention.txt는 daily/ 밖에 있습니다. 대상 접두사를 정확히 유지하세요. 버킷 루트를 사용하면 보관 자료도 범위에 포함됩니다.
예정된 삭제를 확인한 뒤 --dryrun 없이 같은 작업을 실행하세요.
aws s3 sync reports/ s3://labex-report-delivery/daily/ --delete
명령은 화요일의 삭제를 출력합니다. 사라진 것과 보존된 것을 모두 확인할 수 있도록 전체 버킷을 살펴보세요.
aws s3 ls s3://labex-report-delivery/ --recursive
남은 키는 daily/monday.csv, daily/wednesday.csv, archive/retention.txt입니다. AWS View에서 보관 객체를 열고 여전히 Keep the archive outside daily synchronization.라고 표시되는지 확인하세요. 미러링 작업은 선택한 접두사에만 영향을 주었습니다.
실습에 속한 스토리지 리소스 삭제하기
이 단계에서는 이 연습을 위해 생성된 보고서와 보관 자료를 정리한 뒤 빈 버킷을 삭제합니다.
보관 자료는 일일 미러링 중 유지해야 했지만 이것도 이 연습에 속한 일회성 리소스입니다. 이제 명시적으로 삭제해도 안전합니다. 먼저 daily/로 제한한 재귀 작업으로 일일 보고서 객체 두 개를 삭제하세요.
aws s3 rm s3://labex-report-delivery/daily/ --recursive
출력은 보고서 두 개의 삭제를 확인합니다. 완전한 키로 보관 자료를 삭제하세요.
aws s3 rm s3://labex-report-delivery/archive/retention.txt
버킷이 비어 있는지 확인하세요.
aws s3 ls s3://labex-report-delivery/ --recursive
객체 행 없이 성공한 명령으로 빈 상태임을 확인할 수 있습니다. 이제 aws s3 rb(버킷 삭제)로 컨테이너를 삭제할 수 있습니다.
aws s3 rb s3://labex-report-delivery
출력은 remove_bucket: labex-report-delivery입니다. 남은 버킷을 확인하세요.
aws s3 ls
남은 버킷 행이 없습니다. AWS View는 상태 조회에 성공한 뒤 No buckets를 표시합니다. 로컬 보고서 파일은 검토용으로 남습니다. 스토리지 리소스를 삭제해도 로컬 사본이 삭제되지는 않습니다.
요약
로컬 보고서 디렉터리를 S3 접두사로 게시하고 변경 없이 sync를 반복했습니다. 수정된 보고서와 새 보고서를 업로드하고 검색한 업데이트를 원본과 비교했습니다. 일반 sync가 대상에만 있는 추가 객체를 유지한다는 점을 확인한 뒤 daily/로 제한한 --delete 미러링을 미리 확인하고 수행했습니다.
보관 자료는 대상 접두사 밖에 있었으므로 이 작업 중 보존되었습니다. 실습에 속한 모든 스토리지 리소스를 정리하기 전에 새 상태와 보존된 데이터를 모두 확인했습니다. 이후 작업 흐름에서도 sync를 실행하기 전에 원본, 대상, 삭제 범위를 선택하세요.



