클라이언트에서 이미지는 base64로 인코딩해서 서버로 보내면 서버에서는 이 base64 스트링을 저장하려고 합니다.
클라이언트에서 요청이 들어오면 다시 base64로 보내야되서 서버에서 이 값을 따로 파일로 변환할 필요는 없을 것 같습니다.
아무튼 서버에서는 전달받은 base64 스트링을 DB에 저장하려고 하는데..
1. base64 스트링을 그대로 MEDIUMTEXT 타입을 가진 컬럼에 저장.
2. base64 스트링을 blob로 변환(gist.github.com/fupslot/5015897)해서 BLOB 타입을 가진 컬럽에 저장.
어떤 방법이 좋은건가요?? 고수님들 답변 부탁드립니다.
이미지 파일을 꼭 DB에 저장해야 하는 이유가 있나요 ? 말씀하신 2가지 방법으로 이미지 파일을 저장할 수는 있지만, 이미지 파일을 File 시스템이 아닌 DB테이블에 저장해서 얻을 수 있는 장점이 별로 없습니다. 웹서비스로 이용할 수 있는 디렉토기가 아닌 IMAGE 파일만 저장하는 전용 폴더를 할당해서 이미지 파일을 하드 디스크에 보관하고 이미지 파일이 저장된 경로(PATH) 값을 DB 테이블에 저장하고 클라이언트에서 이미지 파일 요청 시 DB 테이블에서 이미지 파일의 경로(PATH)를 조회하고 해당 경로에 이미지 파일을 접근해서 이용하는 방법이 통산적으로 많이 이용하는 방법인 것 같습니다. |
위에분 말처럼, 이미지는 생각외로 트래픽이 상당하므로, 아예 따로 이미지 전용 서버를 구축하는 경우도 많습니다. DB에 이미지의 path만 저장해야지, raw를 저장하는건 지양해야 합니다. |
저는 매우 이쪽과 무관한 사람이지만.. db라는 것은 데이터를 저장하기 위한 시스템이 아니고 데이터를 취급하고 관리하는 시스템인데... 이미지를 db에 저장하는건 장점이 거의 없는것 같아요. 정형 데이터와 비정형 데이터의 차이같은데 이미지를 그렇게 db에 저장해서 이미지의 속성이나 값에 따라 어떤 가치 있는 정보를 얻을 수가 없잖아요? 가령 상의 이미지랑 하의 이미지를 구분한다거나 말이죠. 정말 필요한 이유가 있다면 어쩔수 없겠지만 그런 것이 아니라면 굳이 db에 사이즈도 제 각각이고 클 이미지를 저장할 필요가 없을것 같습니다. |
제가 이렇게 생각한 이유는 클라이언트(ios, android)에서 이미지 파일을 base64 인코딩된 형태로 전달하고 클라이언트가 나중에 이미지를 다시 요청할 때도 base64 형태로 전달받기 때문입니다. 주고 받는 형태가 base64라서 이걸 서버에서 받을 때 파일로 변환하고 줄 때는 base64로 다시 변환하는 것이 낭비라고 생각했는데 그럼에도 파일로 받는 것이 더 효율적인가 보네요.(물론 2번의 형태는 파일로 저장하는 것처럼 변환에 대한 낭비가 있지만..) 댓글 감사합니다. |