Spring/multipart

Spring 파일 업로드 ④ - 파일 크기, 확장자 제한 & UUID 파일 이름 처리

cinnamonbrown 2026. 3. 18. 22:02

 

이전 글에서는 Ajax를 이용해 파일을 업로드하는 방법을 알아보았습니다.

 

2026.03.06 - [Spring/multipart] - Spring 파일 업로드 ③ uploadAjax – Ajax 이용하기

 

하지만 파일 업로드에는 반드시 고려해야 할 문제가 있습니다.

 

▶︎ 아무 파일이나 업로드하면 안 된다는 것입니다.

 

 

이번 글에서는

  • 파일의 크기와 확장자를 제한하는 방법
  • UUID를 이용해 파일 이름을 관리하는 방법

에 대해 알아보겠습니다

Contents

  1. 왜 파일 검증이 필요한가
  2. 파일 크기 & 확장자 제한 구현
  3. UUID로 파일 이름 바꾸기
  4. 전체 흐름 정리
  5. 마무리

1. 왜 파일 검증이 필요할까?

파일 업로드를 구현하다 보면 다음과 같은 문제가 발생할 수 있습니다.

  • 너무 큰 파일이 업로드되는 경우
  • 원하지 않는 확장자의 파일이 업로드되는 경우
  • 같은 이름의 파일이 저장되는 경우

이러한 문제를 방지하기 위해
파일 크기와 확장자를 제한하고, UUID를 이용해 파일 이름을 관리합니다.


2. 파일 크기 & 확장자 제한 구현

파일 검증은 uploadAjax.htmlscript 영역에서  파일을 서버로 전송하기 전에 미리 검사하는 방식으로 구현합니다.


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를 이용한 파일 이름 관리
에 대해 알아보았습니다.

 

이 과정을 통해
불필요한 파일 업로드를 방지하고 파일 이름 충돌 문제도 해결할 수 있습니다.


다음 글에서는
업로드된 파일을 리스트로 출력하는 방법에 대해 다뤄보도록 하겠습니다.