DB에 이미지를 Base64 형식으로 넣었을 때 속도 저하 현상

 


이전에 웹 개발을 처음 할 때 Ruby on Rails 기반의 웹 개발을 하면서, 기본으로 제공되는 SQLite를 사용했던 적이 있습니다. 이 때에는 외부의 데이터베이스를 연동할 생각은 하지 못하고 일단 배운 지식으로 만들어보자는 생각에 빠르게 만드는데에만 집중했습니다. 아마존 EC2 서버에 해당 서버를 올렸는데, SQLite는 외부에 존재하지 않고 EC2 안에서 함께 동작했습니다.

이 때, SQLite 데이터베이스에 Base64 이미지를 그냥 넣었던 경험이 있습니다. 당시 사용했던 에디터가 summernote 라는 에디터인데 꽤나 깔끔하고 무엇보다 클립보드의 이미지가 바로 업로드 된다는 것이 좋았습니다. 이 때, 에디터에서 이미지 업로드에 대한 구현을 하지 않을 경우에는 Base64 형태로 이미지를 업로드 할 수 있었습니다. Base64는 아래와 같은 형태로 이미지를 표현합니다. 관련포스팅 글 : Base64 이미지 사용하기

data:image/gif;base64,R0lGODlhDwAOAPYBAAAAAP///+Pj5MzS6qy33bfA4sDI5dne8I6e0JGg0Zim1Jqo1aGu2H6SyZOj0HWMxYWYytbY3V98vLG801p9ulN6u2SHw0JvtYiix8vU4TBmsDBmrx9fqyJgrEB1uGCOxRpeqoGjygdXpwlYpw5aqB

아무것도 모르던 때라 데이터베이스에 그냥 이미지 파일을 넣게 되었고, 처음에는 전혀 인지하지 못하였지만 이미지를 로드하는 페이지에서 어마어마하게 큰 속도 저하를 가져오게 되었습니다. 에디터에 이미지를 업로드 할 때도 2개 이상의 이미지를 넣는 경우에는 속도가 너무 느려져서 포스팅하기에도 버거웠습니다. 이미지가 필요하지 않은 메뉴 목록이나 메인 페이지 같은 경우에는 속도가 매우 빨랐지만, 이미지가 많이 들어간 경우에는 어마어마하게 오래 걸렸습니다. 구글에서 검색된 포스팅을 클릭하여 들어가는 경우에 2초 이상, 길면 5초 이상도 걸리는 경우가 많아 제대로 사이트에 접속되고 있는지 아닌지에 대한 여부도 확인하기 어려웠습니다.

DB에서 사진 파일을 잘 사용하지 않는 이유는 DB 자체의 소프트웨어가 가진 부하 때문에 속도가 느리다고 알고 있는데, 이러한 내용을 고려하지 못하고 summernote 에디터의 text를 html로 내보내는 기능을 활용하여 SQLite의 text column에 집어넣었습니다. 아마 성능이 더 좋은 mssql 같은 DB를 사용했을 경우에는 속도가 더 빠를 수도 있다는 생각이 들지만, SQLite에는 애초에 column 옵션이 몇 개 없어서 text로 해서 속도가 매우 느렸던 것 같습니다.

이후, 속도 향상을 위해서 이미지 업로드를 자동으로 할 수 있는 소스코드를 이용하여 파일로 이미지를 업로드 할 수 있게 했습니다. 이 때, 파일 업로드는 로컬 디렉토리로 지정하였습니다. 기존의 Base64 형태의 이미지는 노가다로 해당 이미지를 클립보드에 넣고 다시 복사 붙여넣기 하여 해결했습니다. 아마 향후에 이런 일이 발생한다면 전부 자동화하는 코드를 작성하지 않을까 싶습니다.