프로젝트 😎/2024_Summer_Bootcamp⛱

Ep5-1. AWS S3 버킷 설정하기

봄설날 2024. 8. 15. 13:51

 

#1 AWS S3를 사용하는 이유

이미지를 다루는 서비스에서 이미지 파일을 직접 DB에 저장할 수 없기 때문에 이미지의 url을 저장하도록 하여 사용한다. 때문에 이미지 파일들을 저장하고 일관성 있는 url을 반환해 주기 위한 저장소가 필요하다. 이때 사용 할 수 있는 서비스가 AWS S3이다. 아마존에서 제공해주는 클라우드 스토리지에 이미지를 저장하는 것이다.

S3 버킷에 이미지를 저장하면 저장된 버킷의 주소를 통해 각각의 이미지가 url을 가지게 되므로 그 url 주소를 받아와 데이터베이스에 저장하면 된다!!

(클라우드 스토리지 중 S3를 사용하는 이유는 보안 성능이 우수해 안정적이기 때문이다)

 

#2 AWS S3 사용하기 : 버킷 생성

이제 S3 서비스를 이용해보자. 우선 버킷을 생성해야 한다. 하나의 버킷이 하나의 저장소라고 생각하면 된다. 예를 들어 버킷을 2개 생성하여 이미지 저장과 동영상 저장으로 분리하여 사용할 수 있고 하나의 버킷만 사용해도 된다.

 

AWS S3 접속 후 버킷 생성하기!

버킷 생성하기 버튼을 누른 후 설정을 해줘야한다.

** 여기서 ACL을 비활성화로 설정했더니 이미지 업로드 과정에서 오류가 발생했다.

AccessControlListNotSupported: The bucket does not allow ACLs
    at Request.extractError (/server/node_modules/aws-sdk/lib/services/s3.js:712:35)
    at Request.callListeners (/server/node_modules/aws-sdk/lib/sequential_executor.js:106:20)
    at Request.emit (/server/node_modules/aws-sdk/lib/sequential_executor.js:78:10)
    at Request.emit (/server/node_modules/aws-sdk/lib/request.js:686:14)
    at Request.transition (/server/node_modules/aws-sdk/lib/request.js:22:10)
    at AcceptorStateMachine.runTo (/server/node_modules/aws-sdk/lib/state_machine.js:14:12)
    at /server/node_modules/aws-sdk/lib/state_machine.js:26:10
    at Request.<anonymous> (/server/node_modules/aws-sdk/lib/request.js:38:9)
    at Request.<anonymous> (/server/node_modules/aws-sdk/lib/request.js:688:12)
    at Request.callListeners (/server/node_modules/aws-sdk/lib/sequential_executor.js:116:18)

ACL이 허용되지 않은 상태인데 파일을 업로드 할 때, ACL을 설정하려 해서 발생하는 오류이다. 이런 오류 로그가 나타나면 ACL을 허용해주자

이 부분에서 버킷 버전 관리를 꼭 비활성화 해주자!!

활성화 할 경우 요금이 많이 나올지도...

이렇게 하면 버킷 생성이 완료된다.

#3 AWS S3 사용하기 : 권한 설정

만들어진 버킷을 서비스에서 사용하려면 권한을 설정해야 한다. 버킷만 생성한 상태에서는 직접 파일 업로드는 가능하지만 다른 서비스에서는 사용이 안된다.

권한 클릭

 

버킷 정책을 생성해야한다. 편집 누르기!! → 정책 생성기 클릭

ARN은 다음과 같이 입력해준다 : arn:aws:s3:::(버킷 이름이 들어가야함! summerteamfvideo)/*

 

 

이제 맨 아래 Generate Policy 를 누르면 생성된 정책이 나오는데, 복사해서 붙여넣기 후 정책 사항 저장하면 된당

그 아래 CORS 설정은 다음과 같이 해주자

[
    {
        "AllowedHeaders": [
            "*"
        ],
        "AllowedMethods": [
            "HEAD",
            "GET",
            "PUT",
            "POST",
            "DELETE"
        ],
        "AllowedOrigins": [
            "*"
        ],
        "ExposeHeaders": [
            "ETag",
            "x-amz-meta-custom-header"
        ]
    }
]

나중에 프론트앤드와 연결할 때 오류를 방지 할 수 있다.

 

이제 버킷 설정은 완료됐다. 하지만 이 버킷을 다른 사용자가 이용하도록 하기 위해서는 아직 권한 설정이 부족하다.

 

IAM 설정을 해줘야 한다.

IAM 이란 Identity and Access Management의 약자로, AWS에서 제공하는 서비스에 대한 엑세스를 안전하게 제어할 수 있는 서비스라는데 '정책'이라는 것을 통해서 서비스를 이용할 수 있고, 없고를 결정한다.

 

정리하자면 IAM을 통해 AWS 서비스에 대한 정책을 결정하고, 키를 발급받아 키가 있으면 서비스를 이용할 수 있는 것이다.

 

IAM 설정은 다음 글에서 알아보자