HTML5 파일 API 기반 업로더에서 중복 파일 문제
HTML5 파일 API를 활용해 파일 업로더를 개발할 때, 실제 데이터 기준으로 중복된 파일이 업로드되지 않도록 보장해야 하는 요구사항이 자주 발생합니다. 사용자가 동일한 파일을 여러 번 올리는 것을 방지하려면 파일을 고유하게 식별할 수 있는 방법이 필요합니다.
클라이언트 측 MD5 해시 계산의 한계
가장 먼저 떠오르는 방법은 MD5 해시를 계산하는 것이지만, 이 과정이 모두 클라이언트 측에서 이루어질 경우 상당한 시간이 소요되어 효율적이지 않습니다. 특히 대용량 파일의 경우 전체 내용을 읽어 해시를 생성하는 데 걸리는 시간이 사용자 경험을 크게 저하시킬 수 있습니다.
중복 파일 식별에 지름길은 없다
안타깝게도 이 문제에 대한 마법 같은 해결책은 존재하지 않습니다. 파일 이름이나 크기만으로는 내용이 다른 파일까지 중복으로 오판할 수 있기 때문입니다.
파일을 혼동 없이 정확하게 중복 판별하려면 결국 각 파일의 실제 내용을 먼저 읽은 후 서로 비교해야 합니다. 이것이 가장 확실하지만 비용이 큰 방법입니다.
대안: 불변 윈도우 기반 부분 해시 방식
전체 파일을 읽는 부담을 줄이기 위한 절충안으로, 미리 정의된 불변 윈도우(invariant window)를 사용해 파일 블록의 일부 구간(subset)에 대해서만 MD5 해시를 계산하는 방식이 있습니다.
이 방법은 파일 전체가 아닌 특정 구간의 데이터만 해싱하므로 연산량을 크게 줄일 수 있으며, 실무에서 중복 검사 성능과 정확도 사이의 균형점으로 널리 활용됩니다.