이미지 중복체크는 어떤식으로 하면 좋을까요?
본문
이미지를 첨부하는 서비스가 있습니다.
동일 이미지를 첨부하는 경우가 있어 아래방법을 생각했지만. (이미지 중복방지)
검색에 있어 큰 문제가 될듯합니다. 혹시나 해서 아래방식으로 할 경우
어떤 문제가 있을지 궁금합니다.
첨부파일을 등록해서 업로드할때(이미지)
바이너리 타입으로 바꿔 텍스트 형태로 저장합니다.
이 형태는 data:image/jpeg;base64,asdfugsdfugsdafsdfasdfsdfasdfsfasifhasdfsdfsdfasdfasdf....
형태로 DB textarea 형태로 저장합니다. ( 많은양의 텍스트입니다. )
이 긴 텍스트형태를 검색을 해도 되는지요?
즉, 위 형태를 DB에 저장해두고
추후에 사용자가 동일 이미지를 업로드시 바이너리 타입으로 변환한 후
DB에서 해당 텍스트가 있는지 찾는거죠..
짧은 텍스트가 아닌 이런 긴 텍스트형태를 검색으로 쓰면 어떻게 되나요?
혹은 이런경우 우회해서 다른방법으로 체크하는 방법이 있는지요?
답변 3
파일의 바이너리 스트링이 검색을 주 용도로 사용되지 않는 이상
파일 체크섬 + VARCHAR UNIQUE 컬럼 + INSERT 시도, Duplicate 에러인 경우 중복 처리
정도가 무난할것 같습니다.
파일 체크섬의 경우 다음 함수들중 하나를 사용해볼수 있습니다.
https://www.php.net/manual/en/function.md5-file.php
디테일한 파일용량으로 체크해 보심이... 아주 미세한 자리까지 파일용량이 일치하기는 힘들거든요.
이 긴 텍스트형태를 검색을 해도 되는지요?
즉, 위 형태를 DB에 저장해두고
<=== base64 encode 전체를 디비에 저장할 것이 아니라 몇개의 부분으로 잘라서(substr)
예를들어 처음 200바이트 중간 부분 200바이트, 끝 부분 200바이트
이렇게 일부만 저장하고 비교시 일부분만 비교하는 로직을 만들면
base64 encode된 어마어마한 text 전제를 저장하지않아도 되지않을까 합니다
(사용할 이미지는 화일로 저장)