S3Util 분석하기 ver 1.

작심삼일·2024년 6월 18일

1

AwsBasicCredentials credentials = AwsBasicCredentials.create("awsAccessKey","awsSecretAcessKey");

AWS Credential

  • AWS Credential(자격 증명)은 Amazon Web Services(AWS) 리소스와 서비스에 액세스하기 위해 필요한 인증 정보.
    이를 통해 사용자가 AWS 클라우드 내에서 자신의 리소스에 안전하게 접근하고 관리할 수 있다.
  • accessKey와 secretKey 두가지 요소를 지닌다.

AwsBasicCredential

aws service에 접근하기 위한 Aws Credentials를 제공한다.

create()

accessKey와 secretKey를 활용해 새로운 Aws Credentials 객체를 만든다.

[출처]
https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/auth/credentials/AwsBasicCredentials.html

2

S3Client client = S3Client.builder()
                .region(Region.AP_NORTHEAST_2)
                .credentialsProvider(StaticCredentialsProvider.create(credentials))
                .build();

S3 Client

  • 인터페이스
  • S3에 접근하기 위한 Service Client
  • builder() 로 생성 가능

https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/s3/S3Client.html

StaticCredentialsProvider

  • AWS SDK에서 자격 증명을 제공하는 인터페이스 또는 클래스입니다.
  • AWS SDK를 사용하여 AWS 서비스에 액세스할 때, 자격 증명 제공자는 적절한 자격 증명을 찾아내어 애플리케이션에 제공하는 역할을 한다.
    이를 통해 사용자는 하드코딩된 자격 증명을 사용하지 않고도 안전하게 AWS 서비스에 접근할 수 있습니다.

create()

자격 증명 제공자를 '자격증명'을 통해 만들며
자격 증명 제공자는 항상 제공된 자격 증명 모음을 반환합니다.
AwsBasicCredential는 AwsCredentials를 상속받기 때문에, create()문 안에 들어갈 수 있다.

https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/auth/credentials/StaticCredentialsProvider.html

3

PutObjectRequest request = PutObjectRequest.builder()
                .bucket(BUCKET)
                .key(fileName)
                .build();

PutObjectRequest

  • AWS SDK for Java에서 Amazon S3에 객체를 업로드하기 위해 사용하는 요청 객체
    이 객체를 사용하여 S3 버킷에 파일이나 데이터를 업로드할 때 필요한 모든 정보를 지정할 수 있다.

주요 속성 및 메서드
Bucket Name: 업로드할 대상 버킷의 이름.
Key: 업로드할 객체의 키(파일 경로와 유사).
File: 업로드할 파일 객체.
InputStream: 파일 대신 데이터를 스트림으로 업로드할 경우 사용.
Metadata: 업로드할 객체에 대한 메타데이터.

client.putObject(request,
                RequestBody.fromInputStream(inputStream,inputStream.available()));

putObject()

  • AWS SDK for Java v2에서 사용되는 S3Client 인터페이스의 putObject 메서드
  • 사용 : PutObjectRequest와 RequestBody를 받아서 Amazon S3에 객체를 업로드하는 데 사용
  • 기본 구현 : UnsupportedOperationException을 던지는 것으로 보이며, 이는 실제로 사용될 때는 구체적인 구현 클래스에서 오버라이드 되어야 한다는 의미입니다.
default PutObjectResponse putObject(PutObjectRequest putObjectRequest, RequestBody requestBody) throws AwsServiceException, SdkClientException, S3Exception {
    throw new UnsupportedOperationException();
}
매개변수
PutObjectRequest putObjectRequest

업로드할 객체에 대한 모든 정보를 포함하는 요청 객체입니다. 버킷 이름, 객체 키, 메타데이터 등을 포함할 수 있습니다.

RequestBody requestBody

업로드할 실제 데이터입니다. 파일, 입력 스트림 등 다양한 형태로 제공될 수 있습니다.

예외

AwsServiceException
AWS 서비스에서 발생하는 예외입니다. AWS 서비스 측의 문제로 인해 요청이 실패할 때 발생합니다.
SdkClientException
클라이언트 측에서 발생하는 예외입니다. 네트워크 오류 등 클라이언트 측 문제로 인해 요청이 실패할 때 발생합니다.
S3Exception
S3 서비스에 특화된 예외입니다. S3 관련 작업 중 문제가 발생할 때 사용됩니다.

InputStream

Stream
먼저 Stream을 위키백과에 검색하면 이렇게 나온다.

개별 바이트나 문자열인 데이터의 원천
파일을 읽거나 쓸 때, 네트워크 소켓을 거쳐 통신할 때 쓰이는 추상적인 개념

백과에 정의된 내용을 쉽게 표현하면, '데이터가 전송되는 통로'라고 표현할 수 있다.

데이터가 네트워크를 거치건, 파일에서 넘어오건, 키보드로부터 오건, 데이터가 오고가는 통로가 스트림인 것이다.

byte
바이트란 이해하기 쉽다. 다 알고 계시겠지만 모든 데이터는 결국 0과 1로 귀결되고 0이나 1이 8개 모이면 그것을 'byte'라고 부른다. 따라서 우선은 그냥 '데이터'라고 생각해도 된다.

종합하면 InputStream 추상 클래스는 데이터가 들어오는 통로의 역할에 관해 규정하고 있는 추상 클래스이다.

https://lannstark.tistory.com/34

주요 메소드

  • read() : 읽음
  • skip() : 스킵함
  • available() : 데이터가 얼마나 남았는지 반환
  • close() : 통로를 닫음
  • mark() , reset() , markSupported() : 특정시점부터 읽었던 데이터를 다시 읽을 수 있음
RequestBody.fromInputStream(inputStream, inputStream.available()));

이 메서드는 주어진 입력 스트림(inputStream)을 기반으로 RequestBody 객체를 생성하며, 스트림의 길이를 나타내는 두 번째 매개변수를 필요로 합니다.

해석

RequestBody.fromInputStream()
AWS SDK에서 S3에 업로드할 데이터의 본문을 생성하기 위해 사용하는 정적 메서드입니다. 이 메서드는 입력 스트림과 해당 스트림의 길이를 받아
RequestBody 객체를 생성합니다.

inputStream
업로드할 데이터를 포함하는 입력 스트림입니다. 예를 들어, 파일이나 네트워크 소켓에서 읽은 데이터를 포함할 수 있습니다.
inputStream.available()
입력 스트림에서 읽을 수 있는 바이트 수를 반환합니다. 이는 스트림의 길이를 나타내며,

RequestBody 객체를 생성할 때 데이터의 크기를 지정
하기 위해 사용됩니다.

profile
still searching....

0개의 댓글