소개
보고서 팀은 일일 판매 보고서를 저장하고 현재 사본을 검색해야 합니다. S3 버킷을 생성하고 보고서를 업로드하고 업데이트한 뒤 다운로드를 확인하고 연습용 리소스를 삭제합니다.
먼저 LabEx에서 AWS 시작하기를 완료하세요. 새 VM에 CLI 연결과 report.txt가 준비되어 있으므로 개인 AWS 로그인이나 이전 리소스는 필요하지 않습니다. 명령에는 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 객체 스토리지, 업로드, 업데이트와 다운로드.
- Data Engineer – Associate (DEA-C01) · 태스크 1.1: 기초 실습: S3 객체 스토리지, 업로드, 업데이트와 다운로드.
스토리지 버킷 생성하기
이 단계에서는 일일 판매 보고서를 위한 버킷을 생성하고 AWS View에서 관찰합니다.
작업 공간으로 이동하세요. cd는 터미널의 현재 디렉터리를 변경합니다. 이 실습의 모든 로컬 파일은 이 디렉터리를 사용합니다.
cd /home/labex/project
준비된 공식 CLI 버전을 확인하세요.
aws --version
출력은 aws-cli/2.37.6으로 시작합니다. 이미지에 도구가 이미 제공되므로 스토리지 작업에 집중할 수 있습니다.
Amazon S3는 파일 내용을 **객체(object)**로 저장합니다. **버킷(bucket)**은 객체를 담고 **키(key)**는 버킷 안의 객체 하나에 이름을 부여합니다. 먼저 컨테이너를 생성한 다음 보고서를 업로드합니다.
labex-backups를 생성하세요. aws s3 mb에서 s3는 객체 스토리지를 선택하고 mb는 버킷 생성(make bucket)을 뜻합니다. s3:// 접두사는 로컬 폴더가 아닌 스토리지 위치를 식별합니다.
aws s3 mb s3://labex-backups
예상 출력:
make_bucket: labex-backups
목록을 뜻하는 ls로 버킷을 나열하세요.
aws s3 ls
labex-backups로 끝나는 줄이 보여야 합니다. 날짜와 시간은 달라집니다. AWS View 미리 보기에는 객체가 없는 labex-backups 카드가 나타납니다. 화살표는 CLI가 스토리지에 연결되는 방식을 보여 주고 버킷 노드는 실제 리소스 조회를 반영합니다.
보고서 업로드하고 확인하기
이 단계에서는 보고서를 S3 객체로 저장하고 미리 보기에서 실제 저장된 내용을 읽습니다.
로컬 파일과 저장된 사본은 별개입니다. 업로드와 다운로드가 둘을 연결합니다.

준비된 로컬 파일을 확인하세요. cat은 텍스트 파일의 내용을 출력합니다.
cat report.txt
예상 출력:
Daily sales: 120 orders
cp는 복사(copy)를 뜻합니다. 아래의 첫 번째 경로는 로컬 원본이고 두 번째는 대상입니다. 버킷 이름 뒤의 report.txt 부분은 객체 키입니다.
aws s3 cp report.txt s3://labex-backups/report.txt
출력에는 report.txt에서 s3://labex-backups/report.txt로 업로드했다고 표시됩니다.
버킷의 객체를 나열하세요.
aws s3 ls s3://labex-backups/
report.txt 줄에는 수정 시간, 크기, 키가 표시됩니다. 업로드는 별도의 저장된 사본을 생성하므로 로컬 파일만 편집해서는 이 사본이 변경되지 않습니다.
AWS View에서 버킷 카드의 객체 수는 1입니다. 카드의 report.txt를 클릭하여 내용을 펼치세요. 미리 보기에는 Daily sales: 120 orders가 표시되어야 합니다. 로컬 원본 파일이 아닌 저장된 객체를 읽는 것입니다.
아래 예시는 버킷 카드에서 업로드된 보고서를 펼친 모습입니다. 내용은 스토리지에서 읽습니다.

저장된 사본 업데이트하고 검색하기
이 단계에서는 보고서를 교체하고 현재 저장된 버전을 다운로드한 뒤 왕복 전송 중 내용이 유지되었음을 증명합니다.
업데이트된 보고서에는 주문 145건이 포함됩니다. printf는 텍스트를 쓰고 \n은 줄바꿈을 추가합니다. 셸의 > 연산자는 지정한 로컬 파일의 내용을 교체합니다.
printf 'Daily sales: 145 orders\n' > report.txt
다시 업로드하기 전에 보고서 미리 보기를 살펴보세요. 저장된 사본은 변경되지 않았으므로 여전히 120 orders가 표시됩니다.
같은 키로 업로드하여 현재 내용을 교체하세요.
aws s3 cp report.txt s3://labex-backups/report.txt
미리 보기에는 이제 145 orders가 표시되고 객체 수는 1로 유지됩니다. 같은 키를 재사용하면 해당 객체가 업데이트됩니다. 이 실습에서 이름이 다른 두 번째 객체를 생성하지는 않습니다.
cp의 방향을 반대로 하여 다운로드하세요. 이제 S3 경로가 원본이고 downloaded.txt가 새 로컬 대상입니다.
aws s3 cp s3://labex-backups/report.txt downloaded.txt
다운로드한 파일을 확인하세요.
cat downloaded.txt
예상 출력:
Daily sales: 145 orders
cmp는 두 파일을 바이트 단위로 비교합니다. 같으면 아무것도 출력하지 않고 성공적으로 종료합니다. &&는 비교가 성공했을 때만 다음 명령을 실행합니다.
cmp report.txt downloaded.txt && echo 'Round trip verified'
예상 출력:
Round trip verified
이 비교는 검색한 내용이 업데이트된 원본과 일치함을 증명합니다. 단계 검증기는 S3를 독립적으로 읽고 저장된 내용과 다운로드한 내용을 비교합니다.
스토리지 정리하기
이 단계에서는 비어 있지 않은 버킷을 삭제할 수 없는 이유를 배우고 이 실습의 객체와 버킷을 삭제합니다.
rb는 버킷 삭제(remove bucket)를 뜻합니다. 먼저 보고서가 아직 있는 상태에서 삭제를 시도하세요.
aws s3 rb s3://labex-backups
이 명령은 예상대로 실패하며 BucketNotEmpty를 반환합니다. 이 실패는 리소스의 의존 관계를 알려 줍니다. 버킷에 객체가 있으므로 컨테이너를 삭제하기 전에 객체부터 삭제해야 합니다. 미리 보기에는 버킷과 객체가 계속 보여야 합니다.
rm은 정확한 S3 경로에 있는 객체를 삭제합니다.
aws s3 rm s3://labex-backups/report.txt
출력에 delete: s3://labex-backups/report.txt가 표시됩니다. 객체는 미리 보기에서 사라지고 버킷은 빈 상태로 남습니다.
이제 빈 버킷을 삭제하세요.
aws s3 rb s3://labex-backups
예상 출력:
remove_bucket: labex-backups
서비스가 계속 응답하며 남은 버킷이 없는지 확인하세요.
aws s3 ls
명령이 버킷 행 없이 끝납니다. AWS View에는 리소스 카드 없이 No buckets가 표시됩니다. 이 상태는 성공한 서비스 조회에서 나온 것입니다. 연결이 끊긴 페이지는 정리를 증명하지 못합니다. 로컬 보고서 파일은 계속 사용할 수 있지만 스토리지 리소스는 삭제되었습니다.
아래 정리 화면에는 상태 조회에 성공한 뒤 남은 버킷 카드가 없는 모습이 표시됩니다.

요약
공식 AWS CLI로 버킷을 생성하고 객체를 업로드하고 교체한 뒤 다운로드하고 파일 내용을 비교하고 스토리지 리소스를 삭제했습니다. AWS View는 명령을 관찰 가능한 리소스 변경과 연결했고 미리 보기는 실제 저장된 내용을 보여 주었습니다.
완전한 보고서 저장 작업 흐름을 연습했습니다. 버킷에 파일을 정리하고 로컬 사본과 저장된 사본을 구분하고 다운로드를 확인한 뒤 버킷을 삭제하기 전에 객체를 삭제했습니다.



