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

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

s3와 연결하기 위한 코드를 살펴보자
@Bean 어노테이션은 해당 메서드가 Spring 컨테이너에 의해 관리되는 Bean 객체를 반환한다는 것을 의미한다.
amazonS3Client 메서드는 AmazonS3Client 객체를 반환합니다.
AWS 자격 증명 설정 (BasicAWSCredentials)
AmazonS3ClientBuilder 사용
빌더에서 AmazonS3Client 객체 생성 (build)
쉽게말하면 엑세스 키와 시크릿 키를 사용해서 aws에 접근하고 리전(지역)을 설정한 다음 일치하는 s3를 사용할 수 있게 한다는거다.
s3에 이미지를 업로드 하기 위한 로직을 보자

여기서 bucket에 할당되는 값은 aws에서 만든 s3의 이름과 동일해야한다.
dirName은 이미지가 들어가는 폴더명이다. 이 폴더에 들어가는 파일명은 UUID랜덤값_파일의 원래이름 으로 설정했다.
createObjectMetadata메서드는 업로드 되는 파일의 메타데이터를 반환해준다. 여기서는 파일으 크기와 타입을 반환한다.
putObject메서드를 사용해서 s3에 업로드하는데, 여기서 getInputStream이 사용되는 이유는 파일의 내용을 바이트 스트림으로 읽어 S3 버킷에 저장하기 위해서이다. 객체의 파일의 입출력을 위해서는 바이트배열로 변환이 필요하다.
amazonS3Client.getUrl을 사용해서 저장된 파일이 들어있는 s3 url을 반환한다.

