[AWS] S3 에 이미지 파일 업로드하기

로선생·2025년 6월 7일

S3란 파일 저장 서비스이다

Ec2내부에 저장할 수도 있지만, 파일이 너무 많아지므로 최적화된 서비스인 S3에 저장한다.

이미지 자체를 DB에 저장하는 것이 아니라,
이미지가 저장된 S3의 주소를 RDS에 저장하는 것이다.

또한 브라우저에서 보는 이미지들도 유저가 사이트를 방문했을 때, S3로부터 이미지를 다운로드 받는 것이다.

버킷과 객체

S3에서는 버킷과 객체라는 개념이 있다.

  • 버킷: gitHub의 Repository와 같이, S3에서도 여러 개의 저장소를 만들 수 있는데, 여기서 하나의 저장소를 버킷이라고 한다.
  • 객체: S3에 업로드한 파일을 객체라고 부른다.

웹 서비스 배포에도 쓴다

S3는 파일 저장 말고도 다른 부가 서비스들이 있다. 그 중에 하나가 바로 '정적 웹 사이트 호스팅'

CloudFront 는 컨텐츠를 빠르게 전송하는 용도다

컨텐츠는 S3라는 곳에 저장이 되는데, 거리가 멀수록 시간이 오래 걸리게 된다. 이런 문제를 해결하기 위해 전세계 곳곳에 컨텐츠 파일의 복사본을 저장해 놓는 임시 저장소를 구현해 놓았는데, 이를 통해 속도를 빠르게 단축시킬 수 있다.

이런 형태의 서비스가 CDN이다. ClouldFront를 CDN서비스라고도 한다.

CloudFront 왜 쓰나요

컨텐츠 전송 성능 향상을 위해서 사용한다.
그리고 또한 놀라운 사실은 S3에서는 HTTPS를 적용시키는 기능을 제공하고 있지 않다,,
때문에 CF를 통해 보안을 강화할 수 있다.

실제 프로젝트에 적용하기

내가 선택할 수 있는 프로세스는 크게 두 가지 방법이 있었다.

클라이언트가 이미지 파일을 선택하면,
(a) 서버에 이미지 업로드 API 요청 → 서버에서 S3에 업로드 후 URL 반환
(b) 또는 클라이언트가 사전 서명된 URL(Presigned URL)을 받아 직접 S3에 업로드 → 업로드 성공 후 S3 URL 클라이언트가 보유
클라이언트는 글 작성 폼에 이미지 URL을 포함해서 글 작성 API에 요청
서버는 전달받은 글 정보(제목, 내용, 이미지 URL 등)를 DB에 저장

[참고]
https://medium.com/@fluffy-puppy-lovely/nestjs-aws-s3%EB%A1%9C-%EC%9D%B4%EB%AF%B8%EC%A7%80-%EC%97%85%EB%A1%9C%EB%93%9C%ED%95%98%EA%B8%B0-05bc258fbca8

profile
이제는 이것저것 먹어요

0개의 댓글