s3를 사용하기 위한 설정과 이미지 업로드

Seung jun Cha·2024년 7월 17일
0

s3설정

생성한 s3를 프로그램에서 사용하기 위한 코드이다. 엑세스 키 등의 설정은 application.yml, application.properties에서 한다.

@Value("${}") 는 해당 위치의 값을 가져와서 변수에 할당해주는 역할을 한다.

s3와 연결하기 위한 코드를 살펴보자

  • @Bean 어노테이션은 해당 메서드가 Spring 컨테이너에 의해 관리되는 Bean 객체를 반환한다는 것을 의미한다.

  • amazonS3Client 메서드는 AmazonS3Client 객체를 반환합니다.

  • AWS 자격 증명 설정 (BasicAWSCredentials)

    • BasicAWSCredentials 객체를 생성하여 AWS 접근 키(accessKey)와 비밀 키(secretKey)를 설정한다. 이 자격 증명 객체는 AWS 서비스에 접근하는 데 사용된다.
  • AmazonS3ClientBuilder 사용

    • AmazonS3ClientBuilder.standard() 메서드를 사용하여 AmazonS3Client의 빌더를 얻는다.
    • .withRegion(region) 메서드를 호출하여 S3 클라이언트가 사용할 AWS 리전을 설정한다.
    • .withCredentials(new AWSStaticCredentialsProvider(awsCreds)) 메서드를 호출하여 앞에서 생성한 awsCreds 자격 증명을 S3 클라이언트에 제공하는 AWSStaticCredentialsProvider를 설정한다.
  • 빌더에서 AmazonS3Client 객체 생성 (build)

    • .build() 메서드를 호출하여 AmazonS3Client 객체를 생성하고 반환한다.
      즉, 이 코드는 특정 AWS 자격 증명과 리전을 사용하여 Amazon S3 클라이언트를 설정하고, 이 클라이언트를 Spring Bean으로 등록하여 애플리케이션의 다른 부분에서 사용할 수 있도록 한다.

쉽게말하면 엑세스 키와 시크릿 키를 사용해서 aws에 접근하고 리전(지역)을 설정한 다음 일치하는 s3를 사용할 수 있게 한다는거다.

이미지 업로드 로직

s3에 이미지를 업로드 하기 위한 로직을 보자

여기서 bucket에 할당되는 값은 aws에서 만든 s3의 이름과 동일해야한다.

dirName은 이미지가 들어가는 폴더명이다. 이 폴더에 들어가는 파일명은 UUID랜덤값_파일의 원래이름 으로 설정했다.

createObjectMetadata메서드는 업로드 되는 파일의 메타데이터를 반환해준다. 여기서는 파일으 크기와 타입을 반환한다.

putObject메서드를 사용해서 s3에 업로드하는데, 여기서 getInputStream이 사용되는 이유는 파일의 내용을 바이트 스트림으로 읽어 S3 버킷에 저장하기 위해서이다. 객체의 파일의 입출력을 위해서는 바이트배열로 변환이 필요하다.

amazonS3Client.getUrl을 사용해서 저장된 파일이 들어있는 s3 url을 반환한다.

  • s3Uploader가 사용된 BlogUserService이다. 여기서 파일이 들어가는 폴더명은 profile-image로 설정했다.

  • 파일이 저장된 s3페이지다.

0개의 댓글