이전 글에서는 Ajax를 이용해 파일을 업로드하는 방법을 알아보았습니다.
2026.03.06 - [Spring/multipart] - Spring 파일 업로드 ③ uploadAjax – Ajax 이용하기
하지만 파일 업로드에는 반드시 고려해야 할 문제가 있습니다.
▶︎ 아무 파일이나 업로드하면 안 된다는 것입니다.
이번 글에서는
- ✅ 파일의 크기와 확장자를 제한하는 방법
- ✅ UUID를 이용해 파일 이름을 관리하는 방법
에 대해 알아보겠습니다
Contents
- 왜 파일 검증이 필요한가
- 파일 크기 & 확장자 제한 구현
- UUID로 파일 이름 바꾸기
- 전체 흐름 정리
- 마무리
1. 왜 파일 검증이 필요할까?
파일 업로드를 구현하다 보면 다음과 같은 문제가 발생할 수 있습니다.
- 너무 큰 파일이 업로드되는 경우
- 원하지 않는 확장자의 파일이 업로드되는 경우
- 같은 이름의 파일이 저장되는 경우
이러한 문제를 방지하기 위해
파일 크기와 확장자를 제한하고, UUID를 이용해 파일 이름을 관리합니다.
2. 파일 크기 & 확장자 제한 구현
파일 검증은 uploadAjax.html의 script 영역에서 파일을 서버로 전송하기 전에 미리 검사하는 방식으로 구현합니다.
2.1 확장자 및 파일 크기 기준 설정
먼저 정규표현식을 이용해 특정 확장자(exe ,sh, zip, alz)를 제한하고,
파일의 최대 크기(maxSize)를 설정합니다.
let checkRule = new RegExp("(.*?).(exe|sh|zip|alz)$"); // 업로드를 제한할 확장자 조건
let maxSize = 5242880; // 업로드 가능한 최대 파일 크기
2.2 파일 검사 함수
파일 이름과 크기를 기준으로 업로드 가능 여부를 판단하는 함수(checkFile 메서드)를 작성합니다.
function checkFile(fileName,fileSize){ if(checkRule.test(fileName)){
//checkRule에 맞는 파일 이름이면
alert("지원하지 않는 형식의 파일입니다"); return false; }
if(fileSize>=maxSize)
{ alert("파일의 용량이 너무 큽니다.")
return false; }
return true; }
✔️ 동작 정리
| 조건 | 결과 |
| 제한된 확장자 | ❌ false |
| 파일 크기 초과 | ❌ false |
| 그 외 | ✅ true |
2.3 업로드 전에 검사 적용하기
파일을 FormData에 담기 전에 위에서 만든 checkFile() 함수를 통해 검사합니다.
for (let i = 0; i < files.length; i++) {
// 파일 검사
if (!checkFile(files[i].name, files[i].size)) return;
formData.append("uploadFile", files[i]);
}
✅ 조건을 통과한 파일만 서버로 전송됩니다.
3. UUID 로 파일 이름 변경
3.1 왜 UUID를 사용할까?
파일 업로드할 대 가장 흔한 문제 중 하나는
▶︎ 파일 이름이 겹치는 경우입니다.
예를 들어
같은 이름의 파일이 업로드되면 기존 파일이 덮어쓰여질 수 있습니다.
3.2 UUID란?
UUID는 중복되지 않는 고유한 문자열을 생성하는 값입니다.
예시
123e4567-e89b-12d3-a456-426614174000
3.3 UUID 적용 전체 흐름
UUID를 이용한 파일 이름 변경은 uploadAjaxPost() 메서드 내부에서 처리됩니다.
먼저 전체 흐름을 간단히 살펴보겠습니다.
전체 코드
for (MultipartFile f : uploadFile) {
// 원본 파일 이름
String uploadFileName = f.getOriginalFilename();
// UUID 생성
UUID uuid = UUID.randomUUID();
// UUID + 파일 이름
uploadFileName = uuid.toString() + "_" + uploadFileName;
// 저장 파일 생성
File saveFile = new File(uploadPath, uploadFileName);
}
✨ UUID 적용 전체 과정 자세히 보기
위 코드의 핵심은 파일 이름 앞에 UUID를 붙여 새로운 이름으로 저장하는 부분입니다.
이제 해당 부분을 하나씩 살펴보겠습니다.
✔️1. 원본 파일 이름 가져오기
String uploadFileName = f.getOriginalFilename();
▶︎ 사용자가 업로드한 실제 파일 이름입니다.
✔️ 2. UUID 생성
UUID uuid = UUID.randomUUID();
▶︎ 중복되지 않는 고유한 문자열을 생성합니다.
✔️ 3. UUID를 파일 이름에 추가
uploadFileName = uuid.toString() + "_" + uploadFileName;
▶︎ 파일 이름 충돌을 방지하기 위한 파트입니다.
✔️ 4. 새로운 이름으로 파일 저장
File saveFile = new File(uploadPath, uploadFileName);
▶︎ UUID가 적용된 파일 이름으로 서버에 저장됩니다.
💭 마무리하며
이번 글에서는 파일 업로드 시 필요한
✔ 파일 크기 제한
✔ 확장자 제한
✔ UUID를 이용한 파일 이름 관리
에 대해 알아보았습니다.
이 과정을 통해
불필요한 파일 업로드를 방지하고 파일 이름 충돌 문제도 해결할 수 있습니다.
다음 글에서는
업로드된 파일을 리스트로 출력하는 방법에 대해 다뤄보도록 하겠습니다.
'Spring > multipart' 카테고리의 다른 글
| Spring 파일 업로드 ⑤ - 이미지 판별 & 썸네일 생성 + 업로드 결과 출력 (0) | 2026.03.26 |
|---|---|
| Spring 파일 업로드 ③ uploadAjax – Ajax 이용하기 (0) | 2026.03.06 |
| Spring 파일 업로드 ② - uploadForm으로 업로드 구현하기 (0) | 2026.02.23 |
| Spring 파일 업로드 ① - multipart/form-data 개념과 기본 설정 (1) | 2026.02.18 |