소개
S3 버전 관리로 잘못된 이미지를 관찰하고 이전 내용을 새 현재 버전으로 복구합니다.
앞선 포트폴리오 실습을 먼저 완료하세요. 새 환경에는 앞 단계의 기능과 별도 리소스가 준비되어 있습니다. 이전 서버, 파일이나 자격 증명을 보관할 필요가 없습니다.
자격 시험과 연결
| 자격 | 시험 과제 | 실습 내용 |
|---|---|---|
| AWS Certified Cloud Practitioner (CLF-C02) | Task 3.6 | S3 버전으로 자료를 복구합니다. |
실습 개요

버전 기록 활성화하기
이 단계에서는 버전 관리는 같은 Key에 쓸 때마다 별도 VersionId를 보관합니다. 활성화 전에 준비된 이미지는 null 버전입니다. AURA의 스킨케어 포장 이미지를 확인합니다. 초기 네 버전은 null이고 새 버전은 images/aura-brand.webp에만 만듭니다.
프로젝트로 이동합니다.
cd /home/labex/project
식별자를 읽습니다.
source website.env
echo "$PORTFOLIO_BUCKET"
버전 관리를 활성화합니다.
aws s3api put-bucket-versioning --bucket "$PORTFOLIO_BUCKET" --versioning-configuration Status=Enabled
설정을 다시 읽습니다.
aws s3api get-bucket-versioning --bucket "$PORTFOLIO_BUCKET"
정상 이미지를 쓰고 VersionId를 ORIGINAL_VERSION에 저장해 표시합니다. 줄 끝의 역슬래시는 같은 명령이 다음 줄로 이어짐을 나타냅니다.
ORIGINAL_VERSION=$(aws s3api put-object \
--bucket "$PORTFOLIO_BUCKET" --key images/aura-brand.webp \
--body portfolio-assets/images/aura-brand.webp --content-type image/webp \
--query VersionId --output text)
echo "$ORIGINAL_VERSION"
AURA의 스킨케어 포장 이미지를 확인합니다. 초기 네 버전은 null이고 새 버전은 images/aura-brand.webp에만 만듭니다.
잘못된 이미지로 덮어쓰기
이 단계에서는 제공된 빨간 초안을 같은 Key에 전송합니다.
초안을 올리고 DRAFT_VERSION을 저장해 표시합니다.
DRAFT_VERSION=$(aws s3api put-object \
--bucket "$PORTFOLIO_BUCKET" --key images/aura-brand.webp \
--body aura-draft.webp --content-type image/webp \
--query VersionId --output text)
echo "$DRAFT_VERSION"
aura-draft.webp는 ECHO 음반 이미지입니다. AURA Key에 올린 뒤 AURA 카드가 포장 대신 음반을 보여 줍니다. FORMA와 ECHO는 그대로이며 이전 정상 버전은 S3에 남습니다. 목록은 버킷의 버전들을 보여 줍니다. Key가 images/aura-brand.webp인 행을 확인하고 나머지 세 Key의 null은 유지합니다.
aws s3api list-object-versions --bucket "$PORTFOLIO_BUCKET"
aura-draft.webp는 ECHO 음반 이미지입니다. AURA Key에 올린 뒤 AURA 카드가 포장 대신 음반을 보여 줍니다. FORMA와 ECHO는 그대로이며 이전 정상 버전은 S3에 남습니다.

이전 내용 복구하기
이 단계에서는 원본 VersionId로 정상 바이트를 가져와 새 현재 버전으로 게시합니다.
get-object의 version-id로 이전 이미지를 가져옵니다.
aws s3api get-object --bucket "$PORTFOLIO_BUCKET" --key images/aura-brand.webp --version-id "$ORIGINAL_VERSION" recovered-aura.webp
cmp로 원본과 바이트를 비교하고 같으면 출력하지 않습니다.
cmp portfolio-assets/images/aura-brand.webp recovered-aura.webp
가져온 이미지를 올려 RESTORED_VERSION을 저장합니다.
RESTORED_VERSION=$(aws s3api put-object \
--bucket "$PORTFOLIO_BUCKET" --key images/aura-brand.webp \
--body recovered-aura.webp --content-type image/webp \
--query VersionId --output text)
echo "$RESTORED_VERSION"
새로고침하면 AURA 포장 이미지가 돌아옵니다. 내려받기만 해서는 현재 버전이 바뀌지 않으며 복원한 바이트를 게시하면 RESTORED_VERSION이 생깁니다. FORMA, ECHO와 projects.json은 유지합니다.

만든 버전만 정리하기
이 단계에서는 저장한 세 ID를 정확히 지정합니다. VersionId 없이 삭제하면 삭제 마커를 만들며 기록 자체를 지우는 작업과 다릅니다.
복구한 RESTORED_VERSION만 삭제합니다.
aws s3api delete-object --bucket "$PORTFOLIO_BUCKET" --key images/aura-brand.webp --version-id "$RESTORED_VERSION"
초안 버전을 삭제합니다.
aws s3api delete-object --bucket "$PORTFOLIO_BUCKET" --key images/aura-brand.webp --version-id "$DRAFT_VERSION"
첫 단계에서 만든 ORIGINAL_VERSION만 삭제합니다.
aws s3api delete-object --bucket "$PORTFOLIO_BUCKET" --key images/aura-brand.webp --version-id "$ORIGINAL_VERSION"
준비된 null만 남았는지 기록을 확인합니다. 목록은 버킷의 버전들을 보여 줍니다. Key가 images/aura-brand.webp인 행을 확인하고 나머지 세 Key의 null은 유지합니다.
aws s3api list-object-versions --bucket "$PORTFOLIO_BUCKET"
서버를 종료합니다.
aws ec2 terminate-instances --instance-ids "$INSTANCE_ID"
종료를 기다립니다.
aws ec2 wait instance-terminated --instance-ids "$INSTANCE_ID"
버킷, 초기 null 이미지, 역할과 참조 데이터는 유지합니다.
요약
이전 바이트를 가져와 다시 게시하고 실제 복구를 확인한 뒤 만든 세 버전만 삭제했습니다.
공식 문서: S3 Versioning, retrieving object versions.



