AWS

[AWS] S3 버킷 만들기

늦깍이 2025. 6. 29. 13:00

왜 버킷?

일종의 양동이 개념입니당.
서버를 만들고 그런게 아니고,
AWS에서 관리하고 있는 거대한 스토리지에 내 파일들을 담을 "양동이"를 만드는 개념이에요.

그걸 EC2 서버라던지, 접근할 수 있도록 IAM 역할을 부여만 한다면 연동될 수 있어요.

S3 서비스는 왜 사용?

저는 보통 사진이나 동영상같은 것을 저장하는 서비스를 구축할 때 사용합니다.
일종의 클라우드 서비스이지용.
근데 왜? 굳이? 귀찮게? 하는가.
사진, 동영상 서비스를 구축할 때의 Flow를 설명하면 납득이 될꺼같아요.

사진 및 동영상 저장 기능 구축 Flow

저장 FLOW

  1. Client -> 서버 : 사용자가 사진 파일을 전송을 합니당
  2. 서버 -> S3 버킷 : 서버는 받은 파일을 AWS SDK를 이용해서 S3 버킷의 특정 경로(key)로 업로드합니다.
  3. S3 버킷 -> 서버 : 업로드에 성공하면, 해당 파일에 접근할 수 있는 고유한 URL이 생성 됩니다.
  4. 서버 -> RDS : 저의 경우 RDS에 DB 구축을 했는데, 이 DB에 S3 버킷이 생성한 파일 URL을 저장시킵니다.호출/조회 FLOW
  5. Client -> 서버 : 정보 조회를 요청합니당.
  6. 서버 -> RDS : RDS에 저장되어있던 파일 URL을 가져옵니다.
  7. 서버 -> Client : 서버는 이미지 파일 자체를 보낸다기보단 텍스트로 된 S3 파일 URL을 JSON 데이터 등에 담아 Client에게 전달합니다.
  8. Client -> S3 버킷 : Client는 전달받은 URL을 보고 직접 S3에 이미지를 요청(HTTP GET)해서 화면에 랜더링 합니당.

보오오통 이런 플로우로 진행을 하게 되는데, 이렇게 하지 않았을때 문제점이 뭐가 있을까?라고 한다면
이걸 제외한다면 두가지 정도 방법이 있겠져?

  1. DB에 직접 BLOB등의 형태로 변환해서 직접 저장하기
  2. 서버 스토리지에 그냥 직접 저장시켜버리기

둘 다 문제가 꽤 많아요.

1번은 너무 느립니다.
학생 시절에 해봤는데, 진짜 너어어무 느려서 힘들었어요.
바이너리 데이터를 읽고 쓴다는게 생각보다 DB에 부하가 크게 가더라구요 ㅠㅠ

2번은 가능합니다. 근데 저는 갑부가 아닌걸요...
저는 ec2 프리티어를 사용하고 있는데, 스토리지 체크를 한번해봤더니 대충 12GB 정도 남았더군요.
한... 천장단위? 저장하고 나면 남아나질 않겠죠? 요금 폭탄 맞을 길인거같아서 저는 이건 아닌거같았어요.
혹시 직접 저장하는 분 있다면 후기 알려주면 넘 감사할듯 ㅎ..

기본적으로 S3 버킷은 요금이 많이 싸요.
스토리지 요금이 1GB 당 30원이래나 그러구요(5GB 까지는 무료),
API 호출 비용도 GET이 20,000건, PUT이 2,000건까지는 무료랍니다. 추가 비용도 많이 싸요 ㅎㅎ
그래서 저는 S3 구축합니당

S3 버킷 만들기

서론이 넘 길어졌는데, 한땀한땀 좀 봐봅시다.

1단계 : AWS 인프라 준비

1-1 : 버킷 만들기

  1. AWS 관리 콘솔에 로그인한 다음에 S3 서비스로 가봅시당

  1. 버킷 만들기 클릭하신 다음에, 리전은 서울로 잘 맞춰주시고, 버킷 이름은 알아서 지으세용
  2. 객체 소유권은 ACL 비활성화됨으로 그냥 두시고, 퍼블릭 액세스 차단체크 해제해요!
    나중에 사용자가 직접 파일을 보려면 직접 접근이 가능해야하해서 그렇습니당.

4. 버킷 만들기 클릭!

1-2 : 서버에 IAM 부여

저는 EC2 서버를 쓰고 있어서요. EC2 인스턴스 자체에 S3 접근 권한을 부여하겠습니당.

  1. IAM 서비스로 이동!
  2. 역할 클릭!
  3. 역할 만들기 클릭!!
  4. AWS 서비스를 선택하고 사용 사례는 EC2를 선택하면 됩니당.
  5. 그러고 다음으로 넘어가면 막 엄청 많이 뜨는데, 저는 AmazonS3FullAccess 검색해서 체크 했어요. (실제론 좀더 권한을 최소화하는게 좋다고 합니당)
  6. 이름 만들고 생성하면 이것도 끝!
  7. EC2 서비스 대시보드에서 인스턴스의 작업 -> 보안 -> IAM 역할 수정 클릭!
  8. IAM 역할 업데이트에서 방금 생성한 친구로 업데이트해주면 끝!

이러면 서버쪽 설정은 끝났습니당. 각자의 서버에 적용하는 코드는 필요하면 다시 또 공유하겠습니다!!