< 작업 환경 >
IDE: IntelliJ
Spring Boot: 3.4.1
Java: 21
EC2 Linux: Ubuntu
Amazon S3(Simple storage service)는 AWS에서 제공하는 객체 스토리지 서비스입니다. 구글 드라이브나 iCloud와 같은 파일 저장 서비스와 유사하다고 생각하면 이해하기 쉽습니다.
웹 서버를 개발할 때는 주로 이미지를 저장하는 용도로 S3를 사용합니다. 서버와 분리된 공간에 이미지를 저장함으로써 서버 부하를 줄일 수 있습니다. 또한 데이터를 서버에서 직접 관리하는 대신 S3에 위임하여 운영 부담을 줄일 수 있습니다.
S3를 사용하려면 버킷과 해당 버킷의 정책을 먼저 생성해야 합니다. 이를 위해 주요 용어를 정리해 보겠습니다.
< 용어 정리 >
- 버킷(Bucket): S3의 저장소로 파일을 담아두는 폴더와 유사한 개념
- 객체(Object): S3 버킷에 업로드된 파일(예: 이미지, 동영상 등)
- 정책(Policy): 접근 권한(Permission)을 정의하는 JSON 문서로, 주로 특정 작업을 허용할 때 작성
이 개념을 우리가 사용하는 PC나 노트북의 파일 시스템에 빗대어 설명해 보겠습니다.
S3에서 파일을 관리하려면 버킷(Bucket)을 먼저 만들어야 합니다. 이는 컴퓨터에서 새 폴더를 만드는 것과 비슷합니다. 그다음, 새로 만든 폴더에 이미지나 동영상 같은 파일을 넣게 되는데, S3에서는 이러한 파일을 객체(Object)라고 부릅니다.
폴더를 만들고 파일을 담았다면 이제 폴더를 관리하는 일이 남습니다. 컴퓨터에서 폴더에 접근할 수 있는 사람을 제한하려면 권한을 설정하듯이, S3에서도 버킷에 접근할 수 있는 권한을 정의해야 합니다. 다만, S3는 기본적으로 모든 AWS 리소스에 대한 접근을 차단하므로, 먼저 필요한 권한을 명시적으로 설정해야 버킷을 사용할 수 있습니다. 이러한 권한 설정 과정을 버킷 정책(Policy) 생성이라고 합니다.
정책은 파일을 업로드하거나 다운로드할 때 모두 필요한데, 각각의 작업에 대한 권한을 따로 설정해야 합니다.


[출처: 비전공자도 이해할 수 있는 AWS 입문/실전 - 박재성]
이제 제 Spring boot 프로젝트에 S3를 활용한 이미지 업로드 기능을 구현해보겠습니다.