S3를 알아보고, 실제 S3 서비스를 이용하는 방법을 작성한 글입니다
🔔 사전 준비
1. AWS 회원가입
2. SpringBoot 3.2.3 버전 프로젝트 (3.x.x 버전은 모두 무관합니다.)
Amazon S3
Amazone Simple Storage Service(S3)는 AWS에서 제공하는 객체 스토리지 서비스입니다. 스토리지란 데이터를 저장하는 장소를 말하며, 객체란 텍스트 파일이나 이미지 파일과 같은 데이터를 말합니다.
객체 스토리지는 기존의 파일 스토리지처럼 폴더 구조는 갖지 않고 객체 키로 데이터를 고유하게 식별해 데이터의 입출력과 관리를 수행합니다. 키만으로 데이터를 관리하기 때문에 간편하게 대용량의 데이터를 저장하고 관리할 수 있습니다.
S3는 정적 콘텐츠만 있는 HTML 페이지를 만들고 싶다면 이미지, HTML, CSS 파일 등을 저장해 웹사이트처럼 운영할 수 있고, 로그 분석 시스템을 만들기 위해 응용 프로그램의 로그를 실시간으로 저장하는 용도로 사용할 수도 있습니다. (객체 키만으로 관리되기 때문에 대량 로그 보존에도 충분히 활용할 수 있습니다.)
S3의 특징
S3는 다음과 같은 특징을 가집니다.
- 용량 무제한: 객체당 5TB라는 제약이 있지만 객체 수나 데이터 용량에는 제한이 없습니다.
- 높은 내구성: 일반적으로 데이터가 3개 이상의 AZ로 복사됩니다.
- 저렴한 비용: 서울 리전의 표준 스토리지 요금은 1개월당 0.025USD로 매우 저렴한 편입니다.
S3에서 사용되는 용어
다음은 S3에 사용되는 용어들입니다.
- 버킷: 객체를 저장하는 장소입니다. 버킷의 이름은 모든 리전에서 고유해야 합니다. 즉, 중복되는 이름의 버킷을 생성할 수 없습니다.
- 객체: 버킷에 저장된 데이터를 말합니다. 버킷에는 객체를 무제한으로 저장할 수 있지만 한 객체의 최대 크기는 5TB를 넘을 수 없습니다.
- 키: 객체의 저장 URL 경로입니다. 버킷 이름과 키 이름, 객체 이름을 조합해 고유하게 설정됩니다.
- 예시: s3://example-bucket/folder/object.png
S3 API
S3는 데이터를 등록하거나 삭제하는 API를 제공합니다. 따라 이를 호출해 S3의 객체를 조작할 수 있습니다.
- GET: S3에서 객체를 다운로드
- PUT: S3에 객체를 업로드, 신규 업로드, 갱신, 하나의 PUT 작업은 최대 5GB까지로 더 많은 데이터를 업로드 하는 경우 멀티 파트 업로드라는 기능을 이용해 여러 파트로 나눠 최대 5TB의 데이터를 업로드 할 수 있습니다.
- LIST: S3 버킷 내의 객체 목록을 표시합니다. 데이터 추출 또한 가능합니다.
- COPY: S3 내에서 객체를 복사, 다른 버킷과 리전간의 복사가 가능합니다.
- DELETE: S3 내에 있는 객체를 삭제합니다.
S3 서비스 이용하기
AWS 콘솔 > S3 > 버킷 > 버킷 만들기 클릭
범용 설정, 버킷 이름 작성
이 때 AWS 리전이 서울이 아니라면 오른쪽 상단에서 리전을 서울로 바꿔줍니다.
파일 업로드 및 조회 서비스를 구현하거나, 정적 콘텐츠를 서빙하실 분들은
퍼블릭 액세스 차단 설정을 모두 해제합니다.
이후 노란색 박스 안 체크박스에 체크를 눌러주세요
그럼 버킷이 생성됩니다.
파일을 업로드해보겠습니다
버킷 이름 > 업로드 > 파일 추가 > 업로드
업로드 하고 나서 객체를 클릭하면 S3 URI와 URL을 볼 수 있습니다.
만약 본인의 서비스에서 S3 버킷을 사용하는 분들이라면 (파일 업로드 및 조회 기능 등...) 다음 IAM 설정도 따라해 주시길 바랍니다.
IAM 설정
콘솔 > IAM > 사용자 > 사용자 생성
이름 입력 > 다음
직접 정책 연결 선택
> 권한 정책에서 AmazonS3FullAccess 검색 후 체크
> 다음
> 사용자 생성
AWS Console > IAM > 엑세스 관리자 > 사용자 > 생성한 사용자 이름 클릭 > 보안 자격 증명 > 엑세스 키 만들기 클릭
기타 선택 후(다른거 선택해도 무관) 다음 클릭
태그 입력후 액세스 키 만들기 클릭
비밀 액세스 키는 다시 검색할 수 없으니 어딘가에 메모 해놓으시고 cvs 파일도 다운로드 받으시길 바랍니다.
그럼 S3에 접근할 수 있는 권한을 가진 유저도 추가가 완료됩니다.
부족한 글 읽어주셔서 감사합니다.
'Deploy > AWS' 카테고리의 다른 글
[AWS] RDS로 MySQL 배포하기 (1) | 2024.03.07 |
---|---|
ssh 원격 접속할 때 (WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!) (0) | 2023.11.18 |
[AWS] EC2 인스턴스와 연결하여 RDS로 DB 배포하기 (0) | 2023.10.31 |
[AWS] EC2로 node.js 웹 서버 배포하기 / Nodejs SyntaxError: Unexpected token '(' 에러 해결 (0) | 2023.10.30 |
[AWS] Elastic Beanstalk로 서버 배포 했을 때 502 Bad Gateway 해결하기 (0) | 2023.07.23 |