JAVA + AWS S3

전현진·2025년 6월 23일

최종프로젝트

목록 보기
2/5

서론 :

앞서 AWS S3 버켓과 IAM을 설정을 마쳤다.

이제 자바에서 S3를 설정하고 사용하는 방법을 알아보자

쿼리 작성은 인텔리제이를 사용했고 자바 17버전, Spring boot를 이용하고 있다.


1. build.gradle

AWS S3의 의존성을 추가하여 프로젝트에서 동작 할 수 있도록 설정.

2. application.properties 설정

프로퍼티로 S3 버켓의 이름, IAM의 액세스키와 시크릿키를 설정을 받는데
인텔리제이 환경변수에 키의 실제 값을 넣고, 참조하여 사용하고 있다.

3. 디렉터리 구성

s3 아래 config와 service로 나누어 구성함.

4. S3 컨피그

@Configuration 어노테이션을 사용해 클래스를 컨피그로 등록시키고

AwsBasicCredentials 타입의 credentials에 액세스키와 시크릿키를 설정하고

빌드를 이용해 S3Client의 서울지역과 키값을 세팅하고 amazoneS3()을 @Bean으로 등록한다.

5. 인터페이스 S3Service

서비스 기능은 S3ServiceImpl로 넘기고, 확장성과 유지보수성을 가진다.

6. S3ServiceImpl 서비스로직

S3 버켓이름을 헬퍼 메소드로 작성 여러 메소드에서 사용하능하게 작성하였다.

파일을 업로드 하는 메소드로 먼저 받은 파일이 비어있는지 확인하고 randomUUID를 이용하여 파일명을 새로 만들어 주고

S3에 파일을 업로드 할 때, 필요한 요청 정보(PutObjectRequest)로 만들어 주고

S3에 실제로 파일을 업로드 요청을 보내고 성공하면 파일명을 리턴, 실패하면 예외처리를 던진다.

  • contentType(file.getContentType()) :
    S3에서 파일 열 때 자동으로 해당 타입으로 인식

  • acl(ObjectCannedACL.BUCKET_OWNER_FULL_CONTROL) :

    • 파일에 대한 접근 권한(ACL) 을 설정
    • 버킷 소유자에게 모든 권한 부여
  • s3Client.putObject(...) :

    • S3에 실제로 파일을 업로드하는 명령
    • 안에 들어가는 두 가지 인자 :
      • putObjectRequest :
        - 앞서 만든 버킷 이름, 파일 이름, 권한 등 설정
      • RequestBody.fromInputStream(file.getInputStream(), file.getSize()) :
        - 실제로 업로드할 파일의 내용, InputStream을 읽어서 S3로 전송함

파일을 S3에서 삭제 하는 기능으로

S3에 파일을 삭제 할 때, 필요한 요청 정보(DeleteObjectRequest)로 만들어 주고

S3에서 실제로 파일 삭제요청을 보내서 성공하면 info 로그를, 실패하면 warn 로그를 출력한다.


AWS S3를 컨피그와 서비스 구현 하는 방법을 알아보았다.

이제 클라우드 저장 시스템을 이용하여 대용량의 파일이라도 안전하게 보관 할 수 있게 되었다.

profile
안녕하세요

0개의 댓글