ECS: S3 오브젝트 존재 확인
Summary: S3 내에서 오브젝트의 존재를 확인하는 방법
Instructions
HEAD를 사용하여 개체 존재 여부를 보다 효율적으로 확인합니다.
오브젝트 목록은 본질적으로 특정 오브젝트의 존재를 확인하는 비효율적인 방법입니다. 인덱스 검색은 이 특정 요청에 대해 상대적으로 느릴 뿐만 아니라 전체 로드 및 성능에도 영향을 줄 수 있습니다.
특정 개체를 요청하는 것이 매개 변수와 일치하는 하나 이상의 개체를 요청하는 것보다 항상 더 효율적입니다. 오브젝트 목록은 분산 인덱스를 쿼리해야 하는 검색 양식입니다.
개체에 HEAD를 사용하는 것이 개체가 있는지 확인하는 가장 좋은 방법입니다. ECS 오브젝트 SDK를 사용하면 GetObjectMetadataRequest로 이 작업이 수행됩니다.
개체가 없는 경우 SDK는 404 오류 응답으로 인해 다음 예외를 throw합니다.
Exception in thread "main" com.emc.object.s3.S3Exception: Not Found
다음은 getObjectMetadata 클라이언트 메서드에서 사용되는 GetObjectMetadataRequest를 사용하는 예입니다.
try { GetObjectMetadataRequest gom = new GetObjectMetadataRequest(<bucket>, <key>); S3ObjectMetadata om = s3.getObjectMetadata(gom); System.out.println("etag: " + om.getETag()); System.out.println("last modified: " + om.getLastModified().toString()); } catch(com.emc.object.s3.S3Exception e) { System.out.println("What happened: " + e.getMessage()); }
AWS Java SDK를 사용 중이고 객체가 존재하지 않는 경우 SDK에서 다음 예외가 발생합니다.
com.amazonaws.services.s3.model.AmazonS3Exception: Not Found
예를 들면 다음과 같습니다.
try { GetObjectMetadataRequest gom = new GetObjectMetadataRequest(AWSS3Factory.S3_BUCKET, key); s3.getObjectMetadata(gom); } catch(com.amazonaws.services.s3.model.AmazonS3Exception e) { System.out.println("What happened: " + e.getMessage()); }
객체가 있는지 확인하여 putObject가 필요한지 확인합니다.
putObject가 필요한지 확인하기 위해 객체의 존재를 확인하는 경우 PutObjectRequests 조건부 메서드를 사용하는 것이 좋습니다.
withIfMatch() and withIfNoneMatch().
이 두 방법 모두 object etag 값이 필요하며 PUT 요청에서 헤더 "if-match,""if-none-match"를 사용합니다.
각각 Date 객체를 취하는 withIfUnmodifiedSince() 및 withIfModifiedSince() 메서드도 있습니다.
etag 또는 md5를 사용할 수 없는 경우 GetObjectMetadataRequest를 사용하여 검색해야 합니다.
효율적인 대안은 Date가 충분히 오래된 경우 withIfUnmodifiedSince() 를 사용하는 것입니다.
ECS 기술 지원을 포함하는 SR
오브젝트의 존재에 대한 우려가 있는 경우 ECS 지원 팀에 서비스 요청을 개설하십시오.