
우선 이미지를 데이터베이스에 저장한다고 생각해보자.
이미지를 저장해야 한다면 이미지가 저장되는 테이블에서 칼럼의 데이터 타입을 뭐로 해야할까? 사진이나 음성 등 기존 타입으로 표현하기 애매한 경우는 점부 다 바이너리 데이터로 변환해서 저장 해야하고 따라서 MySQL에서 제공해주는 타입 중에 BLOB(Binary Large Object)라는 타입을 사용해서 저장할 수 있기는 하다. 하지만 사진을 바이너리로 바꾸고 저장을 하고 다시 조회 시 바이너리를 다시 사진으로 바꾸는 과정에서 병목이 생길 것이라 예상이 되는데 따라서 이러한 비구조화 타입의 정보들을 데이터베이스에 직접 저장하는 것은 비효율적이라 선호되지 않는다.
그렇다면 특정 디렉토리에 파일을 저장해두고 이를 호스팅 하게 하는것은 어떨까? 베포 환경을 생각해 보자 무중단 베포를 하는 경우, 기존 컴픁어에서 서버 프로세스를 없애고 새 프로세스를 끼우는 것이 아니라, 새 컴퓨터를 준비하고 서버가 잘 동작이 되면 기존 컴퓨터를 대체하게 된다. 따라서 새 업데이트를 위해 배포를 다시 하면 사진이 날아가 버리게 되는 것이다.
그렇다면 여기서 EC2 하나를 두고 거기서 따로 사진 저장을 하자! 라고 생각이 들 수가 있는데 이러한 경우 관리를 하기가 매우 번거로워지는데 다행히도 AWS에서 제공해주는 S3(Simple Storage Service)라는 것이 있다. S3는 파일을 업로드 하고 다운로드 하는 등의 스토리지 역할에 특화된 서비스이다. S3는 분산된 스토리지를 사용하며 S3를 사용하는 클라이언트가 원하는 만큼의 용량을 제공한다. S3를 사용할 때의 장점은 다음과 같다.