본 포스팅은 스스로 공부한 내용을 정리하고 기록하기 위하여 올리는 내용이며, 잘못된 내용이 있을 수도 있음을 미리 밝힙니다. 잘못된 내용이 있거나, 더 좋은 방법이 있다면 댓글로 남겨주시기 바랍니다.
프로젝트를 진행하면서 유저의 프로필 이미지를 만드는 api를 구현해야했다. 처음에는 그냥 단순히 byte array 로 이미지를 받아와서 RDBMS에 이미지를 넣어버리려고 했다. 그러나 오류가 빈번히 일어나기도 하였고, 속도가 잘 나오지 않았다.
이미지를 RDBMS에 바이트 배열로 저장하는 것은 몇가지의 문제점을 가지고 있다고한다.
용량 문제: 이미지는 일반적으로 큰 크기를 가지기 때문에, 이미지를 바이트 배열로 변환하여 데이터베이스에 저장하면 데이터베이스 크기가 불필요하게 커질 수 있습니다. 이로 인해 디스크 공간이 많이 소비되고 데이터베이스 성능에 영향을 미칠 수 있습니다.
속도 문제: 이미지를 바이트 배열로 변환하고 저장하는 작업은 추가적인 처리 시간을 필요로 합니다. 이로 인해 데이터베이스 쓰기/읽기 작업이 느려지며, 이미지를 저장하거나 가져오는데 더 많은 시간이 걸릴 수 있습니다.
캐싱 문제: 이미지를 바이트 배열로 저장하면 이미지를 캐싱하기가 어려워집니다. 이미지를 캐싱하지 못하면 동일한 이미지를 여러 번 요청할 때마다 데이터베이스에서 이미지를 가져와야 하므로 불필요한 데이터베이스 부하가 발생할 수 있습니다.
유지보수 문제: 이미지를 바이트 배열로 저장하면 이미지를 관리하거나 수정하기가 어려워집니다. 이미지를 수정하려면 데이터베이스 레코드를 직접 업데이트해야 하며, 이는 복잡하고 오류가 발생할 가능성이 있습니다.
백업/복구 문제: 이미지를 RDBMS에 바이트 배열로 저장하면 백업과 복구 작업이 더 복잡해집니다. 데이터베이스의 크기가 커지고, 이미지 데이터를 관리하기 어렵기 때문에 백업 및 복구 프로세스의 성능이 저하될 수 있습니다.
확장성 문제: 이미지를 바이트 배열로 저장하면 데이터베이스의 확장성에 제한이 생길 수 있습니다. 대량의 이미지를 처리하려면 더 많은 데이터베이스 서버가 필요할 수 있으며, 이로 인해 시스템 전체적인 복잡성이 증가할 수 있습니다.
이미지를 저장할수있는 S3 storage를 프로젝트와 연결하였다. 그리하여 이미지를 s3에 저장한후, url 로 저장해놓고 필요할때마다 url을 호출하였다.
NoSQL 는 RDBMS와는 다른 방식으로 데이터를 저장하고 관리하는 데이터베이스 시스템이라고 한다. 이미지를 비롯한 대용량의 바이너리 데이터를 효과적으로 저장하고 다루는 데 있어서 NoSQL 데이터베이스가 많은 이점을 제공한다고 한다. 이러한 이유로 이미지 저장 등 대용량 데이터를 다루는 경우에는 NoSQL 데이터베이스를 사용하는 것이 적합할수 있다고한다.
s3 설정
s3 버킷 권한설정